You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2016/08/26 16:02:39 UTC

[11/23] camel git commit: CAMEL-10164: swagger component for making rest calls with swagger schema validation and facade to actual HTTP client in use

CAMEL-10164: swagger component for making rest calls with swagger schema validation and facade to actual HTTP client in use


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f894c7db
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f894c7db
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f894c7db

Branch: refs/heads/master
Commit: f894c7db8becc90198279c459e7ebe8bdb1fe0d0
Parents: 69c12a0
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Aug 25 08:57:43 2016 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Aug 26 16:53:31 2016 +0200

----------------------------------------------------------------------
 .../SwaggerComponentConfiguration.java          | 26 ++++++------
 .../JettyRestProducerGetQueryParamTest.java     |  2 +-
 .../rest/producer/JettyRestProducerGetTest.java |  8 ++--
 .../swagger/component/SwaggerComponent.java     | 42 ++++++++++----------
 .../swagger/component/SwaggerEndpoint.java      | 39 +++++++++---------
 .../component/SwaggerComponentGetTest.java      |  2 +-
 .../camel/swagger/component/SwaggerGetTest.java |  2 +-
 .../component/SwaggerGetUriParamTest.java       |  2 +-
 components/readme.adoc                          |  3 ++
 docs/user-manual/en/SUMMARY.md                  |  1 +
 10 files changed, 67 insertions(+), 60 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/f894c7db/components-starter/camel-swagger-java-starter/src/main/java/org/apache/camel/swagger/component/springboot/SwaggerComponentConfiguration.java
----------------------------------------------------------------------
diff --git a/components-starter/camel-swagger-java-starter/src/main/java/org/apache/camel/swagger/component/springboot/SwaggerComponentConfiguration.java b/components-starter/camel-swagger-java-starter/src/main/java/org/apache/camel/swagger/component/springboot/SwaggerComponentConfiguration.java
index b31b00d..7fdc34c 100644
--- a/components-starter/camel-swagger-java-starter/src/main/java/org/apache/camel/swagger/component/springboot/SwaggerComponentConfiguration.java
+++ b/components-starter/camel-swagger-java-starter/src/main/java/org/apache/camel/swagger/component/springboot/SwaggerComponentConfiguration.java
@@ -27,28 +27,20 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
 public class SwaggerComponentConfiguration {
 
     /**
-     * The swagger schema to use in json format. The schema is loaded as a
-     * resource from the classpath or file system.
-     */
-    private String schema;
-    /**
      * The camel component to use as HTTP client for calling the REST service.
      * The default value is: http
      */
     private String componentName;
     /**
+     * The swagger api doc resource to use. The resource is loaded from
+     * classpath by default and must be in JSon format.
+     */
+    private String apiDoc;
+    /**
      * Host and port of HTTP service to use (override host in swagger schema)
      */
     private String host;
 
-    public String getSchema() {
-        return schema;
-    }
-
-    public void setSchema(String schema) {
-        this.schema = schema;
-    }
-
     public String getComponentName() {
         return componentName;
     }
@@ -57,6 +49,14 @@ public class SwaggerComponentConfiguration {
         this.componentName = componentName;
     }
 
+    public String getApiDoc() {
+        return apiDoc;
+    }
+
+    public void setApiDoc(String apiDoc) {
+        this.apiDoc = apiDoc;
+    }
+
     public String getHost() {
         return host;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/f894c7db/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/rest/producer/JettyRestProducerGetQueryParamTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/rest/producer/JettyRestProducerGetQueryParamTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/rest/producer/JettyRestProducerGetQueryParamTest.java
index 565d51d..cfdc0f0 100644
--- a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/rest/producer/JettyRestProducerGetQueryParamTest.java
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/rest/producer/JettyRestProducerGetQueryParamTest.java
@@ -45,7 +45,7 @@ public class JettyRestProducerGetQueryParamTest extends BaseJettyTest {
                 String host = "localhost:" + getPort();
 
                 from("direct:start")
-                        .to("swagger:hello-api.json:get:bye?host=" + host)
+                        .toF("swagger:get:bye?host=%s&apiDoc=%s", host, "hello-api.json")
                         .to("mock:result");
 
                 from("jetty:http://localhost:{{port}}/api/bye/?matchOnUriPrefix=true")

http://git-wip-us.apache.org/repos/asf/camel/blob/f894c7db/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/rest/producer/JettyRestProducerGetTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/rest/producer/JettyRestProducerGetTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/rest/producer/JettyRestProducerGetTest.java
index 69422d1..fda373c 100644
--- a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/rest/producer/JettyRestProducerGetTest.java
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/rest/producer/JettyRestProducerGetTest.java
@@ -38,14 +38,16 @@ public class JettyRestProducerGetTest extends BaseJettyTest {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
+                String host = "localhost:" + getPort();
+
                 SwaggerComponent sc = new SwaggerComponent();
                 sc.setComponentName("jetty");
+                sc.setHost(host);
+                sc.setApiDoc("hello-api.json");
                 context.addComponent("swagger", sc);
 
-                String host = "localhost:" + getPort();
-
                 from("direct:start")
-                        .to("swagger:hello-api.json:get:hello/hi/{name}?host=" + host)
+                        .to("swagger:get:hello/hi/{name}")
                         .to("mock:result");
 
                 from("jetty:http://localhost:{{port}}/api/hello/hi/?matchOnUriPrefix=true")

http://git-wip-us.apache.org/repos/asf/camel/blob/f894c7db/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerComponent.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerComponent.java
index 75eecec..d9c71fa 100644
--- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerComponent.java
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerComponent.java
@@ -25,9 +25,13 @@ import org.apache.camel.util.URISupport;
 public class SwaggerComponent extends UriEndpointComponent {
 
     private String componentName = "http";
-    private String schema;
+    private String apiDoc;
     private String host;
 
+    // TODO: we could move this to rest component in camel-core
+    // and have its producer support using a swagger schema and use a factory to lookup
+    // the code in this component that creates the producer
+
     public SwaggerComponent() {
         super(SwaggerEndpoint.class);
     }
@@ -36,24 +40,19 @@ public class SwaggerComponent extends UriEndpointComponent {
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
         SwaggerEndpoint endpoint = new SwaggerEndpoint(uri, this);
         endpoint.setComponentName(componentName);
+        endpoint.setApiDoc(apiDoc);
+        endpoint.setHost(host);
 
-        String schema;
         String verb;
         String path;
         String[] parts = remaining.split(":");
         if (parts.length == 2) {
-            schema = this.schema;
             verb = parts[0];
             path = parts[1];
-        } else if (parts.length == 3) {
-            schema = parts[0];
-            verb = parts[1];
-            path = parts[2];
         } else {
-            throw new IllegalArgumentException("Invalid syntax. Expected swagger:schema:verb:path?options");
+            throw new IllegalArgumentException("Invalid syntax. Expected swagger:verb:path?options");
         }
 
-        endpoint.setSchema(schema);
         endpoint.setVerb(verb);
         // path must start with leading slash
         if (!path.startsWith("/")) {
@@ -70,19 +69,6 @@ public class SwaggerComponent extends UriEndpointComponent {
         return endpoint;
     }
 
-    public String getSchema() {
-        return schema;
-    }
-
-    /**
-     * The swagger schema to use in json format.
-     * <p/>
-     * The schema is loaded as a resource from the classpath or file system.
-     */
-    public void setSchema(String schema) {
-        this.schema = schema;
-    }
-
     public String getComponentName() {
         return componentName;
     }
@@ -95,6 +81,18 @@ public class SwaggerComponent extends UriEndpointComponent {
         this.componentName = componentName;
     }
 
+    public String getApiDoc() {
+        return apiDoc;
+    }
+
+    /**
+     * The swagger api doc resource to use.
+     * The resource is loaded from classpath by default and must be in JSon format.
+     */
+    public void setApiDoc(String apiDoc) {
+        this.apiDoc = apiDoc;
+    }
+
     public String getHost() {
         return host;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/f894c7db/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerEndpoint.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerEndpoint.java
index 3ccfb74..0c7ccb9 100644
--- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerEndpoint.java
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerEndpoint.java
@@ -36,7 +36,7 @@ import org.slf4j.LoggerFactory;
 
 import static org.apache.camel.util.ResourceHelper.resolveMandatoryResourceAsInputStream;
 
-@UriEndpoint(scheme = "swagger", title = "Swagger", syntax = "swagger:schema:verb:path",
+@UriEndpoint(scheme = "swagger", title = "Swagger", syntax = "swagger:verb:path",
         producerOnly = true, label = "rest", lenientProperties = true)
 public class SwaggerEndpoint extends DefaultEndpoint {
 
@@ -44,8 +44,6 @@ public class SwaggerEndpoint extends DefaultEndpoint {
 
     private transient Swagger swagger;
 
-    @UriPath(enums = "http,https")
-    private String schema;
     @UriPath(enums = "get,put,post,head,delete,patch,options") @Metadata(required = "true")
     private String verb;
     @UriPath @Metadata(required = "true")
@@ -53,6 +51,8 @@ public class SwaggerEndpoint extends DefaultEndpoint {
     @UriParam
     private String componentName;
     @UriParam
+    private String apiDoc;
+    @UriParam
     private String host;
     @UriParam(multiValue = true)
     private String queryParameters;
@@ -83,17 +83,6 @@ public class SwaggerEndpoint extends DefaultEndpoint {
         return true;
     }
 
-    public String getSchema() {
-        return schema;
-    }
-
-    /**
-     * Scheme to use when calling the REST service such as http or https
-     */
-    public void setSchema(String schema) {
-        this.schema = schema;
-    }
-
     public String getVerb() {
         return verb;
     }
@@ -139,12 +128,24 @@ public class SwaggerEndpoint extends DefaultEndpoint {
         this.componentName = componentName;
     }
 
+    public String getApiDoc() {
+        return apiDoc;
+    }
+
+    /**
+     * The swagger api doc resource to use.
+     * The resource is loaded from classpath by default and must be in JSon format.
+     */
+    public void setApiDoc(String apiDoc) {
+        this.apiDoc = apiDoc;
+    }
+
     public String getHost() {
         return host;
     }
 
     /**
-     * Host and port of HTTP service to use (override host in swagger schema)
+     * Host and port of HTTP service to use (override host in swagger api-doc)
      */
     public void setHost(String host) {
         this.host = host;
@@ -155,13 +156,15 @@ public class SwaggerEndpoint extends DefaultEndpoint {
         super.doStart();
 
         // load json model
-        ObjectHelper.notEmpty(schema, "schema");
+        if (apiDoc == null) {
+            throw new IllegalArgumentException("The swagger api-doc must be configured using the apiDoc option");
+        }
 
-        InputStream is = resolveMandatoryResourceAsInputStream(getCamelContext(), schema);
+        InputStream is = resolveMandatoryResourceAsInputStream(getCamelContext(), apiDoc);
         try {
             SwaggerParser parser = new SwaggerParser();
             String json = getCamelContext().getTypeConverter().mandatoryConvertTo(String.class, is);
-            LOG.debug("Loaded swagger schema:\n{}", json);
+            LOG.debug("Loaded swagger api-doc:\n{}", json);
             swagger = parser.parse(json);
         } finally {
             IOHelper.close(is);

http://git-wip-us.apache.org/repos/asf/camel/blob/f894c7db/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerComponentGetTest.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerComponentGetTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerComponentGetTest.java
index ffe80a3..92e62de 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerComponentGetTest.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerComponentGetTest.java
@@ -47,7 +47,7 @@ public class SwaggerComponentGetTest extends CamelTestSupport {
             public void configure() throws Exception {
                 SwaggerComponent sc = new SwaggerComponent();
                 sc.setComponentName("dummy");
-                sc.setSchema("hello-api.json");
+                sc.setApiDoc("hello-api.json");
 
                 context.addComponent("swagger", sc);
 

http://git-wip-us.apache.org/repos/asf/camel/blob/f894c7db/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerGetTest.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerGetTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerGetTest.java
index f4b6937..1575d02 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerGetTest.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerGetTest.java
@@ -51,7 +51,7 @@ public class SwaggerGetTest extends CamelTestSupport {
                 context.addComponent("swagger", sc);
 
                 from("direct:start")
-                    .to("swagger:hello-api.json:get:hello/hi/{name}")
+                    .to("swagger:get:hello/hi/{name}?apiDoc=hello-api.json")
                     .to("mock:result");
             }
         };

http://git-wip-us.apache.org/repos/asf/camel/blob/f894c7db/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerGetUriParamTest.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerGetUriParamTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerGetUriParamTest.java
index 04d8642..0a76f01 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerGetUriParamTest.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerGetUriParamTest.java
@@ -51,7 +51,7 @@ public class SwaggerGetUriParamTest extends CamelTestSupport {
                 context.addComponent("swagger", sc);
 
                 from("direct:start")
-                    .to("swagger:hello-api.json:get:bye?name={name}")
+                    .to("swagger:get:bye?name={name}&apiDoc=hello-api.json")
                     .to("mock:result");
             }
         };

http://git-wip-us.apache.org/repos/asf/camel/blob/f894c7db/components/readme.adoc
----------------------------------------------------------------------
diff --git a/components/readme.adoc b/components/readme.adoc
index 6b5ec75..3534035 100644
--- a/components/readme.adoc
+++ b/components/readme.adoc
@@ -501,6 +501,9 @@ Components
 | link:camel-stringtemplate/src/main/docs/string-template-component.adoc[String Template] (camel-stringtemplate) +
 `string-template:resourceUri` | Transforms the message using a String template.
 
+| link:camel-swagger-java/src/main/docs/swagger-component.adoc[Swagger] (camel-swagger-java) +
+`swagger:verb:path` | Camel Swagger Java support
+
 | link:camel-telegram/src/main/docs/telegram-component.adoc[Telegram] (camel-telegram) +
 `telegram:type/authorizationToken` | The Camel endpoint for a telegram bot.
 

http://git-wip-us.apache.org/repos/asf/camel/blob/f894c7db/docs/user-manual/en/SUMMARY.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/SUMMARY.md b/docs/user-manual/en/SUMMARY.md
index b3eda45..5dca599 100644
--- a/docs/user-manual/en/SUMMARY.md
+++ b/docs/user-manual/en/SUMMARY.md
@@ -289,6 +289,7 @@
 	* [Stomp](stomp-component.adoc)
 	* [Stream](stream-component.adoc)
 	* [String Template](string-template-component.adoc)
+	* [Swagger](swagger-component.adoc)
 	* [Telegram](telegram-component.adoc)
 	* [Twitter](twitter-component.adoc)
 	* [Undertow](undertow-component.adoc)