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)