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 7c8eaa861273 CAMEL-23102: camel-jbang - Automatic keep up to date list
of Camel FactoryFinder as known dependencies
7c8eaa861273 is described below
commit 7c8eaa861273a1f02bf2bf126f696b1e6188ede7
Author: Claus Ibsen <[email protected]>
AuthorDate: Sat Feb 28 11:20:31 2026 +0100
CAMEL-23102: camel-jbang - Automatic keep up to date list of Camel
FactoryFinder as known dependencies
---
.../camel/impl/engine/AbstractCamelContext.java | 7 ++-
.../impl/engine/DefaultTransformerResolver.java | 7 +--
.../impl/engine/DefaultUriFactoryResolver.java | 1 +
.../engine/DefaultVariableRepositoryFactory.java | 4 +-
.../camel/impl/engine/SimpleCamelContext.java | 60 ++++++----------------
.../simple/ast/SimpleFunctionExpression.java | 12 ++---
.../camel/builder/AdviceWithRouteBuilder.java | 11 ++--
.../cloud/ServiceCallDefinitionConstants.java | 1 +
.../org/apache/camel/reifier/ResumableReifier.java | 24 ++-------
.../camel/reifier/tokenizer/TokenizerReifier.java | 18 ++-----
.../org/apache/camel/main/BaseMainSupport.java | 60 +++++++++-------------
.../camel/support/HeaderSelectorProducer.java | 32 ++++++------
.../java/org/apache/camel/support/OAuthHelper.java | 2 +-
.../org/apache/camel/support/ResolverHelper.java | 31 +++++++++++
.../apache/camel/support/resume/AdapterHelper.java | 18 ++-----
.../DependencyDownloadFactoryFinderResolver.java | 3 +-
16 files changed, 118 insertions(+), 173 deletions(-)
diff --git
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index e0c5a77a35c9..ae841d7c872e 100644
---
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -2343,8 +2343,8 @@ public abstract class AbstractCamelContext extends
BaseService
StartupStepRecorder startupStepRecorder =
camelContextExtension.getStartupStepRecorder();
// NOTE: only check the specific class, not any subclass
if (startupStepRecorder.getClass() ==
DefaultStartupStepRecorder.class) { // NOSONAR
- StartupStepRecorder fr =
camelContextExtension.getBootstrapFactoryFinder()
- .newInstance(StartupStepRecorder.FACTORY,
StartupStepRecorder.class).orElse(null);
+ StartupStepRecorder fr
+ = ResolverHelper.resolveService(this,
StartupStepRecorder.FACTORY, StartupStepRecorder.class).orElse(null);
if (fr != null) {
LOG.debug("Discovered startup recorder: {} from classpath",
fr);
camelContextExtension.setStartupStepRecorder(fr);
@@ -2528,8 +2528,7 @@ public abstract class AbstractCamelContext extends
BaseService
boolean debuggerDetected = false;
if (getDebugger() == null && hasService(BacklogDebugger.class) ==
null) {
// detect if camel-debug is on classpath that enables debugging
- DebuggerFactory df =
getCamelContextExtension().getBootstrapFactoryFinder()
- .newInstance(Debugger.FACTORY,
DebuggerFactory.class).orElse(null);
+ DebuggerFactory df = ResolverHelper.resolveService(this,
Debugger.FACTORY, DebuggerFactory.class).orElse(null);
if (df != null) {
debuggerDetected = true;
LOG.info("Detected: {} JAR (Enabling Camel Debugging)", df);
diff --git
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultTransformerResolver.java
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultTransformerResolver.java
index 4d55b6a635bd..a458b5c8d7b7 100644
---
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultTransformerResolver.java
+++
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultTransformerResolver.java
@@ -21,9 +21,11 @@ import java.util.Optional;
import org.apache.camel.CamelContext;
import org.apache.camel.CamelContextAware;
+import org.apache.camel.spi.FactoryFinder;
import org.apache.camel.spi.Transformer;
import org.apache.camel.spi.TransformerKey;
import org.apache.camel.spi.TransformerResolver;
+import org.apache.camel.support.ResolverHelper;
import org.apache.camel.util.ObjectHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -59,8 +61,7 @@ public class DefaultTransformerResolver implements
TransformerResolver<Transform
}
private Optional<Transformer> findTransformer(String key, CamelContext
context) {
- return context.getCamelContextExtension()
- .getBootstrapFactoryFinder(DATA_TYPE_TRANSFORMER_RESOURCE_PATH)
- .newInstance(key, Transformer.class);
+ FactoryFinder ff =
context.getCamelContextExtension().getBootstrapFactoryFinder(DATA_TYPE_TRANSFORMER_RESOURCE_PATH);
+ return ResolverHelper.resolveService(context, ff, key,
Transformer.class);
}
}
diff --git
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUriFactoryResolver.java
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUriFactoryResolver.java
index 404a38088107..77d01b282cae 100644
---
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUriFactoryResolver.java
+++
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUriFactoryResolver.java
@@ -32,6 +32,7 @@ import org.slf4j.LoggerFactory;
* <b>META-INF/services/org/apache/camel/urifactory/</b>.
*/
public class DefaultUriFactoryResolver implements CamelContextAware,
UriFactoryResolver {
+
public static final String RESOURCE_PATH =
"META-INF/services/org/apache/camel/urifactory/";
private static final Logger LOG =
LoggerFactory.getLogger(DefaultUriFactoryResolver.class);
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 c0b373a67aa7..8d834c145edb 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
@@ -38,10 +38,10 @@ import org.slf4j.LoggerFactory;
*/
public class DefaultVariableRepositoryFactory extends ServiceSupport
implements VariableRepositoryFactory, StaticService {
- private static final Logger LOG =
LoggerFactory.getLogger(DefaultVariableRepositoryFactory.class);
-
public static final String RESOURCE_PATH =
"META-INF/services/org/apache/camel/variable-repository/";
+ private static final Logger LOG =
LoggerFactory.getLogger(DefaultVariableRepositoryFactory.class);
+
private final CamelContext camelContext;
private VariableRepository global;
private VariableRepository route;
diff --git
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
index 74f27ad17234..03af8dd61b8d 100644
---
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
+++
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
@@ -247,9 +247,7 @@ public class SimpleCamelContext extends
AbstractCamelContext {
@Override
protected ModelJAXBContextFactory createModelJAXBContextFactory() {
- return ResolverHelper.resolveMandatoryService(
- getCamelContextReference(),
- getCamelContextExtension().getBootstrapFactoryFinder(),
+ return
ResolverHelper.resolveMandatoryBootstrapService(getCamelContextReference(),
ModelJAXBContextFactory.FACTORY,
ModelJAXBContextFactory.class,
"camel-xml-jaxb");
@@ -297,18 +295,14 @@ public class SimpleCamelContext extends
AbstractCamelContext {
@Override
protected ProcessorFactory createProcessorFactory() {
- return ResolverHelper.resolveMandatoryService(
- getCamelContextReference(),
- getCamelContextExtension().getBootstrapFactoryFinder(),
+ return
ResolverHelper.resolveMandatoryBootstrapService(getCamelContextReference(),
ProcessorFactory.FACTORY,
ProcessorFactory.class, "camel-core-processor");
}
@Override
protected InternalProcessorFactory createInternalProcessorFactory() {
- return ResolverHelper.resolveMandatoryService(
- getCamelContextReference(),
- getCamelContextExtension().getBootstrapFactoryFinder(),
+ return
ResolverHelper.resolveMandatoryBootstrapService(getCamelContextReference(),
InternalProcessorFactory.FACTORY,
InternalProcessorFactory.class,
"camel-core-processor");
@@ -390,9 +384,7 @@ public class SimpleCamelContext extends
AbstractCamelContext {
@Override
protected RuntimeCamelCatalog createRuntimeCamelCatalog() {
- return ResolverHelper.resolveMandatoryService(
- getCamelContextReference(),
- getCamelContextExtension().getBootstrapFactoryFinder(),
+ return
ResolverHelper.resolveMandatoryBootstrapService(getCamelContextReference(),
RuntimeCamelCatalog.FACTORY,
RuntimeCamelCatalog.class,
"camel-core-catalog");
@@ -417,9 +409,7 @@ public class SimpleCamelContext extends
AbstractCamelContext {
}
// lookup default factory
- return ResolverHelper.resolveMandatoryService(
- getCamelContextReference(),
- getCamelContextExtension().getBootstrapFactoryFinder(),
+ return
ResolverHelper.resolveMandatoryBootstrapService(getCamelContextReference(),
"default-" + DumpRoutesStrategy.FACTORY,
DumpRoutesStrategy.class,
"camel-core-engine");
@@ -480,9 +470,7 @@ public class SimpleCamelContext extends
AbstractCamelContext {
@Override
protected BeanProxyFactory createBeanProxyFactory() {
- return ResolverHelper.resolveMandatoryService(
- getCamelContextReference(),
- getCamelContextExtension().getBootstrapFactoryFinder(),
+ return
ResolverHelper.resolveMandatoryBootstrapService(getCamelContextReference(),
BeanProxyFactory.FACTORY,
BeanProxyFactory.class,
"camel-bean");
@@ -490,9 +478,7 @@ public class SimpleCamelContext extends
AbstractCamelContext {
@Override
protected AnnotationBasedProcessorFactory
createAnnotationBasedProcessorFactory() {
- return ResolverHelper.resolveMandatoryService(
- getCamelContextReference(),
- getCamelContextExtension().getBootstrapFactoryFinder(),
+ return
ResolverHelper.resolveMandatoryBootstrapService(getCamelContextReference(),
AnnotationBasedProcessorFactory.FACTORY,
AnnotationBasedProcessorFactory.class,
"camel-core-processor");
@@ -500,9 +486,7 @@ public class SimpleCamelContext extends
AbstractCamelContext {
@Override
protected DeferServiceFactory createDeferServiceFactory() {
- return ResolverHelper.resolveMandatoryService(
- getCamelContextReference(),
- getCamelContextExtension().getBootstrapFactoryFinder(),
+ return
ResolverHelper.resolveMandatoryBootstrapService(getCamelContextReference(),
DeferServiceFactory.FACTORY,
DeferServiceFactory.class,
"camel-core-processor");
@@ -510,9 +494,7 @@ public class SimpleCamelContext extends
AbstractCamelContext {
@Override
protected BeanProcessorFactory createBeanProcessorFactory() {
- return ResolverHelper.resolveMandatoryService(
- getCamelContextReference(),
- getCamelContextExtension().getBootstrapFactoryFinder(),
+ return
ResolverHelper.resolveMandatoryBootstrapService(getCamelContextReference(),
BeanProcessorFactory.FACTORY,
BeanProcessorFactory.class,
"camel-bean");
@@ -547,9 +529,7 @@ public class SimpleCamelContext extends
AbstractCamelContext {
@Override
protected ModelToXMLDumper createModelToXMLDumper() {
- return ResolverHelper.resolveMandatoryService(
- getCamelContextReference(),
- getCamelContextExtension().getBootstrapFactoryFinder(),
+ return
ResolverHelper.resolveMandatoryBootstrapService(getCamelContextReference(),
ModelToXMLDumper.FACTORY,
ModelToXMLDumper.class,
"camel-xml-io");
@@ -557,9 +537,7 @@ public class SimpleCamelContext extends
AbstractCamelContext {
@Override
protected ModelToYAMLDumper createModelToYAMLDumper() {
- return ResolverHelper.resolveMandatoryService(
- getCamelContextReference(),
- getCamelContextExtension().getBootstrapFactoryFinder(),
+ return
ResolverHelper.resolveMandatoryBootstrapService(getCamelContextReference(),
ModelToYAMLDumper.FACTORY,
ModelToYAMLDumper.class,
"camel-yaml-io");
@@ -567,9 +545,7 @@ public class SimpleCamelContext extends
AbstractCamelContext {
@Override
protected ModelToStructureDumper createModelToStructureDumper() {
- return ResolverHelper.resolveMandatoryService(
- getCamelContextReference(),
- getCamelContextExtension().getBootstrapFactoryFinder(),
+ return
ResolverHelper.resolveMandatoryBootstrapService(getCamelContextReference(),
ModelToStructureDumper.FACTORY,
ModelToStructureDumper.class,
"camel-core-engine");
@@ -577,9 +553,7 @@ public class SimpleCamelContext extends
AbstractCamelContext {
@Override
protected RestBindingJaxbDataFormatFactory
createRestBindingJaxbDataFormatFactory() {
- return ResolverHelper.resolveMandatoryService(
- getCamelContextReference(),
- getCamelContextExtension().getBootstrapFactoryFinder(),
+ return
ResolverHelper.resolveMandatoryBootstrapService(getCamelContextReference(),
RestBindingJaxbDataFormatFactory.FACTORY,
RestBindingJaxbDataFormatFactory.class,
"camel-jaxb");
@@ -587,9 +561,7 @@ public class SimpleCamelContext extends
AbstractCamelContext {
@Override
protected RestBindingJacksonXmlDataFormatFactory
createRestBindingJacksonXmlDataFormatFactory() {
- return ResolverHelper.resolveMandatoryService(
- getCamelContextReference(),
- getCamelContextExtension().getBootstrapFactoryFinder(),
+ return
ResolverHelper.resolveMandatoryBootstrapService(getCamelContextReference(),
RestBindingJacksonXmlDataFormatFactory.FACTORY,
RestBindingJacksonXmlDataFormatFactory.class,
"camel-jacksonxml");
@@ -633,9 +605,7 @@ public class SimpleCamelContext extends
AbstractCamelContext {
@Override
protected RestRegistryFactory createRestRegistryFactory() {
- return ResolverHelper.resolveMandatoryService(
- getCamelContextReference(),
- getCamelContextExtension().getBootstrapFactoryFinder(),
+ return
ResolverHelper.resolveMandatoryBootstrapService(getCamelContextReference(),
RestRegistryFactory.FACTORY,
RestRegistryFactory.class,
"camel-rest");
diff --git
a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
index 6731f16e5b79..b906b2fe758f 100644
---
a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
+++
b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
@@ -393,9 +393,8 @@ public class SimpleFunctionExpression extends
LiteralExpression {
}
private Expression createSimpleAttachments(CamelContext camelContext,
String function) {
- SimpleLanguageFunctionFactory factory =
ResolverHelper.resolveMandatoryService(
+ SimpleLanguageFunctionFactory factory =
ResolverHelper.resolveMandatoryBootstrapService(
camelContext,
-
camelContext.getCamelContextExtension().getBootstrapFactoryFinder(),
SimpleLanguageFunctionFactory.FACTORY + "/camel-attachments",
SimpleLanguageFunctionFactory.class,
"camel-attachments");
@@ -403,9 +402,8 @@ public class SimpleFunctionExpression extends
LiteralExpression {
}
private Expression createSimpleBase64(CamelContext camelContext, String
function) {
- SimpleLanguageFunctionFactory factory =
ResolverHelper.resolveMandatoryService(
+ SimpleLanguageFunctionFactory factory =
ResolverHelper.resolveMandatoryBootstrapService(
camelContext,
-
camelContext.getCamelContextExtension().getBootstrapFactoryFinder(),
SimpleLanguageFunctionFactory.FACTORY + "/camel-base64",
SimpleLanguageFunctionFactory.class,
"camel-base64");
@@ -2585,9 +2583,8 @@ public class SimpleFunctionExpression extends
LiteralExpression {
}
private String createCodeAttachments(CamelContext camelContext, String
function) {
- SimpleLanguageFunctionFactory factory =
ResolverHelper.resolveMandatoryService(
+ SimpleLanguageFunctionFactory factory =
ResolverHelper.resolveMandatoryBootstrapService(
camelContext,
-
camelContext.getCamelContextExtension().getBootstrapFactoryFinder(),
SimpleLanguageFunctionFactory.FACTORY + "/camel-attachments",
SimpleLanguageFunctionFactory.class,
"camel-attachments");
@@ -2595,9 +2592,8 @@ public class SimpleFunctionExpression extends
LiteralExpression {
}
private String createCodeBase64(CamelContext camelContext, String
function) {
- SimpleLanguageFunctionFactory factory =
ResolverHelper.resolveMandatoryService(
+ SimpleLanguageFunctionFactory factory =
ResolverHelper.resolveMandatoryBootstrapService(
camelContext,
-
camelContext.getCamelContextExtension().getBootstrapFactoryFinder(),
SimpleLanguageFunctionFactory.FACTORY + "/camel-base64",
SimpleLanguageFunctionFactory.class,
"camel-base64");
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/builder/AdviceWithRouteBuilder.java
b/core/camel-core-model/src/main/java/org/apache/camel/builder/AdviceWithRouteBuilder.java
index 5da29274d166..62c3f405c716 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/builder/AdviceWithRouteBuilder.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/builder/AdviceWithRouteBuilder.java
@@ -27,10 +27,9 @@ import org.apache.camel.spi.EndpointStrategy;
import org.apache.camel.spi.MockSendToEndpointStrategyFactory;
import org.apache.camel.support.EndpointHelper;
import org.apache.camel.support.PatternHelper;
+import org.apache.camel.support.ResolverHelper;
import org.apache.camel.util.ObjectHelper;
-import static org.apache.camel.spi.FactoryFinder.DEFAULT_PATH;
-
/**
* A {@link RouteBuilder} which has extended capabilities when using the
* <a href="http://camel.apache.org/advicewith.html">advice with</a> feature.
@@ -249,12 +248,8 @@ public abstract class AdviceWithRouteBuilder extends
RouteBuilder {
CamelContext camelContext, String pattern, boolean skip) {
// the text based input may be property placeholders
pattern = camelContext.resolvePropertyPlaceholders(pattern);
- MockSendToEndpointStrategyFactory factory =
camelContext.getCamelContextExtension()
- .getFactoryFinder(DEFAULT_PATH)
- .newInstance(MockSendToEndpointStrategyFactory.FACTORY,
MockSendToEndpointStrategyFactory.class)
- .orElseThrow(() -> new IllegalArgumentException(
- "Cannot find MockSendToEndpointStrategyFactory on
classpath. "
- + "Add
camel-mock to classpath."));
+ MockSendToEndpointStrategyFactory factory =
ResolverHelper.resolveMandatoryBootstrapService(camelContext,
+ MockSendToEndpointStrategyFactory.FACTORY,
MockSendToEndpointStrategyFactory.class, "camel-mock");
return factory.mock(pattern, skip);
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/cloud/ServiceCallDefinitionConstants.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/cloud/ServiceCallDefinitionConstants.java
index 6d78364e311c..5dc4e5bd91eb 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/cloud/ServiceCallDefinitionConstants.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/cloud/ServiceCallDefinitionConstants.java
@@ -18,6 +18,7 @@ package org.apache.camel.model.cloud;
@Deprecated(since = "3.19.0")
public final class ServiceCallDefinitionConstants {
+
public static final String RESOURCE_PATH =
"META-INF/services/org/apache/camel/cloud/";
public static final String DEFAULT_COMPONENT = "http";
public static final String DEFAULT_SERVICE_CALL_CONFIG_ID =
"service-call-configuration";
diff --git
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ResumableReifier.java
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ResumableReifier.java
index 84917c236654..59329b160b37 100644
---
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ResumableReifier.java
+++
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ResumableReifier.java
@@ -16,19 +16,16 @@
*/
package org.apache.camel.reifier;
-import java.util.Optional;
-
import org.apache.camel.CamelContextAware;
import org.apache.camel.LoggingLevel;
import org.apache.camel.Processor;
import org.apache.camel.Route;
-import org.apache.camel.RuntimeCamelException;
import org.apache.camel.model.ProcessorDefinition;
import org.apache.camel.model.ResumableDefinition;
import org.apache.camel.processor.resume.ResumableProcessor;
import org.apache.camel.resume.ResumeStrategy;
import org.apache.camel.resume.ResumeStrategyConfiguration;
-import org.apache.camel.spi.FactoryFinder;
+import org.apache.camel.support.ResolverHelper;
import org.apache.camel.util.ObjectHelper;
public class ResumableReifier extends ProcessorReifier<ResumableDefinition> {
@@ -64,21 +61,10 @@ public class ResumableReifier extends
ProcessorReifier<ResumableDefinition> {
if (ref != null) {
strategy = mandatoryLookup(ref, ResumeStrategy.class);
} else {
- final FactoryFinder factoryFinder
- =
camelContext.getCamelContextExtension().getFactoryFinder(FactoryFinder.DEFAULT_PATH);
-
- final ResumeStrategyConfiguration resumeStrategyConfiguration
= definition.getResumeStrategyConfiguration();
- Optional<ResumeStrategy> resumeStrategyOptional =
factoryFinder.newInstance(
- resumeStrategyConfiguration.resumeStrategyService(),
ResumeStrategy.class);
-
- if (resumeStrategyOptional.isEmpty()) {
- throw new RuntimeCamelException("Cannot find a resume
strategy class in the classpath or the registry");
- }
-
- final ResumeStrategy resumeStrategy =
resumeStrategyOptional.get();
-
-
resumeStrategy.setResumeStrategyConfiguration(resumeStrategyConfiguration);
-
+ ResumeStrategyConfiguration config =
definition.getResumeStrategyConfiguration();
+ ResumeStrategy resumeStrategy =
ResolverHelper.resolveMandatoryBootstrapService(camelContext,
+ config.resumeStrategyService(), ResumeStrategy.class,
null);
+ resumeStrategy.setResumeStrategyConfiguration(config);
return resumeStrategy;
}
}
diff --git
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/tokenizer/TokenizerReifier.java
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/tokenizer/TokenizerReifier.java
index 43173dbbb504..099f63d36bf5 100644
---
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/tokenizer/TokenizerReifier.java
+++
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/tokenizer/TokenizerReifier.java
@@ -17,11 +17,8 @@
package org.apache.camel.reifier.tokenizer;
-import java.util.Optional;
-
import org.apache.camel.Processor;
import org.apache.camel.Route;
-import org.apache.camel.RuntimeCamelException;
import org.apache.camel.model.TokenizerDefinition;
import org.apache.camel.model.TokenizerImplementationDefinition;
import org.apache.camel.model.tokenizer.LangChain4jTokenizerDefinition;
@@ -29,6 +26,7 @@ import org.apache.camel.processor.TokenizerProcessor;
import org.apache.camel.reifier.ProcessorReifier;
import org.apache.camel.spi.FactoryFinder;
import org.apache.camel.spi.Tokenizer;
+import org.apache.camel.support.ResolverHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -44,18 +42,8 @@ public class TokenizerReifier<T extends TokenizerDefinition>
extends ProcessorRe
public Processor createProcessor() throws Exception {
Processor childProcessor = createChildProcessor(false);
- final FactoryFinder factoryFinder
- =
camelContext.getCamelContextExtension().getFactoryFinder(TOKENIZER_PATH);
-
- final Optional<Tokenizer> tokenize = factoryFinder.newInstance(
- definition.tokenizerName(), Tokenizer.class);
-
- if (tokenize.isEmpty()) {
- throw new RuntimeCamelException(
- "Cannot find a tokenizer named: " +
definition.tokenizerName() + " in the classpath");
- }
-
- final Tokenizer tokenizer = tokenize.get();
+ Tokenizer tokenizer =
ResolverHelper.resolveMandatoryBootstrapService(camelContext,
+ TOKENIZER_PATH + definition.tokenizerName(), Tokenizer.class,
definition.tokenizerName());
LOG.info("Creating a tokenizer of type {}",
tokenizer.getClass().getName());
configure(tokenizer);
diff --git
a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
index c862d13cbd1f..9224f4c2cd40 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
@@ -90,6 +90,7 @@ import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.LifecycleStrategySupport;
import org.apache.camel.support.PluginHelper;
import org.apache.camel.support.PropertyBindingSupport;
+import org.apache.camel.support.ResolverHelper;
import org.apache.camel.support.ResourceHelper;
import org.apache.camel.support.SimpleEventNotifierSupport;
import org.apache.camel.support.jsse.CipherSuitesParameters;
@@ -717,8 +718,8 @@ public abstract class BaseMainSupport extends BaseService {
|| mainConfigurationProperties.getStartupRecorder() == null) {
// try to auto discover camel-jfr to use
try {
- StartupStepRecorder fr = ecc.getBootstrapFactoryFinder()
- .newInstance(StartupStepRecorder.FACTORY,
StartupStepRecorder.class).orElse(null);
+ StartupStepRecorder fr =
ResolverHelper.resolveService(camelContext, ecc.getBootstrapFactoryFinder(),
+ StartupStepRecorder.FACTORY,
StartupStepRecorder.class).orElse(null);
if (fr != null) {
LOG.debug("Discovered startup recorder: {} from
classpath", fr);
fr.setRecording(mainConfigurationProperties.isStartupRecorderRecording());
@@ -996,8 +997,8 @@ public abstract class BaseMainSupport extends BaseService {
}
protected void detectCamelDebugJar(CamelContext camelContext) {
- DebuggerFactory df =
camelContext.getCamelContextExtension().getBootstrapFactoryFinder()
- .newInstance(Debugger.FACTORY,
DebuggerFactory.class).orElse(null);
+ DebuggerFactory df
+ = ResolverHelper.resolveBootstrapService(camelContext,
Debugger.FACTORY, DebuggerFactory.class).orElse(null);
if (df != null) {
// if camel-debug is on classpath then we need to eager to turn on
source location which is needed for Java DSL
camelContext.setSourceLocationEnabled(true);
@@ -1006,8 +1007,8 @@ public abstract class BaseMainSupport extends BaseService
{
protected void detectResilience4jMicrometer(CamelContext camelContext)
throws Exception {
// optional discover camel-resilience4j-micrometer
- Resilience4jMicrometerFactory mf =
camelContext.getCamelContextExtension().getBootstrapFactoryFinder()
- .newInstance(Resilience4jMicrometerFactory.FACTORY,
Resilience4jMicrometerFactory.class).orElse(null);
+ Resilience4jMicrometerFactory mf =
ResolverHelper.resolveBootstrapService(camelContext,
+ Resilience4jMicrometerFactory.FACTORY,
Resilience4jMicrometerFactory.class).orElse(null);
if (mf == null) {
ModelCamelContext model = (ModelCamelContext) camelContext;
Resilience4jConfigurationDefinition config =
model.getResilience4jConfiguration(null);
@@ -1016,8 +1017,9 @@ public abstract class BaseMainSupport extends BaseService
{
boolean micrometer = config != null &&
config.getMicrometerEnabled() != null
&& CamelContextHelper.parseBoolean(camelContext,
config.getMicrometerEnabled());
if (micrometer) {
- throw new IllegalArgumentException(
- "Cannot find Resilience4jMicrometerFactory on
classpath. Add camel-resilience4j-micrometer to classpath.");
+ // okay micrometer is explicit enabled then resolve mandatory
+ mf =
ResolverHelper.resolveMandatoryBootstrapService(camelContext,
Resilience4jMicrometerFactory.FACTORY,
+ Resilience4jMicrometerFactory.class,
"camel-resilience4j-micrometer");
}
}
if (mf != null) {
@@ -2757,10 +2759,8 @@ public abstract class BaseMainSupport extends
BaseService {
answer =
camelContext.getRegistry().findSingleByType(CamelSagaService.class);
}
if (answer == null) {
- answer =
camelContext.getCamelContextExtension().getBootstrapFactoryFinder()
- .newInstance("lra-saga-service", CamelSagaService.class)
- .orElseThrow(() -> new IllegalArgumentException(
- "Cannot find LRASagaService on classpath. Add
camel-lra to classpath."));
+ answer =
ResolverHelper.resolveMandatoryBootstrapService(camelContext,
"lra-saga-service", CamelSagaService.class,
+ "camel-lra");
}
return answer;
}
@@ -2771,10 +2771,8 @@ public abstract class BaseMainSupport extends
BaseService {
answer =
camelContext.getRegistry().findSingleByType(CamelTracingService.class);
}
if (answer == null) {
- answer =
camelContext.getCamelContextExtension().getBootstrapFactoryFinder()
- .newInstance("opentelemetry-tracer",
CamelTracingService.class)
- .orElseThrow(() -> new IllegalArgumentException(
- "Cannot find OpenTelemetryTracer on classpath. Add
camel-opentelemetry to classpath."));
+ answer =
ResolverHelper.resolveMandatoryBootstrapService(camelContext,
"opentelemetry-tracer",
+ CamelTracingService.class, "camel-opentelemetry");
}
return answer;
}
@@ -2785,10 +2783,8 @@ public abstract class BaseMainSupport extends
BaseService {
answer =
camelContext.getRegistry().findSingleByType(CamelTracingService.class);
}
if (answer == null) {
- answer =
camelContext.getCamelContextExtension().getBootstrapFactoryFinder()
- .newInstance("opentelemetry-tracer-2",
CamelTracingService.class)
- .orElseThrow(() -> new IllegalArgumentException(
- "Cannot find OpenTelemetryTracer2 on classpath.
Add camel-opentelemetry2 to classpath."));
+ answer =
ResolverHelper.resolveMandatoryBootstrapService(camelContext,
"opentelemetry-tracer-2",
+ CamelTracingService.class, "camel-opentelemetry2");
}
return answer;
}
@@ -2799,10 +2795,8 @@ public abstract class BaseMainSupport extends
BaseService {
answer =
camelContext.getRegistry().findSingleByType(CamelTracingService.class);
}
if (answer == null) {
- answer =
camelContext.getCamelContextExtension().getBootstrapFactoryFinder()
- .newInstance("telemetry-dev-tracer",
CamelTracingService.class)
- .orElseThrow(() -> new IllegalArgumentException(
- "Cannot find TelemetryDevTracer on classpath. Add
camel-telemetry-dev to classpath."));
+ answer =
ResolverHelper.resolveMandatoryBootstrapService(camelContext,
"telemetry-dev-tracer",
+ CamelTracingService.class, "camel-telemetry-dev");
}
return answer;
}
@@ -2813,10 +2807,8 @@ public abstract class BaseMainSupport extends
BaseService {
answer =
camelContext.getRegistry().findSingleByType(CamelMetricsService.class);
}
if (answer == null) {
- answer =
camelContext.getCamelContextExtension().getBootstrapFactoryFinder()
- .newInstance("micrometer-prometheus",
CamelMetricsService.class)
- .orElseThrow(() -> new IllegalArgumentException(
- "Cannot find CamelMetricsService on classpath. Add
camel-micrometer-prometheus to classpath."));
+ answer =
ResolverHelper.resolveMandatoryBootstrapService(camelContext,
"micrometer-prometheus",
+ CamelMetricsService.class, "camel-micrometer-prometheus");
}
return answer;
}
@@ -2827,10 +2819,8 @@ public abstract class BaseMainSupport extends
BaseService {
answer =
camelContext.getRegistry().findSingleByType(CamelMDCService.class);
}
if (answer == null) {
- answer =
camelContext.getCamelContextExtension().getBootstrapFactoryFinder()
- .newInstance("mdc-service", CamelMDCService.class)
- .orElseThrow(() -> new IllegalArgumentException(
- "Cannot find CamelMDCService on classpath. Add
camel-mdc to classpath."));
+ answer =
ResolverHelper.resolveMandatoryBootstrapService(camelContext, "mdc-service",
CamelMDCService.class,
+ "camel-mdc");
}
return answer;
}
@@ -2839,10 +2829,8 @@ public abstract class BaseMainSupport extends
BaseService {
// lookup in service registry first
MainHttpServerFactory answer =
camelContext.getRegistry().findSingleByType(MainHttpServerFactory.class);
if (answer == null) {
- answer =
camelContext.getCamelContextExtension().getBootstrapFactoryFinder()
- .newInstance(MainConstants.PLATFORM_HTTP_SERVER,
MainHttpServerFactory.class)
- .orElseThrow(() -> new IllegalArgumentException(
- "Cannot find MainHttpServerFactory on classpath.
Add camel-platform-http-main to classpath."));
+ answer =
ResolverHelper.resolveMandatoryBootstrapService(camelContext,
MainConstants.PLATFORM_HTTP_SERVER,
+ MainHttpServerFactory.class, "camel-platform-http-main");
}
return CamelContextAware.trySetCamelContext(answer, camelContext);
}
diff --git
a/core/camel-support/src/main/java/org/apache/camel/support/HeaderSelectorProducer.java
b/core/camel-support/src/main/java/org/apache/camel/support/HeaderSelectorProducer.java
index 4c108f3e66ff..6ac0edcd79d2 100644
---
a/core/camel-support/src/main/java/org/apache/camel/support/HeaderSelectorProducer.java
+++
b/core/camel-support/src/main/java/org/apache/camel/support/HeaderSelectorProducer.java
@@ -24,6 +24,8 @@ import org.apache.camel.CamelContextAware;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.NoSuchHeaderException;
+import org.apache.camel.NoSuchServiceException;
+import org.apache.camel.spi.FactoryFinder;
import org.apache.camel.spi.InvokeOnHeaderStrategy;
import org.apache.camel.util.ObjectHelper;
import org.slf4j.Logger;
@@ -39,8 +41,9 @@ public abstract class HeaderSelectorProducer extends
DefaultAsyncProducer implem
public static final String RESOURCE_PATH =
"META-INF/services/org/apache/camel/invoke-on-header/";
- private static final Logger LOGGER =
LoggerFactory.getLogger(HeaderSelectorProducer.class);
+ private static final Logger LOG =
LoggerFactory.getLogger(HeaderSelectorProducer.class);
+ private FactoryFinder factoryFinder;
private final Supplier<String> headerSupplier;
private final Supplier<String> defaultHeaderValueSupplier;
private final Object target;
@@ -104,11 +107,13 @@ public abstract class HeaderSelectorProducer extends
DefaultAsyncProducer implem
protected void doBuild() throws Exception {
super.doBuild();
+ if (factoryFinder == null) {
+ factoryFinder =
camelContext.getCamelContextExtension().getFactoryFinder(RESOURCE_PATH);
+ }
+
String key = this.getClass().getName();
- String fqn = RESOURCE_PATH + key;
- strategy =
camelContext.getCamelContextExtension().getBootstrapFactoryFinder(RESOURCE_PATH)
- .newInstance(key, InvokeOnHeaderStrategy.class)
- .orElseThrow(() -> new IllegalArgumentException("Cannot find "
+ fqn + " in classpath."));
+ strategy = factoryFinder.newInstance(key, InvokeOnHeaderStrategy.class)
+ .orElseThrow(() -> new NoSuchServiceException(key, null));
Class<?> sclazz = this.getClass().getSuperclass();
// NOTE: check specific classes only, not possible subclasses
@@ -117,10 +122,7 @@ public abstract class HeaderSelectorProducer extends
DefaultAsyncProducer implem
&& sclazz != HeaderSelectorProducer.class) {
// some components may have a common base class they extend from
(such as camel-infinispan)
// so try to discover that (optional so return null if not present)
- String key2 = this.getClass().getSuperclass().getName();
- parentStrategy =
camelContext.getCamelContextExtension().getBootstrapFactoryFinder(RESOURCE_PATH)
- .newInstance(key2, InvokeOnHeaderStrategy.class)
- .orElse(null);
+ parentStrategy = factoryFinder.newInstance(sclazz.getName(),
InvokeOnHeaderStrategy.class).orElse(null);
}
}
@@ -138,28 +140,28 @@ public abstract class HeaderSelectorProducer extends
DefaultAsyncProducer implem
throw new NoSuchHeaderException(exchange, header,
String.class);
}
- LOGGER.debug("Invoking @InvokeOnHeader method: {}", action);
+ LOG.debug("Invoking @InvokeOnHeader method: {}", action);
Object answer = strategy.invoke(target, action, exchange,
callback);
if (answer == null && parentStrategy != null) {
answer = parentStrategy.invoke(target, action, exchange,
callback);
}
if (answer == callback) {
- // okay it was an async invoked so we should return false
+ // okay it was an async-invoked so we should return false
sync = false;
answer = null;
}
if (sync) {
- LOGGER.trace("Invoked @InvokeOnHeader method: {} -> {}",
action, answer);
+ LOG.trace("Invoked @InvokeOnHeader method: {} -> {}", action,
answer);
processResult(exchange, answer);
} else {
- LOGGER.trace("Invoked @InvokeOnHeader method: {} is continuing
asynchronously", action);
+ LOG.trace("Invoked @InvokeOnHeader method: {} is continuing
asynchronously", action);
}
} catch (Exception e) {
exchange.setException(e);
}
if (sync) {
- // callback was not in use, so we must done it here
+ // callback was not in use, so we must call done here
callback.done(true);
}
return sync;
@@ -169,7 +171,7 @@ public abstract class HeaderSelectorProducer extends
DefaultAsyncProducer implem
* Process the result. Will by default set the result as the message body.
*
* @param exchange the exchange
- * @param result the result (may be null)
+ * @param result the result (can be null)
*/
protected void processResult(Exchange exchange, Object result) {
if (result != null) {
diff --git
a/core/camel-support/src/main/java/org/apache/camel/support/OAuthHelper.java
b/core/camel-support/src/main/java/org/apache/camel/support/OAuthHelper.java
index 912c868d91d3..784c271130ed 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/OAuthHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/OAuthHelper.java
@@ -40,7 +40,7 @@ public final class OAuthHelper {
* @throws Exception if the factory is not found or token acquisition
fails
*/
public static String resolveOAuthToken(CamelContext context, String
profileName) throws Exception {
- OAuthClientAuthenticationFactory factory =
ResolverHelper.resolveMandatoryService(
+ OAuthClientAuthenticationFactory factory =
ResolverHelper.resolveMandatoryBootstrapService(
context,
OAuthClientAuthenticationFactory.FACTORY,
OAuthClientAuthenticationFactory.class,
diff --git
a/core/camel-support/src/main/java/org/apache/camel/support/ResolverHelper.java
b/core/camel-support/src/main/java/org/apache/camel/support/ResolverHelper.java
index f39fa11880c2..1695cd6dc7cf 100644
---
a/core/camel-support/src/main/java/org/apache/camel/support/ResolverHelper.java
+++
b/core/camel-support/src/main/java/org/apache/camel/support/ResolverHelper.java
@@ -166,6 +166,23 @@ public final class ResolverHelper {
factoryKey, factoryClass, jarName);
}
+ /**
+ * Create an instance of the given factory using the bootstrap factory
finder
+ *
+ * @param camelContext the {@link CamelContext}
+ * @param factoryKey the key used top lookup the factory class
+ * @param factoryClass the type of the class
+ * @param jarName the JAR to add to the classpath if
service is missing
+ * @return an instance of the given factory
+ * @throws NoSuchServiceException is thrown if service is not found
+ */
+ public static <T> T resolveMandatoryBootstrapService(
+ CamelContext camelContext, String factoryKey, Class<T>
factoryClass, String jarName)
+ throws NoSuchServiceException {
+ return resolveMandatoryService(camelContext,
camelContext.getCamelContextExtension().getBootstrapFactoryFinder(),
+ factoryKey, factoryClass, jarName);
+ }
+
/**
* Create an instance of the given factory using the default factory finder
*
@@ -186,6 +203,20 @@ public final class ResolverHelper {
factoryKey, factoryClass, false).orElseThrow(() -> new
NoSuchServiceException(factoryKey, jarName));
}
+ /**
+ * Create an instance of the given factory using the bootstrap factory
finder.
+ *
+ * @param camelContext the {@link CamelContext}
+ * @param factoryKey the key used top lookup the factory class
+ * @param factoryClass the type of the class
+ * @return an instance fo the given factory
+ */
+ public static <T> Optional<T> resolveBootstrapService(
+ CamelContext camelContext, String factoryKey, Class<T>
factoryClass) {
+ FactoryFinder ff =
camelContext.getCamelContextExtension().getBootstrapFactoryFinder();
+ return doResolveService(camelContext, ff, factoryKey, factoryClass,
true);
+ }
+
/**
* Create an instance of the given factory using the default factory finder
*
diff --git
a/core/camel-support/src/main/java/org/apache/camel/support/resume/AdapterHelper.java
b/core/camel-support/src/main/java/org/apache/camel/support/resume/AdapterHelper.java
index 3f9acbb160d5..9943c16e7667 100644
---
a/core/camel-support/src/main/java/org/apache/camel/support/resume/AdapterHelper.java
+++
b/core/camel-support/src/main/java/org/apache/camel/support/resume/AdapterHelper.java
@@ -17,8 +17,6 @@
package org.apache.camel.support.resume;
-import java.util.Optional;
-
import org.apache.camel.CamelContext;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.resume.Cacheable;
@@ -27,7 +25,7 @@ import org.apache.camel.resume.ResumeAware;
import org.apache.camel.resume.ResumeStrategy;
import org.apache.camel.resume.ResumeStrategyConfiguration;
import org.apache.camel.resume.cache.ResumeCache;
-import org.apache.camel.spi.FactoryFinder;
+import org.apache.camel.support.ResolverHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -45,18 +43,8 @@ public final class AdapterHelper {
assert resumeStrategy != null;
LOG.debug("Using the factory finder to search for the resume adapter");
- final FactoryFinder factoryFinder
- =
context.getCamelContextExtension().getFactoryFinder(FactoryFinder.DEFAULT_PATH);
-
- LOG.debug("Creating a new resume adapter");
- Optional<ResumeAdapter> adapterOptional
- =
factoryFinder.newInstance(resumeAware.adapterFactoryService(),
ResumeAdapter.class);
-
- if (adapterOptional.isEmpty()) {
- throw new RuntimeCamelException("Cannot find a resume adapter
class in the consumer classpath or in the registry");
- }
-
- final ResumeAdapter resumeAdapter = adapterOptional.get();
+ ResumeAdapter resumeAdapter =
ResolverHelper.resolveMandatoryBootstrapService(context,
+ resumeAware.adapterFactoryService(), ResumeAdapter.class,
null);
LOG.debug("Using the acquired resume adapter: {}",
resumeAdapter.getClass().getName());
if (resumeAdapter instanceof Cacheable cacheableAdapter) {
diff --git
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloadFactoryFinderResolver.java
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloadFactoryFinderResolver.java
index 0502df7225d3..1381d497d600 100644
---
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloadFactoryFinderResolver.java
+++
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloadFactoryFinderResolver.java
@@ -17,7 +17,6 @@
package org.apache.camel.main.download;
import org.apache.camel.CamelContext;
-import org.apache.camel.impl.engine.BootstrapFactoryFinder;
import org.apache.camel.spi.ClassResolver;
import org.apache.camel.spi.FactoryFinder;
import org.apache.camel.spi.FactoryFinderResolver;
@@ -34,7 +33,7 @@ public class DependencyDownloadFactoryFinderResolver
implements FactoryFinderRes
@Override
public FactoryFinder resolveBootstrapFactoryFinder(ClassResolver
classResolver, String resourcePath) {
- return new BootstrapFactoryFinder(classResolver, resourcePath);
+ return new DependencyDownloadFactoryFinder(camelContext,
classResolver, resourcePath, knownDeps);
}
@Override