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");
             }