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

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


The following commit(s) were added to refs/heads/master by this push:
     new 0d532b3  [CAMEL-14352]Add camel-openapi as api-doc discovered component
0d532b3 is described below

commit 0d532b3eeda40315e3051d708e422832fd93043e
Author: Freeman Fang <freeman.f...@gmail.com>
AuthorDate: Wed Jan 8 15:23:34 2020 -0500

    [CAMEL-14352]Add camel-openapi as api-doc discovered component
---
 .../camel-rest/src/main/docs/rest-component.adoc   |  4 +--
 .../apache/camel/component/rest/RestEndpoint.java  | 30 +++++++++++++++++-----
 .../endpoint/dsl/RestEndpointBuilderFactory.java   |  4 +--
 3 files changed, 27 insertions(+), 11 deletions(-)

diff --git a/components/camel-rest/src/main/docs/rest-component.adoc 
b/components/camel-rest/src/main/docs/rest-component.adoc
index e49577b..150be84 100644
--- a/components/camel-rest/src/main/docs/rest-component.adoc
+++ b/components/camel-rest/src/main/docs/rest-component.adoc
@@ -78,9 +78,9 @@ with the following path and query parameters:
 | *description* (consumer) | Human description to document this REST service | 
 | String
 | *exceptionHandler* (consumer) | To let the consumer use a custom 
ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this 
option is not in use. By default the consumer will deal with exceptions, that 
will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer 
creates an exchange. |  | ExchangePattern
-| *apiDoc* (producer) | The swagger api doc resource to use. The resource is 
loaded from classpath by default and must be in JSon format. |  | String
+| *apiDoc* (producer) | The openapi api doc resource to use. The resource is 
loaded from classpath by default and must be in JSon format. |  | String
 | *bindingMode* (producer) | Configures the binding mode for the producer. If 
set to anything other than 'off' the producer will try to convert the body of 
the incoming message from inType to the json or xml, and the response from json 
or xml to outType. |  | RestBindingMode
-| *host* (producer) | Host and port of HTTP service to use (override host in 
swagger schema) |  | String
+| *host* (producer) | Host and port of HTTP service to use (override host in 
openapi schema) |  | String
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy 
(on the first message). By starting lazy you can use this to allow CamelContext 
and routes to startup in situations where a producer may otherwise fail during 
starting and cause the route to fail being started. By deferring this startup 
to be lazy then the startup failure can be handled during routing messages via 
Camel's routing error handlers. Beware that when the first message is processed 
then creating and [...]
 | *producerComponentName* (producer) | The Camel Rest component to use for 
(producer) the REST transport, such as http, undertow. If no component has been 
explicit configured, then Camel will lookup if there is a Camel component that 
integrates with the Rest DSL, or if a org.apache.camel.spi.RestProducerFactory 
is registered in the registry. If either one is found, then that is being used. 
|  | String
 | *queryParameters* (producer) | Query parameters for the HTTP service to call 
|  | String
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 5826271..a990ade 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
@@ -49,7 +49,7 @@ public class RestEndpoint extends DefaultEndpoint {
 
     public static final String[] DEFAULT_REST_CONSUMER_COMPONENTS = new 
String[]{"coap", "netty-http", "jetty", "servlet", "spark-java", "undertow"};
     public static final String[] DEFAULT_REST_PRODUCER_COMPONENTS = new 
String[]{"http", "netty-http", "undertow"};
-    public static final String DEFAULT_API_COMPONENT_NAME = "swagger";
+    public static final String DEFAULT_API_COMPONENT_NAME = "openapi";
     public static final String RESOURCE_PATH = 
"META-INF/services/org/apache/camel/rest/";
 
     @UriPath(label = "common", enums = 
"get,post,put,delete,patch,head,trace,connect,options") @Metadata(required = 
true)
@@ -239,7 +239,7 @@ public class RestEndpoint extends DefaultEndpoint {
     }
 
     /**
-     * The swagger api doc resource to use.
+     * The openapi api doc resource to use.
      * The resource is loaded from classpath by default and must be in JSon 
format.
      */
     public void setApiDoc(String apiDoc) {
@@ -251,7 +251,7 @@ public class RestEndpoint extends DefaultEndpoint {
     }
 
     /**
-     * Host and port of HTTP service to use (override host in swagger schema)
+     * Host and port of HTTP service to use (override host in openapi schema)
      */
     public void setHost(String host) {
         this.host = host;
@@ -298,14 +298,30 @@ public class RestEndpoint extends DefaultEndpoint {
         RestProducerFactory factory = null;
 
         if (apiDoc != null) {
-            log.debug("Discovering camel-swagger-java on classpath for using 
api-doc: {}", apiDoc);
-            // lookup on classpath using factory finder to automatic find it 
(just add camel-swagger-java to classpath etc)
+            log.debug("Discovering camel-openapi-java on classpath for using 
api-doc: {}", apiDoc);
+            // lookup on classpath using factory finder to automatic find it 
(just add camel-openapi-java to classpath etc)
+            FactoryFinder finder = null;
             try {
-                FactoryFinder finder = 
getCamelContext().adapt(ExtendedCamelContext.class).getFactoryFinder(RESOURCE_PATH);
+                finder = 
getCamelContext().adapt(ExtendedCamelContext.class).getFactoryFinder(RESOURCE_PATH);
                 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);
             } catch (NoFactoryAvailableException e) {
-                throw new IllegalStateException("Cannot find 
camel-swagger-java on classpath to use with api-doc: " + apiDoc);
+                try {
+                    log.debug("Discovering camel-swagger-java on classpath as 
fallback for using api-doc: {}", apiDoc);
+                    Object instance = finder.newInstance("swagger").get();
+                    if (instance instanceof RestProducerFactory) {
+                        // this factory from camel-swagger-java will facade 
the http component in use
+                        apiDocFactory = (RestProducerFactory) instance;
+                    }
+                    parameters.put("apiDoc", apiDoc);
+                } catch (Exception ex) {
+
+                    throw new IllegalStateException("Cannot find 
camel-openapi-java neither camel-swagger-java on classpath to use with api-doc: 
" + apiDoc);
+                }
+
             }
         }
 
diff --git 
a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/RestEndpointBuilderFactory.java
 
b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/RestEndpointBuilderFactory.java
index 54c873e..c287646 100644
--- 
a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/RestEndpointBuilderFactory.java
+++ 
b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/RestEndpointBuilderFactory.java
@@ -358,7 +358,7 @@ public interface RestEndpointBuilderFactory {
             return this;
         }
         /**
-         * The swagger api doc resource to use. The resource is loaded from
+         * The openapi api doc resource to use. The resource is loaded from
          * classpath by default and must be in JSon format.
          * 
          * The option is a: <code>java.lang.String</code> type.
@@ -403,7 +403,7 @@ public interface RestEndpointBuilderFactory {
             return this;
         }
         /**
-         * Host and port of HTTP service to use (override host in swagger
+         * Host and port of HTTP service to use (override host in openapi
          * schema).
          * 
          * The option is a: <code>java.lang.String</code> type.

Reply via email to