This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new d7df5aecda0 CAMEL-20409: camel-core - ModelReifierFactory should 
detect custom on… (#13094)
d7df5aecda0 is described below

commit d7df5aecda0ee217b11409d6b37d4ffc6e10746a
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Mon Feb 12 11:39:44 2024 +0100

    CAMEL-20409: camel-core - ModelReifierFactory should detect custom on… 
(#13094)
    
    CAMEL-20409: camel-core - ModelReifierFactory should detect custom on 
classpath
---
 .../org/apache/camel/spi/ModelReifierFactory.java  | 32 ++++++++++++++++++++++
 .../org/apache/camel/impl/DefaultCamelContext.java | 14 ++++++++++
 2 files changed, 46 insertions(+)

diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/ModelReifierFactory.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/ModelReifierFactory.java
index 727f2d4b32a..b82e5c4ebd0 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/ModelReifierFactory.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/ModelReifierFactory.java
@@ -28,22 +28,54 @@ import org.apache.camel.Route;
  */
 public interface ModelReifierFactory {
 
+    /**
+     * Service factory key for custom factories.
+     */
+    String FACTORY = "model-reifier-factory";
+
+    /**
+     * Creates the route from the model.
+     */
     Route createRoute(CamelContext camelContext, Object routeDefinition);
 
+    /**
+     * Creates the data format from the model.
+     */
     DataFormat createDataFormat(CamelContext camelContext, Object 
dataFormatDefinition);
 
+    /**
+     * Creates the error handler for the route processor.
+     */
     Processor createErrorHandler(Route route, Processor processor) throws 
Exception;
 
+    /**
+     * Creates the error handler using the factory for the route processor.
+     */
     Processor createErrorHandler(Route route, ErrorHandlerFactory 
errorHandlerFactory, Processor processor) throws Exception;
 
+    /**
+     * Creates the default error handler.
+     */
     ErrorHandlerFactory createDefaultErrorHandler();
 
+    /**
+     * Creates the expression from the model.
+     */
     Expression createExpression(CamelContext camelContext, Object 
expressionDefinition);
 
+    /**
+     * Creates the predicate from the model.
+     */
     Predicate createPredicate(CamelContext camelContext, Object 
expressionDefinition);
 
+    /**
+     * Creates the transformer from the model.
+     */
     Transformer createTransformer(CamelContext camelContext, Object 
transformerDefinition);
 
+    /**
+     * Creates the validator from the model.
+     */
     Validator createValidator(CamelContext camelContext, Object 
transformerDefinition);
 
 }
diff --git 
a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
 
b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
index cd355df1836..3a7c8bec0a7 100644
--- 
a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++ 
b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
@@ -22,6 +22,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.function.Function;
 
@@ -79,6 +80,7 @@ import org.apache.camel.spi.Validator;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.DefaultRegistry;
 import org.apache.camel.support.LocalBeanRegistry;
+import org.apache.camel.support.ResolverHelper;
 import org.apache.camel.support.SimpleUuidGenerator;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.OrderedLocationProperties;
@@ -136,6 +138,8 @@ public class DefaultCamelContext extends SimpleCamelContext 
implements ModelCame
 
     public DefaultCamelContext(boolean init) {
         super(init);
+        // setup model factory which must be done very early
+        setModelReifierFactory(createModelReifierFactory());
         if (isDisableJmx()) {
             disableJMX();
         }
@@ -841,4 +845,14 @@ public class DefaultCamelContext extends 
SimpleCamelContext implements ModelCame
         }
     }
 
+    protected ModelReifierFactory createModelReifierFactory() {
+        Optional<ModelReifierFactory> result = ResolverHelper.resolveService(
+                this,
+                this.getCamelContextExtension().getBootstrapFactoryFinder(),
+                ModelReifierFactory.FACTORY,
+                ModelReifierFactory.class);
+
+        return result.orElseGet(DefaultModelReifierFactory::new);
+    }
+
 }

Reply via email to