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:43:56 UTC
[10/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/1817a41e
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/1817a41e
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/1817a41e
Branch: refs/heads/master
Commit: 1817a41ea9165453bd8904498a4ed5c2a20e81a0
Parents: bf36f61
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Sep 18 12:23:55 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Sep 18 16:16:13 2015 +0200
----------------------------------------------------------------------
.../apache/camel/swagger/RestSwaggerReader.java | 85 ++++++++++++++------
.../src/test/resources/log4j.properties | 2 +-
2 files changed, 61 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/1817a41e/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 e664529..90f5956 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
@@ -30,6 +30,7 @@ import io.swagger.models.Model;
import io.swagger.models.ModelImpl;
import io.swagger.models.Operation;
import io.swagger.models.Path;
+import io.swagger.models.RefModel;
import io.swagger.models.Response;
import io.swagger.models.Swagger;
import io.swagger.models.parameters.BodyParameter;
@@ -40,6 +41,7 @@ import io.swagger.models.parameters.PathParameter;
import io.swagger.models.parameters.QueryParameter;
import io.swagger.models.parameters.SerializableParameter;
import io.swagger.models.properties.ArrayProperty;
+import io.swagger.models.properties.Property;
import io.swagger.models.properties.RefProperty;
import io.swagger.models.properties.StringProperty;
import org.apache.camel.model.rest.RestDefinition;
@@ -159,15 +161,18 @@ public class RestSwaggerReader {
if (parameter instanceof SerializableParameter) {
SerializableParameter sp = (SerializableParameter) parameter;
- // TODO: like response object with type refer to model
if (param.getDataType() != null) {
sp.setType(param.getDataType());
- } else if (verb.getType() != null) {
- boolean array = verb.getType().endsWith("[]");
- if (array) {
- sp.setType("array");
- } else {
- sp.setType(verb.getType());
+ }
+ }
+
+ if (parameter instanceof BodyParameter) {
+ BodyParameter bp = (BodyParameter) parameter;
+
+ if (verb.getType() != null) {
+ String ref = modelTypeAsRef(verb.getType(), swagger);
+ if (ref != null) {
+ bp.setSchema(new RefModel(ref));
}
}
}
@@ -178,23 +183,8 @@ public class RestSwaggerReader {
if (verb.getOutType() != null) {
Response response = new Response();
- boolean array = verb.getOutType().endsWith("[]");
- String type = array ? verb.getOutType().substring(0, verb.getOutType().length() - 2) : verb.getOutType();
- // lookup in models to use key instead of FQN
-
- for (Model model : swagger.getDefinitions().values()) {
- StringProperty modelType = (StringProperty) model.getVendorExtensions().get("x-className");
- if (modelType != null && type.equals(modelType.getFormat())) {
- type = ((ModelImpl) model).getName();
- break;
- }
- }
-
- if (array) {
- response.setSchema(new ArrayProperty(new RefProperty(type)));
- } else {
- response.setSchema(new RefProperty(type));
- }
+ Property prop = modelTypeAsProperty(verb.getOutType(), swagger);
+ response.setSchema(prop);
response.setDescription("Output type");
op.addResponse("200", response);
}
@@ -207,12 +197,57 @@ public class RestSwaggerReader {
// add path
swagger.path(opPath, path);
-
}
return swagger;
}
+ private Model asModel(String typeName, Swagger swagger) {
+ boolean array = typeName.endsWith("[]");
+ if (array) {
+ typeName = typeName.substring(0, typeName.length() - 2);
+ }
+
+ for (Model model : swagger.getDefinitions().values()) {
+ StringProperty modelType = (StringProperty) model.getVendorExtensions().get("x-className");
+ if (modelType != null && typeName.equals(modelType.getFormat())) {
+ return model;
+ }
+ }
+ return null;
+ }
+
+ private String modelTypeAsRef(String typeName, Swagger swagger) {
+ boolean array = typeName.endsWith("[]");
+ if (array) {
+ typeName = typeName.substring(0, typeName.length() - 2);
+ }
+
+ Model model = asModel(typeName, swagger);
+ if (model != null) {
+ typeName = ((ModelImpl) model).getName();
+ return typeName;
+ }
+
+ return null;
+ }
+
+ private Property modelTypeAsProperty(String typeName, Swagger swagger) {
+ boolean array = typeName.endsWith("[]");
+ if (array) {
+ typeName = typeName.substring(0, typeName.length() - 2);
+ }
+
+ String ref = modelTypeAsRef(typeName, swagger);
+
+ Property prop = ref != null ? new RefProperty(ref) : new StringProperty(typeName);
+ if (array) {
+ return new ArrayProperty(prop);
+ } else {
+ return prop;
+ }
+ }
+
/**
* If the class is annotated with swagger annotations its parsed into a Swagger model representation
* which is added to swagger
http://git-wip-us.apache.org/repos/asf/camel/blob/1817a41e/components/camel-swagger-java/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/test/resources/log4j.properties b/components/camel-swagger-java/src/test/resources/log4j.properties
index 6e040b0..e5d9b29 100644
--- a/components/camel-swagger-java/src/test/resources/log4j.properties
+++ b/components/camel-swagger-java/src/test/resources/log4j.properties
@@ -18,7 +18,7 @@
#
# The logging properties used for testing.
#
-log4j.rootLogger=INFO, file
+log4j.rootLogger=INFO, out
# uncomment the following to enable camel debugging
#log4j.logger.org.apache.camel.swagger=TRACE