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 <[email protected]>
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);
+ }
+
}