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 15:42:48 UTC

[1/3] camel git commit: CAMEL-7800: camel-swagger-java - work in progress

Repository: camel
Updated Branches:
  refs/heads/swagger 112c58e54 -> 89f50bcd3


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/3e0fb3c5
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/3e0fb3c5
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/3e0fb3c5

Branch: refs/heads/swagger
Commit: 3e0fb3c58f178aaad3bd371050cbd9c9fe789bfc
Parents: 112c58e
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Sep 18 15:27:53 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Sep 18 15:27:53 2015 +0200

----------------------------------------------------------------------
 .../RestSwaggerApiDeclarationServlet.java       | 28 ++++++------------
 .../apache/camel/swagger/RestSwaggerReader.java | 30 +++++++++++++++-----
 .../swagger/RestSwaggerReaderModelTest.java     |  5 +---
 .../camel/swagger/RestSwaggerReaderTest.java    |  6 +---
 .../src/main/resources/camel-config-xml.xml     | 15 ++++++++++
 5 files changed, 49 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/3e0fb3c5/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 68d621b..dc1b938 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
@@ -29,6 +29,7 @@ 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.core.filter.SpecFilter;
 import io.swagger.jaxrs.config.BeanConfig;
 import io.swagger.models.Contact;
 import io.swagger.models.Info;
@@ -144,21 +145,14 @@ public abstract class RestSwaggerApiDeclarationServlet extends HttpServlet {
                     route = route.substring(contextId.length());
                 }
 
-
-                // TODO: implement these
-                if (!route.equals("") && !route.equals("/")) {
-                    // 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, route);
             }
         } catch (Exception e) {
             LOG.warn("Error rendering swagger due " + e.getMessage(), e);
         }
     }
 
-    private void renderResourceListing(HttpServletRequest request, HttpServletResponse response, String contextId) throws Exception {
+    private void renderResourceListing(HttpServletRequest request, HttpServletResponse response, String contextId, String route) throws Exception {
         LOG.trace("renderResourceListing");
 
         if (cors) {
@@ -169,17 +163,13 @@ public abstract class RestSwaggerApiDeclarationServlet extends HttpServlet {
 
         List<RestDefinition> rests = getRestDefinitions(contextId);
         if (rests != null) {
+            // read the rest-dsl into swagger model
+            Swagger swagger = reader.read(rests, route, swaggerConfig, new DefaultClassResolver());
 
-            // TODO: combine the rests
-
-            for (RestDefinition rest : rests) {
-                Swagger swagger = reader.read(rest, swaggerConfig, new DefaultClassResolver());
-
-                ObjectMapper mapper = new ObjectMapper();
-                mapper.enable(SerializationFeature.INDENT_OUTPUT);
-                mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-                mapper.writeValue(response.getOutputStream(), swagger);
-            }
+            ObjectMapper mapper = new ObjectMapper();
+            mapper.enable(SerializationFeature.INDENT_OUTPUT);
+            mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+            mapper.writeValue(response.getOutputStream(), swagger);
         } else {
             response.setStatus(204);
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/3e0fb3c5/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 1ad8c1f..fcfb057 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
@@ -50,6 +50,7 @@ import org.apache.camel.model.rest.RestOperationResponseMsgDefinition;
 import org.apache.camel.model.rest.RestParamType;
 import org.apache.camel.model.rest.VerbDefinition;
 import org.apache.camel.spi.ClassResolver;
+import org.apache.camel.util.ObjectHelper;
 
 /**
  * A Camel REST-DSL swagger reader that parse the rest-dsl into a swagger model representation.
@@ -57,16 +58,35 @@ import org.apache.camel.spi.ClassResolver;
 public class RestSwaggerReader {
 
     /**
-     * Read the REST-DSL definition and parse that as a Swagger model representation
+     * Read the REST-DSL definition's and parse that as a Swagger model representation
      *
-     * @param rest              the rest-dsl
+     * @param rests             the rest-dsl
+     * @param route             optional route path to filter the rest-dsl to only include from the chose route
      * @param config            the swagger configuration
      * @param classResolver     class resolver to use
      * @return the swagger model
      */
-    public Swagger read(RestDefinition rest, BeanConfig config, ClassResolver classResolver) {
+    public Swagger read(List<RestDefinition> rests, String route, BeanConfig config, ClassResolver classResolver) {
         Swagger swagger = new Swagger();
 
+        for (RestDefinition rest : rests) {
+
+            if (ObjectHelper.isNotEmpty(route) && !route.equals("/")) {
+                // filter by route
+                if (!rest.getPath().equals(route)) {
+                    continue;
+                }
+            }
+
+            parse(swagger, rest, classResolver);
+        }
+
+        // configure before returning
+        swagger = config.configure(swagger);
+        return swagger;
+    }
+
+    private void parse(Swagger swagger, RestDefinition rest, ClassResolver classResolver) {
         List<VerbDefinition> verbs = new ArrayList<>(rest.getVerbs());
         // must sort the verbs by uri so we group them together when an uri has multiple operations
         Collections.sort(verbs, new VerbOrdering());
@@ -207,10 +227,6 @@ public class RestSwaggerReader {
             // add path
             swagger.path(opPath, path);
         }
-
-        // configure before returning
-        swagger = config.configure(swagger);
-        return swagger;
     }
 
     private Model asModel(String typeName, Swagger swagger) {

http://git-wip-us.apache.org/repos/asf/camel/blob/3e0fb3c5/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelTest.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelTest.java
index 301421f..4d26438 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelTest.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelTest.java
@@ -65,9 +65,6 @@ public class RestSwaggerReaderModelTest extends CamelTestSupport {
 
     @Test
     public void testReaderRead() throws Exception {
-        RestDefinition rest = context.getRestDefinitions().get(0);
-        assertNotNull(rest);
-
         BeanConfig config = new BeanConfig();
         config.setHost("localhost:8080");
         config.setSchemes(new String[]{"http"});
@@ -77,7 +74,7 @@ public class RestSwaggerReaderModelTest extends CamelTestSupport {
         config.setLicenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html");
         RestSwaggerReader reader = new RestSwaggerReader();
 
-        Swagger swagger = reader.read(rest, config, new DefaultClassResolver());
+        Swagger swagger = reader.read(context.getRestDefinitions(), null, config, new DefaultClassResolver());
         assertNotNull(swagger);
 
         ObjectMapper mapper = new ObjectMapper();

http://git-wip-us.apache.org/repos/asf/camel/blob/3e0fb3c5/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 b7c9de3..20becb4 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
@@ -24,7 +24,6 @@ import io.swagger.models.Swagger;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultClassResolver;
 import org.apache.camel.impl.JndiRegistry;
-import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.rest.RestParamType;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
@@ -60,16 +59,13 @@ public class RestSwaggerReaderTest extends CamelTestSupport {
 
     @Test
     public void testReaderRead() throws Exception {
-        RestDefinition rest = context.getRestDefinitions().get(0);
-        assertNotNull(rest);
-
         BeanConfig config = new BeanConfig();
         config.setHost("localhost:8080");
         config.setSchemes(new String[]{"http"});
         config.setBasePath("/api");
         RestSwaggerReader reader = new RestSwaggerReader();
 
-        Swagger swagger = reader.read(rest, config, new DefaultClassResolver());
+        Swagger swagger = reader.read(context.getRestDefinitions(), null, config, new DefaultClassResolver());
         assertNotNull(swagger);
 
         ObjectMapper mapper = new ObjectMapper();

http://git-wip-us.apache.org/repos/asf/camel/blob/3e0fb3c5/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 be888b4..ecdeed7 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
@@ -75,6 +75,21 @@
       </get>
     </rest>
 
+    <!-- defines the rest services using the context-path /echo -->
+    <rest path="/echo" consumes="application/text" produces="application/text">
+      <description>Echo rest service</description>
+
+      <get uri="/ping">
+        <description>A ping service</description>
+        <route>
+          <transform>
+            <constant>pong</constant>
+          </transform>
+        </route>
+      </get>
+
+    </rest>
+
   </camelContext>
 
 </beans>
\ No newline at end of file


[2/3] 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/9bfc912d
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/9bfc912d
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/9bfc912d

Branch: refs/heads/swagger
Commit: 9bfc912d871bfd1d0dd7b252340a637194d31b22
Parents: 3e0fb3c
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Sep 18 15:37:03 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Sep 18 15:37:03 2015 +0200

----------------------------------------------------------------------
 .../org/apache/camel/swagger/RestSwaggerReader.java    | 13 +++++++++++++
 1 file changed, 13 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/9bfc912d/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 fcfb057..ae9c46f 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
@@ -33,6 +33,7 @@ import io.swagger.models.Path;
 import io.swagger.models.RefModel;
 import io.swagger.models.Response;
 import io.swagger.models.Swagger;
+import io.swagger.models.Tag;
 import io.swagger.models.parameters.BodyParameter;
 import io.swagger.models.parameters.FormParameter;
 import io.swagger.models.parameters.HeaderParameter;
@@ -50,6 +51,7 @@ import org.apache.camel.model.rest.RestOperationResponseMsgDefinition;
 import org.apache.camel.model.rest.RestParamType;
 import org.apache.camel.model.rest.VerbDefinition;
 import org.apache.camel.spi.ClassResolver;
+import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -91,6 +93,15 @@ public class RestSwaggerReader {
         // must sort the verbs by uri so we group them together when an uri has multiple operations
         Collections.sort(verbs, new VerbOrdering());
 
+        String pathAsTag = FileUtil.stripLeadingSeparator(rest.getPath());
+        String summary = rest.getDescriptionText();
+
+        // add rest as tag
+        Tag tag = new Tag();
+        tag.description(summary);
+        tag.name(pathAsTag);
+        swagger.addTag(tag);
+
         // gather all types in use
         Set<String> types = new LinkedHashSet<>();
         for (VerbDefinition verb : verbs) {
@@ -129,6 +140,8 @@ public class RestSwaggerReader {
             String opPath = SwaggerHelper.buildUrl(basePath, verb.getUri());
 
             Operation op = new Operation();
+            // group in the same tag
+            op.addTag(pathAsTag);
 
             Path path = swagger.getPath(opPath);
             if (path == null) {


[3/3] 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/89f50bcd
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/89f50bcd
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/89f50bcd

Branch: refs/heads/swagger
Commit: 89f50bcd354db9585566b60a73683c4ea0fbd489
Parents: 9bfc912
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Sep 18 15:42:57 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Sep 18 15:42:57 2015 +0200

----------------------------------------------------------------------
 .../apache/camel/model/rest/RestDefinition.java | 22 ++++++++++++++++++++
 .../apache/camel/swagger/RestSwaggerReader.java |  3 ++-
 .../swagger/RestSwaggerReaderModelTest.java     |  2 +-
 3 files changed, 25 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/89f50bcd/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java
index 4c5c044..9e1a34d 100644
--- a/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java
@@ -52,6 +52,9 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
     private String path;
 
     @XmlAttribute
+    private String tag;
+
+    @XmlAttribute
     private String consumes;
 
     @XmlAttribute
@@ -85,6 +88,17 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
         this.path = path;
     }
 
+    public String getTag() {
+        return tag;
+    }
+
+    /**
+     * To configure a special tag for the operations within this rest definition.
+     */
+    public void setTag(String tag) {
+        this.tag = tag;
+    }
+
     public String getConsumes() {
         return consumes;
     }
@@ -173,6 +187,14 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
         return this;
     }
 
+    /**
+     * To set the tag to use of this REST service
+     */
+    public RestDefinition tag(String tag) {
+        setTag(tag);
+        return this;
+    }
+
     public RestDefinition get() {
         return addVerb("get", null);
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/89f50bcd/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 ae9c46f..d5eac90 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
@@ -93,7 +93,8 @@ public class RestSwaggerReader {
         // must sort the verbs by uri so we group them together when an uri has multiple operations
         Collections.sort(verbs, new VerbOrdering());
 
-        String pathAsTag = FileUtil.stripLeadingSeparator(rest.getPath());
+        // we need to group the operations within the same tag, so use the path as default if not configured
+        String pathAsTag = rest.getTag() != null ? rest.getTag() : FileUtil.stripLeadingSeparator(rest.getPath());
         String summary = rest.getDescriptionText();
 
         // add rest as tag

http://git-wip-us.apache.org/repos/asf/camel/blob/89f50bcd/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelTest.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelTest.java
index 4d26438..d6293f5 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelTest.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelTest.java
@@ -44,7 +44,7 @@ public class RestSwaggerReaderModelTest extends CamelTestSupport {
             @Override
             public void configure() throws Exception {
                 // this user REST service is json only
-                rest("/user").description("User rest service")
+                rest("/user").tag("dude").description("User rest service")
                     .consumes("application/json").produces("application/json")
 
                     .get("/{id}").description("Find user by id").outType(User.class)