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 17:44:01 UTC
[15/21] 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/2047a204
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2047a204
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2047a204
Branch: refs/heads/master
Commit: 2047a2043f8a0ab12a3a4de6c94bfb304ad9c179
Parents: d54f0bc
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 16:16:14 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/2047a204/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/2047a204/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/2047a204/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/2047a204/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/2047a204/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