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

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

commit c3abdaf4782132e9fefe11ea144a8d924e7c36ef
Author: Claus Ibsen <[email protected]>
AuthorDate: Sat Feb 28 13:48:50 2026 +0100

    CAMEL-23102: camel-jbang - Automatic keep up to date list of Camel 
FactoryFinder as known dependencies
---
 .../apache/camel/component/avro/AvroListener.java   | 10 +++-------
 .../org/apache/camel/component/cron/CronHelper.java |  9 ++++-----
 .../language/csimple/joor/JoorCSimpleCompiler.java  |  3 +--
 .../camel/component/knative/KnativeComponent.java   | 20 +++++++-------------
 .../apache/camel/openapi/RestOpenApiSupport.java    |  3 +--
 .../platform/http/PlatformHttpComponent.java        | 13 ++++---------
 .../reactive/streams/ReactiveStreamsHelper.java     | 21 ++++-----------------
 .../camel/component/rest/RestApiEndpoint.java       | 10 +++++-----
 .../apache/camel/component/rest/RestEndpoint.java   | 19 +++++--------------
 .../org/apache/camel/spring/SpringCamelContext.java |  3 +--
 10 files changed, 35 insertions(+), 76 deletions(-)

diff --git 
a/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroListener.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroListener.java
index 8e5dacbbec51..9c15ec507650 100644
--- 
a/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroListener.java
+++ 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroListener.java
@@ -30,8 +30,8 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.component.avro.spi.AvroRpcHttpServerFactory;
-import org.apache.camel.spi.FactoryFinder;
 import org.apache.camel.support.ExchangeHelper;
+import org.apache.camel.support.ResolverHelper;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -82,12 +82,8 @@ public class AvroListener {
     private static Server createServer(AvroConfiguration configuration, 
CamelContext camelContext, SpecificResponder responder)
             throws Exception {
         if 
(AVRO_HTTP_TRANSPORT.equalsIgnoreCase(configuration.getTransport().name())) {
-            AvroRpcHttpServerFactory factory = camelContext
-                    .getCamelContextExtension()
-                    .getFactoryFinder(FactoryFinder.DEFAULT_PATH)
-                    .newInstance("avro-rpc-http-server-factory", 
AvroRpcHttpServerFactory.class)
-                    .orElseThrow(() -> new IllegalStateException(
-                            "AvroRpcHttpServerFactory is neither set on this 
endpoint neither found in Camel Registry or FactoryFinder."));
+            AvroRpcHttpServerFactory factory = 
ResolverHelper.resolveMandatoryService(camelContext,
+                    "avro-rpc-http-server-factory", 
AvroRpcHttpServerFactory.class, "camel-avro-rpc");
             return factory.create(responder, configuration.getPort());
         } else if 
(AVRO_NETTY_TRANSPORT.equalsIgnoreCase(configuration.getTransport().name())) {
             return new NettyServer(responder, new 
InetSocketAddress(configuration.getHost(), configuration.getPort()));
diff --git 
a/components/camel-cron/src/main/java/org/apache/camel/component/cron/CronHelper.java
 
b/components/camel-cron/src/main/java/org/apache/camel/component/cron/CronHelper.java
index 55942a21795d..fbcf39ca0db5 100644
--- 
a/components/camel-cron/src/main/java/org/apache/camel/component/cron/CronHelper.java
+++ 
b/components/camel-cron/src/main/java/org/apache/camel/component/cron/CronHelper.java
@@ -18,13 +18,13 @@ package org.apache.camel.component.cron;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.cron.api.CamelCronService;
-import org.apache.camel.spi.FactoryFinder;
 import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.support.ResolverHelper;
 import org.apache.camel.util.ObjectHelper;
 
 public final class CronHelper {
-    private static final String RESOURCE_PATH = 
"META-INF/services/org/apache/camel/cron/";
-    private static final String FACTORY_KEY = "cron-service";
+
+    private static final String FACTORY_KEY = "cron/cron-service";
 
     private CronHelper() {
     }
@@ -45,8 +45,7 @@ public final class CronHelper {
         }
 
         // Fallback to factory finder
-        FactoryFinder finder = 
context.getCamelContextExtension().getFactoryFinder(RESOURCE_PATH);
-        return finder.newInstance(FACTORY_KEY, 
CamelCronService.class).orElse(null);
+        return ResolverHelper.resolveBootstrapService(context, FACTORY_KEY, 
CamelCronService.class).orElse(null);
     }
 
 }
diff --git 
a/components/camel-csimple-joor/src/main/java/org/apache/camel/language/csimple/joor/JoorCSimpleCompiler.java
 
b/components/camel-csimple-joor/src/main/java/org/apache/camel/language/csimple/joor/JoorCSimpleCompiler.java
index 1ba78af5813e..1fa390fd4e7d 100644
--- 
a/components/camel-csimple-joor/src/main/java/org/apache/camel/language/csimple/joor/JoorCSimpleCompiler.java
+++ 
b/components/camel-csimple-joor/src/main/java/org/apache/camel/language/csimple/joor/JoorCSimpleCompiler.java
@@ -168,9 +168,8 @@ public class JoorCSimpleCompiler extends ServiceSupport 
implements CSimpleCompil
     protected void doStart() throws Exception {
         // check if camel-attachment is on classpath which then includes 
custom csimple functions
         if (camelContext != null) {
-            Optional<SimpleLanguageFunctionFactory> factory = 
ResolverHelper.resolveService(
+            Optional<SimpleLanguageFunctionFactory> factory = 
ResolverHelper.resolveBootstrapService(
                     camelContext,
-                    
camelContext.getCamelContextExtension().getBootstrapFactoryFinder(),
                     SimpleLanguageFunctionFactory.FACTORY + 
"/camel-attachments",
                     SimpleLanguageFunctionFactory.class);
             if (factory.isPresent()) {
diff --git 
a/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeComponent.java
 
b/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeComponent.java
index 7a96ef3e3de9..1eee1f19497a 100644
--- 
a/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeComponent.java
+++ 
b/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeComponent.java
@@ -30,6 +30,7 @@ import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.HealthCheckComponent;
+import org.apache.camel.support.ResolverHelper;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.PropertiesHelper;
@@ -290,12 +291,9 @@ public class KnativeComponent extends HealthCheckComponent 
{
         if (producerFactory == null) {
             this.producerFactory = 
CamelContextHelper.lookup(getCamelContext(), protocol.name(), 
KnativeProducerFactory.class);
             if (this.producerFactory == null) {
-                this.producerFactory = getCamelContext()
-                        .getCamelContextExtension()
-                        
.getBootstrapFactoryFinder(Knative.KNATIVE_TRANSPORT_RESOURCE_PATH)
-                        .newInstance(protocol.name() + "-producer", 
KnativeProducerFactory.class)
-                        .orElseThrow(() -> new IllegalArgumentException(
-                                "Cannot create KnativeProducerFactory. Make 
sure camel-knative-http JAR is on classpath."));
+                String key = "knative/transport/" + protocol.name() + 
"-producer";
+                this.producerFactory = 
ResolverHelper.resolveMandatoryBootstrapService(getCamelContext(), key,
+                        KnativeProducerFactory.class, "camel-knative-http");
                 if (configuration.getTransportOptions() != null) {
                     setProperties(producerFactory, new 
HashMap<>(configuration.getTransportOptions()));
                 }
@@ -303,7 +301,6 @@ public class KnativeComponent extends HealthCheckComponent {
             }
             LOGGER.debug("Using Knative producer factory: {} for protocol: 
{}", producerFactory, protocol.name());
         }
-
         return producerFactory;
     }
 
@@ -311,12 +308,9 @@ public class KnativeComponent extends HealthCheckComponent 
{
         if (consumerFactory == null) {
             this.consumerFactory = 
CamelContextHelper.lookup(getCamelContext(), protocol.name(), 
KnativeConsumerFactory.class);
             if (this.consumerFactory == null) {
-                this.consumerFactory = getCamelContext()
-                        .getCamelContextExtension()
-                        
.getBootstrapFactoryFinder(Knative.KNATIVE_TRANSPORT_RESOURCE_PATH)
-                        .newInstance(protocol.name() + "-consumer", 
KnativeConsumerFactory.class)
-                        .orElseThrow(() -> new IllegalArgumentException(
-                                "Cannot create KnativeConsumerFactory. Make 
sure camel-knative-http JAR is on classpath."));
+                String key = "knative/transport/" + protocol.name() + 
"-consumer";
+                this.consumerFactory = 
ResolverHelper.resolveMandatoryBootstrapService(getCamelContext(), key,
+                        KnativeConsumerFactory.class, "camel-knative-http");
                 if (configuration.getTransportOptions() != null) {
                     setProperties(consumerFactory, new 
HashMap<>(configuration.getTransportOptions()));
                 }
diff --git 
a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiSupport.java
 
b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiSupport.java
index d4b0de1c21d5..6bfa861e7864 100644
--- 
a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiSupport.java
+++ 
b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiSupport.java
@@ -300,9 +300,8 @@ public class RestOpenApiSupport {
     }
 
     protected RestDefinitionsResolver 
createJmxRestDefinitionsResolver(CamelContext camelContext) {
-        return ResolverHelper.resolveMandatoryService(
+        return ResolverHelper.resolveMandatoryBootstrapService(
                 camelContext,
-                
camelContext.getCamelContextExtension().getBootstrapFactoryFinder(),
                 JMX_REST_DEFINITION_RESOLVER,
                 RestDefinitionsResolver.class,
                 "camel-openapi-java");
diff --git 
a/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/PlatformHttpComponent.java
 
b/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/PlatformHttpComponent.java
index c272ac263a08..2ac0a76b8afb 100644
--- 
a/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/PlatformHttpComponent.java
+++ 
b/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/PlatformHttpComponent.java
@@ -29,7 +29,6 @@ import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Processor;
 import org.apache.camel.component.platform.http.spi.PlatformHttpEngine;
-import org.apache.camel.spi.FactoryFinder;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.RestApiConsumerFactory;
 import org.apache.camel.spi.RestConfiguration;
@@ -38,6 +37,7 @@ import org.apache.camel.spi.RestOpenApiConsumerFactory;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.HeaderFilterStrategyComponent;
+import org.apache.camel.support.ResolverHelper;
 import org.apache.camel.support.RestComponentHelper;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.util.FileUtil;
@@ -338,14 +338,9 @@ public class PlatformHttpComponent extends 
HeaderFilterStrategyComponent
 
                     if (engine == null) {
                         LOG.debug("Lookup platform http engine from factory");
-
-                        engine = getCamelContext()
-                                .getCamelContextExtension()
-                                .getFactoryFinder(FactoryFinder.DEFAULT_PATH)
-                                
.newInstance(PlatformHttpConstants.PLATFORM_HTTP_ENGINE_FACTORY, 
PlatformHttpEngine.class)
-                                .orElseThrow(() -> new IllegalStateException(
-                                        "PlatformHttpEngine is neither set on 
this endpoint neither found in Camel Registry or FactoryFinder."));
-
+                        engine = 
ResolverHelper.resolveMandatoryService(getCamelContext(),
+                                
PlatformHttpConstants.PLATFORM_HTTP_ENGINE_FACTORY, PlatformHttpEngine.class,
+                                "camel-platform-http-vertx");
                         localEngine = true;
                     }
                 }
diff --git 
a/components/camel-reactive-streams/src/main/java/org/apache/camel/component/reactive/streams/ReactiveStreamsHelper.java
 
b/components/camel-reactive-streams/src/main/java/org/apache/camel/component/reactive/streams/ReactiveStreamsHelper.java
index e15379bbf783..b074fc24b968 100644
--- 
a/components/camel-reactive-streams/src/main/java/org/apache/camel/component/reactive/streams/ReactiveStreamsHelper.java
+++ 
b/components/camel-reactive-streams/src/main/java/org/apache/camel/component/reactive/streams/ReactiveStreamsHelper.java
@@ -23,12 +23,13 @@ import 
org.apache.camel.component.reactive.streams.api.CamelReactiveStreamsServi
 import 
org.apache.camel.component.reactive.streams.api.CamelReactiveStreamsServiceFactory;
 import org.apache.camel.component.reactive.streams.api.DispatchCallback;
 import 
org.apache.camel.component.reactive.streams.engine.ReactiveStreamsEngineConfiguration;
-import org.apache.camel.spi.FactoryFinder;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.DefaultExchange;
+import org.apache.camel.support.ResolverHelper;
 import org.apache.camel.util.ObjectHelper;
 
 public final class ReactiveStreamsHelper {
+
     private ReactiveStreamsHelper() {
     }
 
@@ -114,21 +115,7 @@ public final class ReactiveStreamsHelper {
     }
 
     public static CamelReactiveStreamsServiceFactory 
resolveServiceFactory(CamelContext context, String serviceType) {
-        try {
-            FactoryFinder finder
-                    = 
context.getCamelContextExtension().getFactoryFinder(ReactiveStreamsConstants.SERVICE_PATH);
-            Class<?> serviceClass = finder.findClass(serviceType).orElse(null);
-            if (serviceClass != null) {
-                return (CamelReactiveStreamsServiceFactory) 
context.getInjector().newInstance(serviceClass);
-            } else {
-                throw new IllegalStateException(
-                        "Class referenced in '" + 
ReactiveStreamsConstants.SERVICE_PATH + serviceType + "' not found");
-            }
-        } catch (Exception e) {
-            throw new IllegalStateException(
-                    "Unable to create the reactive stream service defined in 
'" + ReactiveStreamsConstants.SERVICE_PATH
-                                            + serviceType + "'",
-                    e);
-        }
+        return ResolverHelper.resolveMandatoryService(context, 
"reactive-streams/" + serviceType,
+                CamelReactiveStreamsServiceFactory.class, null);
     }
 }
diff --git 
a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestApiEndpoint.java
 
b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestApiEndpoint.java
index 61148135361c..4eeef1a0d522 100644
--- 
a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestApiEndpoint.java
+++ 
b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestApiEndpoint.java
@@ -26,7 +26,6 @@ import org.apache.camel.ExchangePattern;
 import org.apache.camel.NoSuchBeanException;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
-import org.apache.camel.spi.FactoryFinder;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.RestApiConsumerFactory;
 import org.apache.camel.spi.RestApiProcessorFactory;
@@ -36,6 +35,7 @@ import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriPath;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.DefaultEndpoint;
+import org.apache.camel.support.ResolverHelper;
 import org.apache.camel.util.HostUtils;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
@@ -146,8 +146,8 @@ public class RestApiEndpoint extends DefaultEndpoint {
             if (name == null) {
                 name = DEFAULT_API_COMPONENT_NAME; //use openapi first
             }
-            FactoryFinder finder = 
getCamelContext().getCamelContextExtension().getFactoryFinder(RESOURCE_PATH);
-            factory = finder.newInstance(name, 
RestApiProcessorFactory.class).orElse(null);
+            factory = ResolverHelper.resolveService(getCamelContext(), 
"restapi/" + name, RestApiProcessorFactory.class)
+                    .orElse(null);
         }
 
         if (factory == null) {
@@ -155,8 +155,8 @@ public class RestApiEndpoint extends DefaultEndpoint {
             if (name == null) {
                 name = "swagger"; //use swagger as fallback
             }
-            FactoryFinder finder = 
getCamelContext().getCamelContextExtension().getFactoryFinder(RESOURCE_PATH);
-            factory = finder.newInstance(name, 
RestApiProcessorFactory.class).orElse(null);
+            factory = ResolverHelper.resolveService(getCamelContext(), 
"restapi/" + name, RestApiProcessorFactory.class)
+                    .orElse(null);
         }
 
         if (factory != null) {
diff --git 
a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestEndpoint.java
 
b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestEndpoint.java
index 5a686150b655..0a241412c69a 100644
--- 
a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestEndpoint.java
+++ 
b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestEndpoint.java
@@ -23,11 +23,9 @@ import org.apache.camel.Category;
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.ExchangePattern;
-import org.apache.camel.NoFactoryAvailableException;
 import org.apache.camel.NoSuchBeanException;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
-import org.apache.camel.spi.FactoryFinder;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.RestConfiguration;
 import org.apache.camel.spi.RestConsumerFactory;
@@ -39,6 +37,7 @@ import org.apache.camel.spi.UriPath;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.DefaultEndpoint;
 import org.apache.camel.support.PluginHelper;
+import org.apache.camel.support.ResolverHelper;
 import org.apache.camel.support.component.PropertyConfigurerSupport;
 import org.apache.camel.util.HostUtils;
 import org.apache.camel.util.MimeTypeHelper;
@@ -351,18 +350,10 @@ public class RestEndpoint extends DefaultEndpoint {
             return null;
         }
         LOG.debug("Discovering camel-openapi-java on classpath for using 
api-doc: {}", apiDoc);
-        try {
-            FactoryFinder finder = 
getCamelContext().getCamelContextExtension().getFactoryFinder(RESOURCE_PATH);
-            RestProducerFactory apiDocFactory = 
finder.newInstance(DEFAULT_API_COMPONENT_NAME, RestProducerFactory.class)
-                    .orElse(null);
-            if (apiDocFactory == null) {
-                throw new NoFactoryAvailableException("Cannot find 
camel-openapi-java on classpath");
-            }
-            parameters.put("apiDoc", apiDoc);
-            return apiDocFactory;
-        } catch (NoFactoryAvailableException e) {
-            throw new IllegalStateException("Cannot find camel-openapi-java on 
classpath to use with api-doc: " + apiDoc);
-        }
+        RestProducerFactory apiDocFactory = 
ResolverHelper.resolveMandatoryService(getCamelContext(),
+                "rest/" + DEFAULT_API_COMPONENT_NAME, 
RestProducerFactory.class, "camel-openapi-java");
+        parameters.put("apiDoc", apiDoc);
+        return apiDocFactory;
     }
 
     private record ProducerFactoryResult(RestProducerFactory factory, String 
name) {
diff --git 
a/components/camel-spring-parent/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java
 
b/components/camel-spring-parent/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java
index ee490b001bb5..9c7726e45254 100644
--- 
a/components/camel-spring-parent/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java
+++ 
b/components/camel-spring-parent/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java
@@ -256,9 +256,8 @@ public class SpringCamelContext extends DefaultCamelContext
     @Override
 
     protected ModelJAXBContextFactory createModelJAXBContextFactory() {
-        return ResolverHelper.resolveMandatoryService(
+        return ResolverHelper.resolveMandatoryBootstrapService(
                 getCamelContextReference(),
-                getCamelContextExtension().getBootstrapFactoryFinder(),
                 ModelJAXBContextFactory.FACTORY + "-spring",
                 ModelJAXBContextFactory.class,
                 "camel-spring-xml");

Reply via email to