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); + } + }