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/17 17:15:43 UTC
[4/8] camel git commit: CAMEL-7800: camel-swagger-java - work in
progress
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/4741cecc
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/4741cecc
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/4741cecc
Branch: refs/heads/swagger
Commit: 4741cecc64b6f150b25d82ee096368e4fa0cee83
Parents: 5925c04
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Sep 17 16:05:22 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Sep 17 16:28:55 2015 +0200
----------------------------------------------------------------------
components/camel-swagger-java/pom.xml | 2 +-
.../RestSwaggerApiDeclarationServlet.java | 66 +++++++++++++-------
.../apache/camel/swagger/RestSwaggerReader.java | 11 ++++
.../camel/swagger/RestSwaggerReaderTest.java | 5 +-
4 files changed, 57 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/4741cecc/components/camel-swagger-java/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/pom.xml b/components/camel-swagger-java/pom.xml
index d7aa2e4..5e0177a 100644
--- a/components/camel-swagger-java/pom.xml
+++ b/components/camel-swagger-java/pom.xml
@@ -30,7 +30,7 @@
<description>Camel Swagger Java support</description>
<properties>
- <camel.osgi.export.pkg>org.apache.camel.component.swagger.*</camel.osgi.export.pkg>
+ <camel.osgi.export.pkg>org.apache.camel.swagger.*</camel.osgi.export.pkg>
</properties>
<dependencies>
http://git-wip-us.apache.org/repos/asf/camel/blob/4741cecc/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 c88b261..9a918b2 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
@@ -26,7 +26,11 @@ import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+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.Swagger;
import org.apache.camel.model.rest.RestDefinition;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -35,8 +39,7 @@ public abstract class RestSwaggerApiDeclarationServlet extends HttpServlet {
private Logger LOG = LoggerFactory.getLogger(RestSwaggerApiDeclarationServlet.class);
- // TODO: implement me
- //private RestSwaggerReader reader = new RestSwaggerReader();
+ private RestSwaggerReader reader = new RestSwaggerReader();
private BeanConfig swaggerConfig = new BeanConfig();
private boolean cors;
private volatile boolean initDone;
@@ -54,6 +57,10 @@ public abstract class RestSwaggerApiDeclarationServlet extends HttpServlet {
if (s != null) {
swaggerConfig.setBasePath(s);
}
+ s = config.getInitParameter("host");
+ if (s != null) {
+ swaggerConfig.setHost(s);
+ }
s = config.getInitParameter("cors");
if (s != null) {
cors = "true".equalsIgnoreCase(s);
@@ -110,7 +117,7 @@ public abstract class RestSwaggerApiDeclarationServlet extends HttpServlet {
// render overview if the route is empty or is the root path
// renderApiDeclaration(request, response, contextId, route);
} else {
- // renderResourceListing(request, response, contextId);
+ renderResourceListing(request, response, contextId);
}
}
} catch (Exception e) {
@@ -118,6 +125,33 @@ public abstract class RestSwaggerApiDeclarationServlet extends HttpServlet {
}
}
+ private void renderResourceListing(HttpServletRequest request, HttpServletResponse response, String contextId) throws Exception {
+ LOG.trace("renderResourceListing");
+
+ if (cors) {
+ response.addHeader("Access-Control-Allow-Headers", "Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");
+ response.addHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT, PATCH");
+ response.addHeader("Access-Control-Allow-Origin", "*");
+ }
+
+ List<RestDefinition> rests = getRestDefinitions(contextId);
+ if (rests != null) {
+
+ // TODO: combine the rests
+
+ for (RestDefinition rest : rests) {
+ Swagger swagger = reader.read(rest, swaggerConfig);
+
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.enable(SerializationFeature.INDENT_OUTPUT);
+ mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+ mapper.writeValue(response.getOutputStream(), swagger);
+ }
+ } else {
+ response.setStatus(204);
+ }
+ }
+
private void initBaseAndApiPaths(HttpServletRequest request) throws MalformedURLException {
String base = swaggerConfig.getBasePath();
if (base == null || !base.startsWith("http")) {
@@ -127,31 +161,15 @@ public abstract class RestSwaggerApiDeclarationServlet extends HttpServlet {
base = "";
}
String path = translateContextPath(request);
+ swaggerConfig.setHost(url.getHost());
+
if (url.getPort() != 80 && url.getPort() != -1) {
- base = url.getProtocol() + "://" + url.getHost() + ":" + url.getPort() + path + "/" + base;
+ swaggerConfig.setHost(url.getHost() + ":" + url.getPort());
} else {
- base = url.getProtocol() + "://" + url.getHost() + request.getContextPath() + "/" + base;
+ swaggerConfig.setHost(url.getHost());
}
- swaggerConfig.setBasePath(base);
+ swaggerConfig.setBasePath(path + "/" + base);
}
-
- // TODO: api path?
- /*
- base = swaggerConfig.getApiPath
- if (base == null || !base.startsWith("http")) {
- // api path is configured using relative, so lets calculate the absolute url now we have the http request
- val url = new URL(request.getRequestURL.toString)
- if (base == null) {
- base = ""
- }
- val path = translateContextPath(request)
- if (url.getPort != 80 && url.getPort != -1) {
- base = url.getProtocol + "://" + url.getHost + ":" + url.getPort + path + "/" + base
- } else {
- base = url.getProtocol + "://" + url.getHost + request.getContextPath + "/" + base
- }
- swaggerConfig.setApiPath(base)
- } */
initDone = true;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/4741cecc/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 de2de46..662cb34 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
@@ -25,6 +25,7 @@ import java.util.Locale;
import io.swagger.jaxrs.config.BeanConfig;
import io.swagger.models.Operation;
import io.swagger.models.Path;
+import io.swagger.models.Response;
import io.swagger.models.Swagger;
import io.swagger.models.parameters.BodyParameter;
import io.swagger.models.parameters.FormParameter;
@@ -34,6 +35,7 @@ import io.swagger.models.parameters.PathParameter;
import io.swagger.models.parameters.QueryParameter;
import org.apache.camel.model.rest.RestDefinition;
import org.apache.camel.model.rest.RestOperationParamDefinition;
+import org.apache.camel.model.rest.RestOperationResponseMsgDefinition;
import org.apache.camel.model.rest.RestParamType;
import org.apache.camel.model.rest.VerbDefinition;
@@ -70,9 +72,13 @@ public class RestSwaggerReader {
if (verb.getConsumes() != null) {
op.consumes(verb.getConsumes());
+ } else if (rest.getConsumes() != null) {
+ op.consumes(rest.getConsumes());
}
if (verb.getProduces() != null) {
op.produces(verb.getProduces());
+ } else if (rest.getProduces() != null) {
+ op.produces(rest.getProduces());
}
if (verb.getDescriptionText() != null) {
op.summary(verb.getDescriptionText());
@@ -99,6 +105,11 @@ public class RestSwaggerReader {
op.addParameter(parameter);
}
}
+ for (RestOperationResponseMsgDefinition msg : verb.getResponseMsgs()) {
+ Response response = new Response();
+ response.setDescription(msg.getMessage());
+ op.addResponse("" + msg.getCode(), response);
+ }
// add path
swagger.path(opPath, path);
http://git-wip-us.apache.org/repos/asf/camel/blob/4741cecc/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderTest.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderTest.java
index 6ee65ea..45aa629 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderTest.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderTest.java
@@ -42,14 +42,15 @@ public class RestSwaggerReaderTest extends CamelTestSupport {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
- rest("/hello")
+ rest("/hello").consumes("application/json").produces("application/json")
.get("/hi/{name}").description("Saying hi")
.param().name("name").type(RestParamType.path).dataType("string").description("Who is it").endParam()
.to("log:hi")
.get("/bye/{name}").description("Saying bye")
.param().name("name").type(RestParamType.path).dataType("string").description("Who is it").endParam()
+ .responseMessage().code(200).message("A reply message").endResponseMessage()
.to("log:bye")
- .post("/bye").description("To update the greeting message")
+ .post("/bye").description("To update the greeting message").consumes("application/xml").produces("application/xml")
.param().name("greeting").type(RestParamType.body).dataType("string").description("Message to use as greeting").endParam()
.to("log:bye");
}