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 2016/08/26 16:02:33 UTC
[05/23] camel git commit: CAMEL-10164: swagger component for making
rest calls with swagger schema validation and facade to actual HTTP client in
use
CAMEL-10164: swagger component for making rest calls with swagger schema validation and facade to actual HTTP client in use
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/14352b1c
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/14352b1c
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/14352b1c
Branch: refs/heads/master
Commit: 14352b1c069f4b170fd8ee97faa59c7e674c115a
Parents: 8a1549f
Author: Claus Ibsen <da...@apache.org>
Authored: Wed Aug 24 11:37:36 2016 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Aug 26 16:53:31 2016 +0200
----------------------------------------------------------------------
components/camel-swagger-java/pom.xml | 5 +
.../swagger/component/SwaggerComponent.java | 93 ++++++++++++
.../swagger/component/SwaggerEndpoint.java | 131 +++++++++++++++++
.../swagger/component/SwaggerProducer.java | 147 +++++++++++++++++++
.../services/org/apache/camel/component/swagger | 18 +++
.../swagger/RestSwaggerReaderApiDocsTest.java | 1 +
.../component/SwaggerComponentGetTest.java | 51 +++++++
.../camel/swagger/component/SwaggerGetTest.java | 46 ++++++
.../src/test/resources/hello-api.json | 26 ++++
parent/pom.xml | 1 +
10 files changed, 519 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/14352b1c/components/camel-swagger-java/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/pom.xml b/components/camel-swagger-java/pom.xml
index e981833..e8d5040 100644
--- a/components/camel-swagger-java/pom.xml
+++ b/components/camel-swagger-java/pom.xml
@@ -96,6 +96,11 @@
<artifactId>swagger-jaxrs</artifactId>
<version>${swagger-java-version}</version>
</dependency>
+ <dependency>
+ <groupId>io.swagger</groupId>
+ <artifactId>swagger-parser</artifactId>
+ <version>${swagger-java-parser-version}</version>
+ </dependency>
<!-- servlet api -->
<dependency>
http://git-wip-us.apache.org/repos/asf/camel/blob/14352b1c/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerComponent.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerComponent.java
new file mode 100644
index 0000000..a439379
--- /dev/null
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerComponent.java
@@ -0,0 +1,93 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.swagger.component;
+
+import java.util.Map;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.impl.UriEndpointComponent;
+
+public class SwaggerComponent extends UriEndpointComponent {
+
+ private String componentName = "http";
+ private String schema;
+
+ public SwaggerComponent() {
+ super(SwaggerEndpoint.class);
+ }
+
+ @Override
+ protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
+ SwaggerEndpoint endpoint = new SwaggerEndpoint(uri, this);
+ endpoint.setComponentName(componentName);
+
+ String schema;
+ String verb;
+ String path;
+ String[] parts = remaining.split(":");
+ if (parts.length == 2) {
+ schema = this.schema;
+ verb = parts[0];
+ path = parts[1];
+ } else if (parts.length == 3) {
+ schema = parts[0];
+ verb = parts[1];
+ path = parts[2];
+ } else {
+ throw new IllegalArgumentException("Invalid syntax. Expected swagger:schema:verb:path?options");
+ }
+
+ endpoint.setSchema(schema);
+ endpoint.setVerb(verb);
+ // path must start with leading slash
+ if (!path.startsWith("/")) {
+ path = "/" + path;
+ }
+ endpoint.setPath(path);
+
+ setProperties(endpoint, parameters);
+ // any leftover parameters should be kept as additional uri parameters
+
+
+ return endpoint;
+ }
+
+ public String getSchema() {
+ return schema;
+ }
+
+ /**
+ * The swagger schema to use in json format.
+ * <p/>
+ * The schema is loaded as a resource from the classpath or file system.
+ */
+ public void setSchema(String schema) {
+ this.schema = schema;
+ }
+
+ public String getComponentName() {
+ return componentName;
+ }
+
+ /**
+ * The camel component to use as HTTP client for calling the REST service.
+ * The default value is: http
+ */
+ public void setComponentName(String componentName) {
+ this.componentName = componentName;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/14352b1c/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerEndpoint.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerEndpoint.java
new file mode 100644
index 0000000..c5f7cb5
--- /dev/null
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerEndpoint.java
@@ -0,0 +1,131 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.swagger.component;
+
+import java.io.InputStream;
+
+import io.swagger.models.Swagger;
+import io.swagger.parser.SwaggerParser;
+import org.apache.camel.Component;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.impl.DefaultEndpoint;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.spi.UriPath;
+import org.apache.camel.util.IOHelper;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.apache.camel.util.ResourceHelper.resolveMandatoryResourceAsInputStream;
+
+@UriEndpoint(scheme = "swagger", title = "Swagger", syntax = "swagger:schema:verb:path",
+ producerOnly = true, label = "rest", lenientProperties = true)
+public class SwaggerEndpoint extends DefaultEndpoint {
+
+ private static final Logger LOG = LoggerFactory.getLogger(SwaggerEndpoint.class);
+
+ private transient Swagger swagger;
+
+ @UriPath
+ private String schema;
+ @UriPath(enums = "get,put,post,head,delete,patch,options") @Metadata(required = "true")
+ private String verb;
+ @UriPath @Metadata(required = "true")
+ private String path;
+ @UriParam
+ private String componentName;
+
+ public SwaggerEndpoint(String endpointUri, Component component) {
+ super(endpointUri, component);
+ }
+
+ @Override
+ public Producer createProducer() throws Exception {
+ SwaggerProducer answer = new SwaggerProducer(this);
+ answer.setSwagger(swagger);
+ return answer;
+ }
+
+ @Override
+ public Consumer createConsumer(Processor processor) throws Exception {
+ throw new UnsupportedOperationException("Consumer not supported");
+ }
+
+ @Override
+ public boolean isSingleton() {
+ return true;
+ }
+
+ public String getSchema() {
+ return schema;
+ }
+
+ public void setSchema(String schema) {
+ this.schema = schema;
+ }
+
+ public String getVerb() {
+ return verb;
+ }
+
+ public void setVerb(String verb) {
+ this.verb = verb;
+ }
+
+ public String getPath() {
+ return path;
+ }
+
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+ public String getComponentName() {
+ return componentName;
+ }
+
+ /**
+ * The camel component to use as HTTP client for calling the REST service.
+ * The default value is: http
+ */
+ public void setComponentName(String componentName) {
+ this.componentName = componentName;
+ }
+
+ @Override
+ protected void doStart() throws Exception {
+ super.doStart();
+
+ // load json model
+ ObjectHelper.notEmpty(schema, "schema");
+
+ InputStream is = resolveMandatoryResourceAsInputStream(getCamelContext(), schema);
+ try {
+ SwaggerParser parser = new SwaggerParser();
+ String json = getCamelContext().getTypeConverter().mandatoryConvertTo(String.class, is);
+ LOG.debug("Loaded swagger schema:\n{}", json);
+ swagger = parser.parse(json);
+ } finally {
+ IOHelper.close(is);
+ }
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/14352b1c/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerProducer.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerProducer.java
new file mode 100644
index 0000000..9af31be
--- /dev/null
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/component/SwaggerProducer.java
@@ -0,0 +1,147 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.swagger.component;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import io.swagger.models.Operation;
+import io.swagger.models.Path;
+import io.swagger.models.Swagger;
+import io.swagger.models.parameters.Parameter;
+import org.apache.camel.AsyncCallback;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.impl.DefaultAsyncProducer;
+import org.apache.camel.util.StringHelper;
+import org.apache.camel.util.URISupport;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SwaggerProducer extends DefaultAsyncProducer {
+
+ private static final Logger LOG = LoggerFactory.getLogger(SwaggerProducer.class);
+
+ // TODO: delegate to actual producer
+
+ private Swagger swagger;
+
+ public SwaggerProducer(Endpoint endpoint) {
+ super(endpoint);
+ }
+
+ @Override
+ public SwaggerEndpoint getEndpoint() {
+ return (SwaggerEndpoint) super.getEndpoint();
+ }
+
+ @Override
+ public boolean process(Exchange exchange, AsyncCallback callback) {
+ String verb = getEndpoint().getVerb();
+ String path = getEndpoint().getPath();
+
+ Operation op = getSwaggerOperation(verb, path);
+ if (op == null) {
+ exchange.setException(new IllegalArgumentException("Swagger schema does not contain operation for " + verb + ":" + path));
+ callback.done(true);
+ return true;
+ }
+
+ try {
+ // build context path to use for actual HTTP call
+ // replace path parameters with value from header
+ String contextPath = path;
+ Map<String, Object> query = new LinkedHashMap<>();
+ for (Parameter param : op.getParameters()) {
+ if ("path".equals(param.getIn())) {
+ String name = param.getName();
+ if (name != null) {
+ String value = exchange.getIn().getHeader(name, String.class);
+ if (value != null) {
+ String key = "{" + name + "}";
+ contextPath = StringHelper.replaceAll(contextPath, key, value);
+ }
+ }
+ } else if ("query".equals(param.getIn())) {
+ String name = param.getName();
+ if (name != null) {
+ String value = exchange.getIn().getHeader(name, String.class);
+ if (value != null) {
+ query.put(name, value);
+ }
+ }
+ }
+ }
+ if (!query.isEmpty()) {
+ String options = URISupport.createQueryString(query);
+ contextPath = contextPath + "?" + options;
+ }
+
+ LOG.debug("Using context-path: {}", contextPath);
+
+ } catch (Throwable e) {
+ exchange.setException(e);
+ callback.done(true);
+ return true;
+ }
+
+ // TODO: bind to consumes context-type
+ // TODO: if binding is turned on/off/auto etc
+ // TODO: use the component and build uri with verb/path
+ // TODO: build dynamic uri for component (toD, headers)
+
+ exchange.getIn().setBody("Hello Donald Duck");
+
+ // do some binding first
+ callback.done(true);
+ return true;
+ }
+
+ private Operation getSwaggerOperation(String verb, String path) {
+ Path modelPath = swagger.getPath(path);
+ if (modelPath == null) {
+ return null;
+ }
+
+ // get,put,post,head,delete,patch,options
+ Operation op = null;
+ if ("get".equals(verb)) {
+ op = modelPath.getGet();
+ } else if ("put".equals(verb)) {
+ op = modelPath.getPut();
+ } else if ("post".equals(verb)) {
+ op = modelPath.getPost();
+ } else if ("head".equals(verb)) {
+ op = modelPath.getHead();
+ } else if ("delete".equals(verb)) {
+ op = modelPath.getDelete();
+ } else if ("patch".equals(verb)) {
+ op = modelPath.getPatch();
+ } else if ("options".equals(verb)) {
+ op = modelPath.getOptions();
+ }
+ return op;
+ }
+
+ public Swagger getSwagger() {
+ return swagger;
+ }
+
+ public void setSwagger(Swagger swagger) {
+ this.swagger = swagger;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/14352b1c/components/camel-swagger-java/src/main/resources/META-INF/services/org/apache/camel/component/swagger
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/main/resources/META-INF/services/org/apache/camel/component/swagger b/components/camel-swagger-java/src/main/resources/META-INF/services/org/apache/camel/component/swagger
new file mode 100644
index 0000000..909e061
--- /dev/null
+++ b/components/camel-swagger-java/src/main/resources/META-INF/services/org/apache/camel/component/swagger
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+class=org.apache.camel.swagger.component.SwaggerComponent
http://git-wip-us.apache.org/repos/asf/camel/blob/14352b1c/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderApiDocsTest.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderApiDocsTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderApiDocsTest.java
index 14a7bf2..e1a31ed 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderApiDocsTest.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderApiDocsTest.java
@@ -74,6 +74,7 @@ public class RestSwaggerReaderApiDocsTest extends CamelTestSupport {
String json = mapper.writeValueAsString(swagger);
log.info(json);
+ System.out.println(json);
assertTrue(json.contains("\"host\" : \"localhost:8080\""));
assertTrue(json.contains("\"basePath\" : \"/api\""));
http://git-wip-us.apache.org/repos/asf/camel/blob/14352b1c/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerComponentGetTest.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerComponentGetTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerComponentGetTest.java
new file mode 100644
index 0000000..451b3cb
--- /dev/null
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerComponentGetTest.java
@@ -0,0 +1,51 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.swagger.component;
+
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class SwaggerComponentGetTest extends CamelTestSupport {
+
+ @Test
+ public void testSwaggerGet() throws Exception {
+ getMockEndpoint("mock:result").expectedBodiesReceived("Hello Donald Duck");
+
+ template.sendBodyAndHeader("direct:start", null, "name", "Donald Duck");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RoutesBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ SwaggerComponent sc = new SwaggerComponent();
+ sc.setSchema("hello-api.json");
+
+ context.addComponent("swagger", sc);
+
+ from("direct:start")
+ .to("swagger:get:hello/hi/{name}")
+ .to("mock:result");
+ }
+ };
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/14352b1c/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerGetTest.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerGetTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerGetTest.java
new file mode 100644
index 0000000..eb29281
--- /dev/null
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/component/SwaggerGetTest.java
@@ -0,0 +1,46 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.swagger.component;
+
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class SwaggerGetTest extends CamelTestSupport {
+
+ @Test
+ public void testSwaggerGet() throws Exception {
+ getMockEndpoint("mock:result").expectedBodiesReceived("Hello Donald Duck");
+
+ template.sendBodyAndHeader("direct:start", null, "name", "Donald Duck");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RoutesBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start")
+ .to("swagger:hello-api.json:get:hello/hi/{name}")
+ .to("mock:result");
+ }
+ };
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/14352b1c/components/camel-swagger-java/src/test/resources/hello-api.json
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/test/resources/hello-api.json b/components/camel-swagger-java/src/test/resources/hello-api.json
new file mode 100644
index 0000000..82d61f8
--- /dev/null
+++ b/components/camel-swagger-java/src/test/resources/hello-api.json
@@ -0,0 +1,26 @@
+{
+ "swagger" : "2.0",
+ "host" : "localhost:8080",
+ "basePath" : "/api",
+ "tags" : [ {
+ "name" : "hello"
+ } ],
+ "schemes" : [ "http" ],
+ "paths" : {
+ "/hello/hi/{name}" : {
+ "get" : {
+ "tags" : [ "hello" ],
+ "summary" : "Saying hi",
+ "consumes" : [ "application/json" ],
+ "produces" : [ "application/json" ],
+ "parameters" : [ {
+ "name" : "name",
+ "in" : "path",
+ "description" : "Who is it",
+ "required" : true,
+ "type" : "string"
+ } ]
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/14352b1c/parent/pom.xml
----------------------------------------------------------------------
diff --git a/parent/pom.xml b/parent/pom.xml
index 412b855..ee1bd1f 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -577,6 +577,7 @@
<swagger-scala-guava-version>15.0</swagger-scala-guava-version>
<swagger-scala-bundle-version>1.3.12_1</swagger-scala-bundle-version>
<swagger-java-version>1.5.10</swagger-java-version>
+ <swagger-java-parser-version>1.0.22</swagger-java-parser-version>
<swagger-java-guava-version>18.0</swagger-java-guava-version>
<stax-api-version>1.0.1</stax-api-version>
<stax2-api-bundle-version>3.1.4</stax2-api-bundle-version>