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 06e351d491c CAMEL-21071: camel-rest-openapi - Auto detect RestApiConsumerFactory from classpath (#15090) 06e351d491c is described below commit 06e351d491cdb69379208d38b692b084c6ed8b52 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Sat Aug 10 12:34:26 2024 +0200 CAMEL-21071: camel-rest-openapi - Auto detect RestApiConsumerFactory from classpath (#15090) --- .../DefaultRestOpenapiProcessorStrategy.java | 10 +++++---- .../rest/openapi/RestOpenApiProcessor.java | 3 --- .../camel/component/rest/RestApiEndpoint.java | 24 ++++++++++++++++++++++ .../apache/camel/component/rest/RestEndpoint.java | 22 ++++++-------------- .../java/org/apache/camel/main/KameletMain.java | 7 +------ .../DependencyDownloaderComponentResolver.java | 2 +- 6 files changed, 38 insertions(+), 30 deletions(-) diff --git a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/DefaultRestOpenapiProcessorStrategy.java b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/DefaultRestOpenapiProcessorStrategy.java index 5021ca826b0..7d62f6a169c 100644 --- a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/DefaultRestOpenapiProcessorStrategy.java +++ b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/DefaultRestOpenapiProcessorStrategy.java @@ -395,10 +395,12 @@ public class DefaultRestOpenapiProcessorStrategy extends ServiceSupport protected void doStop() throws Exception { ServiceHelper.stopService(producerCache); - PlatformHttpComponent phc = camelContext.getComponent("platform-http", PlatformHttpComponent.class); - if (phc != null) { - uris.forEach(phc::removeHttpEndpoint); - uris.clear(); + if (camelContext != null) { + PlatformHttpComponent phc = (PlatformHttpComponent) camelContext.hasComponent("platform-http"); + if (phc != null) { + uris.forEach(phc::removeHttpEndpoint); + uris.clear(); + } } } diff --git a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiProcessor.java b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiProcessor.java index eee89ee80d5..45d3b8e48b8 100644 --- a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiProcessor.java +++ b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiProcessor.java @@ -127,9 +127,6 @@ public class RestOpenApiProcessor extends DelegateAsyncProcessor implements Came if (m instanceof RestOpenApiConsumerPath rcp) { Operation o = rcp.getConsumer(); - // binding mode - RestConfiguration config = camelContext.getRestConfiguration(); - // map path-parameters from operation to camel headers HttpHelper.evalPlaceholders(exchange.getMessage().getHeaders(), uri, rcp.getConsumerPath()); 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 ca80cdb8443..547e18c9f1a 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 @@ -38,6 +38,8 @@ import org.apache.camel.support.CamelContextHelper; import org.apache.camel.support.DefaultEndpoint; import org.apache.camel.util.HostUtils; import org.apache.camel.util.ObjectHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Expose OpenAPI Specification of the REST services defined using Camel REST DSL. @@ -46,9 +48,14 @@ import org.apache.camel.util.ObjectHelper; remote = false, consumerOnly = true, category = { Category.CORE, Category.REST }, lenientProperties = true) public class RestApiEndpoint extends DefaultEndpoint { + public static final String[] DEFAULT_REST_API_CONSUMER_COMPONENTS + = new String[] { "platform-http", "servlet", "jetty", "undertow", "netty-http" }; + public static final String DEFAULT_API_COMPONENT_NAME = "openapi"; public static final String RESOURCE_PATH = "META-INF/services/org/apache/camel/restapi/"; + private static final Logger LOG = LoggerFactory.getLogger(RestApiEndpoint.class); + @UriPath @Metadata(required = true) private String path; @@ -246,6 +253,23 @@ public class RestApiEndpoint extends DefaultEndpoint { factory = factories.iterator().next(); } } + // no explicit factory found then try to see if we can find any of the default rest consumer components + if (factory == null) { + RestApiConsumerFactory found = null; + String foundName = null; + for (String name : DEFAULT_REST_API_CONSUMER_COMPONENTS) { + Object comp = getCamelContext().getComponent(name, true); + if (comp instanceof RestApiConsumerFactory) { + found = (RestApiConsumerFactory) comp; + foundName = name; + break; + } + } + if (found != null) { + LOG.debug("Auto discovered {} as RestApiConsumerFactory", foundName); + factory = found; + } + } if (factory != null) { // calculate the url to the rest API service 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 da08c031b7c..d50aaf315df 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 @@ -399,20 +399,15 @@ public class RestEndpoint extends DefaultEndpoint { } // no explicit factory found then try to see if we can find any of the default rest producer components - // and there must only be exactly one so we safely can pick this one if (factory == null) { RestProducerFactory found = null; String foundName = null; for (String name : DEFAULT_REST_PRODUCER_COMPONENTS) { Object comp = setupComponent(name, getCamelContext(), (Map<String, Object>) parameters.get("component")); if (comp instanceof RestProducerFactory) { - if (found == null) { - found = (RestProducerFactory) comp; - foundName = name; - } else { - throw new IllegalArgumentException( - "Multiple RestProducerFactory found on classpath. Configure explicit which component to use"); - } + found = (RestProducerFactory) comp; + foundName = name; + break; } } if (found != null) { @@ -506,20 +501,15 @@ public class RestEndpoint extends DefaultEndpoint { } // no explicit factory found then try to see if we can find any of the default rest consumer components - // and there must only be exactly one so we safely can pick this one if (factory == null) { RestConsumerFactory found = null; String foundName = null; for (String name : DEFAULT_REST_CONSUMER_COMPONENTS) { Object comp = getCamelContext().getComponent(name, true); if (comp instanceof RestConsumerFactory) { - if (found == null) { - found = (RestConsumerFactory) comp; - foundName = name; - } else { - throw new IllegalArgumentException( - "Multiple RestConsumerFactory found on classpath. Configure explicit which component to use"); - } + found = (RestConsumerFactory) comp; + foundName = name; + break; } } if (found != null) { diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java index 3536430974a..22290636038 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java @@ -790,12 +790,7 @@ public class KameletMain extends MainCommandLineSupport { */ protected void configureInitialProperties(String location) { // optional configuration if these components are in-use - addInitialProperty("camel.component.?kamelet.location", location); - addInitialProperty("camel.component.?rest-api.consumerComponentName", "platform-http"); - addInitialProperty("camel.component.?rest.consumerComponentName", "platform-http"); - addInitialProperty("camel.component.?rest.producerComponentName", "vertx-http"); - // make it easy to load mock-data from file without having to add camel-mock to classpath - addInitialProperty("camel.component.?rest-openapi.mockIncludePattern", "file:camel-mock/**,classpath:camel-mock/**"); + addInitialProperty("camel.component.kamelet.location", location); } protected String startupInfo() { diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java index a6ea02a17e6..392919fe4ca 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java @@ -34,7 +34,7 @@ import org.apache.camel.tooling.model.ComponentModel; public final class DependencyDownloaderComponentResolver extends DefaultComponentResolver { private static final String ACCEPTED_STUB_NAMES - = "stub,bean,class,direct,kamelet,log,platform-http,rest,rest-api,seda,vertx-http"; + = "stub,bean,class,direct,kamelet,log,platform-http,rest,seda,vertx-http"; private final CamelCatalog catalog = new DefaultCamelCatalog(); private final CamelContext camelContext;