This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch var in repository https://gitbox.apache.org/repos/asf/camel.git
commit 61dd45599c77e582b81dd8e0cdd5413061822fe7 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Fri Dec 29 19:14:52 2023 +0100 CAMEL-19749: Add variables as concept to Camel --- .../engine/DefaultVariableRepositoryFactory.java | 28 ++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultVariableRepositoryFactory.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultVariableRepositoryFactory.java index 5161c43976e..1c4a65569b4 100644 --- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultVariableRepositoryFactory.java +++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultVariableRepositoryFactory.java @@ -17,7 +17,9 @@ package org.apache.camel.impl.engine; import org.apache.camel.CamelContext; +import org.apache.camel.RuntimeCamelException; import org.apache.camel.StaticService; +import org.apache.camel.spi.FactoryFinder; import org.apache.camel.spi.VariableRepository; import org.apache.camel.spi.VariableRepositoryFactory; import org.apache.camel.support.CamelContextHelper; @@ -33,8 +35,11 @@ public class DefaultVariableRepositoryFactory extends ServiceSupport implements private static final Logger LOG = LoggerFactory.getLogger(DefaultVariableRepositoryFactory.class); + public static final String RESOURCE_PATH = "META-INF/services/org/apache/camel/variable-repository/"; + private final CamelContext camelContext; private VariableRepository global; + private FactoryFinder factoryFinder; public DefaultVariableRepositoryFactory(CamelContext camelContext) { this.camelContext = camelContext; @@ -46,13 +51,28 @@ public class DefaultVariableRepositoryFactory extends ServiceSupport implements return global; } - // otherwise lookup in registry if the repo exists VariableRepository repo = CamelContextHelper.lookup(camelContext, id, VariableRepository.class); - if (repo != null) { - return repo; + if (repo == null) { + // try via factory finder + Class<?> clazz = factoryFinder.findClass(id).orElse(null); + if (clazz != null && VariableRepository.class.isAssignableFrom(clazz)) { + repo = (VariableRepository) camelContext.getInjector().newInstance(clazz, true); + camelContext.getRegistry().bind(id, repo); + try { + camelContext.addService(repo); + } catch (Exception e) { + throw RuntimeCamelException.wrapRuntimeException(e); + } + } } - return null; + return repo; + } + + @Override + protected void doBuild() throws Exception { + super.doBuild(); + this.factoryFinder = camelContext.getCamelContextExtension().getBootstrapFactoryFinder(RESOURCE_PATH); } @Override