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 2015/09/18 14:02:49 UTC
[1/2] camel git commit: CAMEL-7800: camel-swagger-java - work in
progress
Repository: camel
Updated Branches:
refs/heads/swagger 5b5b834b4 -> 112c58e54
CAMEL-7800: camel-swagger-java - work in progress
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/64852d26
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/64852d26
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/64852d26
Branch: refs/heads/swagger
Commit: 64852d26e781b5805f4f4c755605600a575f6d33
Parents: 5b5b834
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Sep 18 13:46:59 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Sep 18 13:46:59 2015 +0200
----------------------------------------------------------------------
.../RestOperationResponseMsgDefinition.java | 35 ++++++-----
.../camel/component/rest/FromRestGetTest.java | 4 +-
components/camel-swagger-java/pom.xml | 61 ++++++++++++++------
.../apache/camel/swagger/RestSwaggerReader.java | 11 +++-
examples/camel-example-swagger-java/pom.xml | 4 --
.../src/main/resources/camel-config-xml.xml | 16 +++--
.../src/main/webapp/home.html | 14 ++---
7 files changed, 91 insertions(+), 54 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/64852d26/camel-core/src/main/java/org/apache/camel/model/rest/RestOperationResponseMsgDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/RestOperationResponseMsgDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/RestOperationResponseMsgDefinition.java
index ddd08bb..7705e96 100644
--- a/camel-core/src/main/java/org/apache/camel/model/rest/RestOperationResponseMsgDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/rest/RestOperationResponseMsgDefinition.java
@@ -28,8 +28,6 @@ import org.apache.camel.spi.Metadata;
* To specify the rest operation response messages using Swagger.
* <p/>
* This maps to the Swagger Response Message Object.
- * see com.wordnik.swagger.model.ResponseMessage
- * and https://github.com/swagger-api/swagger-spec/blob/master/versions/1.2.md#525-response-message-object.
*/
@Metadata(label = "rest")
@XmlRootElement(name = "responseMessage")
@@ -39,8 +37,9 @@ public class RestOperationResponseMsgDefinition {
@XmlTransient
private VerbDefinition verb;
- @XmlAttribute(required = true)
- private int code;
+ @XmlAttribute
+ @Metadata(defaultValue = "200")
+ private String code;
@XmlAttribute(required = true)
private String message;
@@ -56,14 +55,11 @@ public class RestOperationResponseMsgDefinition {
public RestOperationResponseMsgDefinition() {
}
- public int getCode() {
- return code != 0 ? code : 200;
+ public String getCode() {
+ return code != null ? code : "200";
}
- /**
- * Sets the Swagger Operation's ResponseMessage code
- */
- public void setCode(int code) {
+ public void setCode(String code) {
this.code = code;
}
@@ -71,9 +67,6 @@ public class RestOperationResponseMsgDefinition {
return responseModel != null ? responseModel : "";
}
- /**
- * Sets the Swagger Operation's ResponseMessage responseModel
- */
public void setResponseModel(String responseModel) {
this.responseModel = responseModel;
}
@@ -82,23 +75,29 @@ public class RestOperationResponseMsgDefinition {
return message != null ? message : "success";
}
- /**
- * Sets the Swagger Operation's ResponseMessage message
- */
public void setMessage(String message) {
this.message = message;
}
/**
- * The return code
+ * The response code such as a HTTP status code.
*/
public RestOperationResponseMsgDefinition code(int code) {
+ setCode("" + code);
+ return this;
+ }
+
+ /**
+ * The response code such as a HTTP status code. Can use <tt>general</tt>, or other words
+ * to indicate general error responses that do not map to a specific HTTP status code.
+ */
+ public RestOperationResponseMsgDefinition code(String code) {
setCode(code);
return this;
}
/**
- * The return message
+ * The response message (description)
*/
public RestOperationResponseMsgDefinition message(String msg) {
setMessage(msg);
http://git-wip-us.apache.org/repos/asf/camel/blob/64852d26/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetTest.java b/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetTest.java
index b82d9a0..3297ce0 100644
--- a/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetTest.java
+++ b/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetTest.java
@@ -79,7 +79,8 @@ public class FromRestGetTest extends ContextTestSupport {
assertEquals("acc1", rest.getVerbs().get(0).getParams().get(0).getAccess());
assertEquals("acc2", rest.getVerbs().get(0).getParams().get(1).getAccess());
- assertEquals(300, rest.getVerbs().get(0).getResponseMsgs().get(0).getCode());
+ assertEquals("300", rest.getVerbs().get(0).getResponseMsgs().get(0).getCode());
+ assertEquals("error", rest.getVerbs().get(0).getResponseMsgs().get(1).getCode());
assertEquals("test msg", rest.getVerbs().get(0).getResponseMsgs().get(0).getMessage());
assertEquals(Integer.class.getCanonicalName(), rest.getVerbs().get(0).getResponseMsgs().get(0).getResponseModel());
@@ -115,6 +116,7 @@ public class FromRestGetTest extends ContextTestSupport {
.defaultValue("b").allowMultiple(true).name("header_letter").required(false).access("acc2")
.endParam()
.responseMessage().code(300).message("test msg").responseModel(Integer.class).endResponseMessage()
+ .responseMessage().code("error").message("does not work").endResponseMessage()
.to("direct:bye")
.post().to("mock:update");
http://git-wip-us.apache.org/repos/asf/camel/blob/64852d26/components/camel-swagger-java/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/pom.xml b/components/camel-swagger-java/pom.xml
index 5e0177a..742a9e5 100644
--- a/components/camel-swagger-java/pom.xml
+++ b/components/camel-swagger-java/pom.xml
@@ -40,24 +40,66 @@
<artifactId>camel-core</artifactId>
</dependency>
+ <!-- align to use versions from Camel BOM -->
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-annotations</artifactId>
+ <version>${jackson2-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ <version>${jackson2-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.datatype</groupId>
+ <artifactId>jackson-datatype-joda</artifactId>
+ <version>${jackson2-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.dataformat</groupId>
+ <artifactId>jackson-dataformat-yaml</artifactId>
+ <version>${jackson2-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.dataformat</groupId>
+ <artifactId>jackson-dataformat-xml</artifactId>
+ <version>${jackson2-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.jaxrs</groupId>
+ <artifactId>jackson-jaxrs-json-provider</artifactId>
+ <version>${jackson2-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ <version>${google-guava-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ <version>${commons-lang3-version}</version>
+ </dependency>
+
+ <!-- swagger -->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-core</artifactId>
<version>${swagger-java-version}</version>
</dependency>
-
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>${swagger-java-version}</version>
</dependency>
-
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jaxrs</artifactId>
<version>${swagger-java-version}</version>
</dependency>
+ <!-- servlet api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
@@ -72,21 +114,6 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.camel</groupId>
- <artifactId>camel-jetty8</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.camel</groupId>
- <artifactId>camel-http-common</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.camel</groupId>
- <artifactId>camel-jetty-common</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/camel/blob/64852d26/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java
index a83c03d..8f12dfe 100644
--- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java
@@ -158,6 +158,7 @@ public class RestSwaggerReader {
parameter.setDescription(param.getDescription());
parameter.setRequired(param.getRequired());
+ // set type on parameter
if (parameter instanceof SerializableParameter) {
SerializableParameter sp = (SerializableParameter) parameter;
@@ -166,6 +167,7 @@ public class RestSwaggerReader {
}
}
+ // set schema on body parameter
if (parameter instanceof BodyParameter) {
BodyParameter bp = (BodyParameter) parameter;
@@ -181,6 +183,7 @@ public class RestSwaggerReader {
}
}
+ // if we have an out type then set that as response message
if (verb.getOutType() != null) {
Response response = new Response();
Property prop = modelTypeAsProperty(verb.getOutType(), swagger);
@@ -189,13 +192,17 @@ public class RestSwaggerReader {
op.addResponse("200", response);
}
+ // enrich with configured response messages from the rest-dsl
for (RestOperationResponseMsgDefinition msg : verb.getResponseMsgs()) {
- Response response = op.getResponses().get("" + msg.getCode());
+ Response response = null;
+ if (op.getResponses() != null) {
+ response = op.getResponses().get(msg.getCode());
+ }
if (response == null) {
response = new Response();
}
response.setDescription(msg.getMessage());
- op.addResponse("" + msg.getCode(), response);
+ op.addResponse(msg.getCode(), response);
}
// add path
http://git-wip-us.apache.org/repos/asf/camel/blob/64852d26/examples/camel-example-swagger-java/pom.xml
----------------------------------------------------------------------
diff --git a/examples/camel-example-swagger-java/pom.xml b/examples/camel-example-swagger-java/pom.xml
index 09b0ba7..7552a65 100755
--- a/examples/camel-example-swagger-java/pom.xml
+++ b/examples/camel-example-swagger-java/pom.xml
@@ -53,10 +53,6 @@
<groupId>org.apache.camel</groupId>
<artifactId>camel-servlet</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.camel</groupId>
- <artifactId>camel-metrics</artifactId>
- </dependency>
<!-- swagger api -->
<dependency>
http://git-wip-us.apache.org/repos/asf/camel/blob/64852d26/examples/camel-example-swagger-java/src/main/resources/camel-config-xml.xml
----------------------------------------------------------------------
diff --git a/examples/camel-example-swagger-java/src/main/resources/camel-config-xml.xml b/examples/camel-example-swagger-java/src/main/resources/camel-config-xml.xml
index 8ec9b0b..be888b4 100755
--- a/examples/camel-example-swagger-java/src/main/resources/camel-config-xml.xml
+++ b/examples/camel-example-swagger-java/src/main/resources/camel-config-xml.xml
@@ -23,9 +23,6 @@
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
- <!-- use camel-metrics route policy to gather metrics for all routes -->
- <bean id="metricsRoutePolicyFactory" class="org.apache.camel.component.metrics.routepolicy.MetricsRoutePolicyFactory"/>
-
<!-- a bean for user services -->
<bean id="userService" class="org.apache.camel.example.rest.UserService"/>
@@ -50,7 +47,17 @@
<get uri="/{id}" outType="org.apache.camel.example.rest.User">
<description>Find user by id</description>
<param name="id" type="path" description="The id of the user to get" dataType="integer"/>
- <to uri="bean:userService?method=getUser(${header.id})"/>
+ <responseMessage message="The user that was found"/>
+ <responseMessage code="404" message="User not found"/>
+ <route>
+ <to uri="bean:userService?method=getUser(${header.id})"/>
+ <filter>
+ <simple>${body} == null</simple>
+ <setHeader headerName="Exchange.HTTP_RESPONSE_CODE">
+ <constant>404</constant>
+ </setHeader>
+ </filter>
+ </route>
</get>
<!-- this is a rest PUT to create/update an user -->
@@ -63,6 +70,7 @@
<!-- this is a rest GET to find all users -->
<get uri="/findAll" outType="org.apache.camel.example.rest.User[]">
<description>Find all users</description>
+ <responseMessage message="All the users"/>
<to uri="bean:userService?method=listUsers"/>
</get>
</rest>
http://git-wip-us.apache.org/repos/asf/camel/blob/64852d26/examples/camel-example-swagger-java/src/main/webapp/home.html
----------------------------------------------------------------------
diff --git a/examples/camel-example-swagger-java/src/main/webapp/home.html b/examples/camel-example-swagger-java/src/main/webapp/home.html
index b9c4e2a..71e50c8 100644
--- a/examples/camel-example-swagger-java/src/main/webapp/home.html
+++ b/examples/camel-example-swagger-java/src/main/webapp/home.html
@@ -18,7 +18,7 @@
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
- <title>Apache Camel Servlet REST and Apache Tomcat example</title>
+ <title>Apache Camel Swagger Java Example</title>
<link rel="stylesheet" href="css/foundation.min.css"/>
<script src="js/vendor/modernizr.js"></script>
</head>
@@ -26,23 +26,21 @@
<body>
<div class="row">
<div class="large-12 columns">
- <h2>Apache Camel Example using Servlet REST & Web Container</h2>
+ <h2>Apache Camel Example using Swagger Java</h2>
</div>
</div>
<div class="row">
<div class="large-12 columns">
- This example shows how to use Servlet REST to define REST endpoints in Camel routes using the Rest DSL
+ This example shows how to use Servlet REST to define REST endpoints in Camel routes using the Rest DSL,
+ and using camel-swagger-java to expose the REST service APIs.
<br/>
- This example is implemented in both the Java and XML DSLs. By default the Java DSL is in use.
- You can change this in the src/main/webapps/WEB-INF/web.xml file
+ This example is implemented in XML DSL.
<br/>
- For Java DSL the routes are defined in Java code, in the <tt>org.apache.camel.example.rest.UserRouteBuilder</tt>
- class.
- And for XML DSL the routes are define in XML code, in the <tt>src/main/resources/camel-config-xml.xml</tt> file.
+ The XML DSL the routes are define in XML code, in the <tt>src/main/resources/camel-config-xml.xml</tt> file.
<p/>
There is a <i>user</i> REST service that supports the following operations
[2/2] camel git commit: CAMEL-7800: camel-swagger-java - work in
progress
Posted by da...@apache.org.
CAMEL-7800: camel-swagger-java - work in progress
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/112c58e5
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/112c58e5
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/112c58e5
Branch: refs/heads/swagger
Commit: 112c58e5487dd6c8c274d49d8bae609c23d04b85
Parents: 64852d2
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Sep 18 14:04:07 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Sep 18 14:04:07 2015 +0200
----------------------------------------------------------------------
.../RestSwaggerApiDeclarationServlet.java | 52 +++++++++++++++-----
.../apache/camel/swagger/RestSwaggerReader.java | 3 +-
.../src/main/webapp/WEB-INF/web.xml | 6 ++-
3 files changed, 48 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/112c58e5/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerApiDeclarationServlet.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerApiDeclarationServlet.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerApiDeclarationServlet.java
index 6bc5e50..68d621b 100644
--- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerApiDeclarationServlet.java
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerApiDeclarationServlet.java
@@ -30,6 +30,9 @@ import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import io.swagger.jaxrs.config.BeanConfig;
+import io.swagger.models.Contact;
+import io.swagger.models.Info;
+import io.swagger.models.License;
import io.swagger.models.Swagger;
import org.apache.camel.impl.DefaultClassResolver;
import org.apache.camel.model.rest.RestDefinition;
@@ -68,20 +71,47 @@ public abstract class RestSwaggerApiDeclarationServlet extends HttpServlet {
if (s != null) {
cors = "true".equalsIgnoreCase(s);
}
+ s = config.getInitParameter("schemas");
+ if (s != null) {
+ String[] schemas = s.split(",");
+ swaggerConfig.setSchemes(schemas);
+ } else {
+ // assume http by default
+ swaggerConfig.setSchemes(new String[]{"http"});
+ }
+ String version = config.getInitParameter("api.version");
String title = config.getInitParameter("api.title");
String description = config.getInitParameter("api.description");
- String termsOfServiceUrl = config.getInitParameter("api.termsOfServiceUrl");
- String contact = config.getInitParameter("api.contact");
- String license = config.getInitParameter("api.license");
- String licenseUrl = config.getInitParameter("api.licenseUrl");
-
- swaggerConfig.setTitle(title);
- swaggerConfig.setDescription(description);
- swaggerConfig.setTermsOfServiceUrl(termsOfServiceUrl);
- swaggerConfig.setContact(contact);
- swaggerConfig.setLicense(license);
- swaggerConfig.setLicenseUrl(licenseUrl);
+ String termsOfService = config.getInitParameter("api.termsOfService");
+ String licenseName = config.getInitParameter("api.license.name");
+ String licenseUrl = config.getInitParameter("api.license.url");
+ String contactName = config.getInitParameter("api.contact.name");
+ String contactUrl = config.getInitParameter("api.contact.url");
+ String contactEmail = config.getInitParameter("api.contact.email");
+
+ Info info = new Info();
+ info.setVersion(version);
+ info.setTitle(title);
+ info.setDescription(description);
+ info.setTermsOfService(termsOfService);
+
+ if (licenseName != null || licenseUrl != null) {
+ License license = new License();
+ license.setName(licenseName);
+ license.setUrl(licenseUrl);
+ info.setLicense(license);
+ }
+
+ if (contactName != null || contactUrl != null || contactEmail != null) {
+ Contact contact = new Contact();
+ contact.setName(contactName);
+ contact.setUrl(contactUrl);
+ contact.setEmail(contactEmail);
+ info.setContact(contact);
+ }
+
+ swaggerConfig.setInfo(info);
}
public abstract List<RestDefinition> getRestDefinitions(String camelId) throws Exception;
http://git-wip-us.apache.org/repos/asf/camel/blob/112c58e5/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java
index 8f12dfe..1ad8c1f 100644
--- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java
@@ -66,7 +66,6 @@ public class RestSwaggerReader {
*/
public Swagger read(RestDefinition rest, BeanConfig config, ClassResolver classResolver) {
Swagger swagger = new Swagger();
- config.configure(swagger);
List<VerbDefinition> verbs = new ArrayList<>(rest.getVerbs());
// must sort the verbs by uri so we group them together when an uri has multiple operations
@@ -209,6 +208,8 @@ public class RestSwaggerReader {
swagger.path(opPath, path);
}
+ // configure before returning
+ swagger = config.configure(swagger);
return swagger;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/112c58e5/examples/camel-example-swagger-java/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/examples/camel-example-swagger-java/src/main/webapp/WEB-INF/web.xml b/examples/camel-example-swagger-java/src/main/webapp/WEB-INF/web.xml
index 17e049f..2979553 100755
--- a/examples/camel-example-swagger-java/src/main/webapp/WEB-INF/web.xml
+++ b/examples/camel-example-swagger-java/src/main/webapp/WEB-INF/web.xml
@@ -60,7 +60,7 @@
</init-param>
<init-param>
<param-name>api.version</param-name>
- <param-value>2.0</param-value>
+ <param-value>1.2.3</param-value>
</init-param>
<init-param>
<param-name>api.title</param-name>
@@ -70,6 +70,10 @@
<param-name>api.description</param-name>
<param-value>Camel Rest Example with Swagger that provides an User REST service</param-value>
</init-param>
+ <init-param>
+ <param-name>api.contact.name</param-name>
+ <param-value>The Apache Camel team</param-value>
+ </init-param>
<load-on-startup>2</load-on-startup>
</servlet>