You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ay...@apache.org on 2015/07/11 16:18:13 UTC

cxf git commit: [CXF-6476] add a yaml test and also fix the basePath issue for swagger 2.0

Repository: cxf
Updated Branches:
  refs/heads/master 918bcb7a9 -> 3051c2a54


[CXF-6476] add a yaml test and also fix the basePath issue for swagger 2.0


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/3051c2a5
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/3051c2a5
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/3051c2a5

Branch: refs/heads/master
Commit: 3051c2a54adc909be8d63c690b1444eb2f9e5e35
Parents: 918bcb7
Author: Akitoshi Yoshida <ay...@apache.org>
Authored: Sat Jul 11 16:09:10 2015 +0200
Committer: Akitoshi Yoshida <ay...@apache.org>
Committed: Sat Jul 11 16:18:05 2015 +0200

----------------------------------------------------------------------
 .../jaxrs/swagger/AbstractSwaggerFeature.java   |  5 +-
 .../cxf/jaxrs/swagger/Swagger2Feature.java      | 10 +++
 .../cxf/jaxrs/swagger/SwaggerFeature.java       |  5 ++
 systests/jaxrs/pom.xml                          |  6 ++
 .../AbstractSwagger2ServiceDescriptionTest.java | 21 ++++-
 .../systest/jaxrs/description/swagger2-json.txt |  2 +-
 .../systest/jaxrs/description/swagger2-yaml.txt | 86 ++++++++++++++++++++
 7 files changed, 130 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/3051c2a5/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/AbstractSwaggerFeature.java
----------------------------------------------------------------------
diff --git a/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/AbstractSwaggerFeature.java b/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/AbstractSwaggerFeature.java
index 5b45829..44f5f08 100644
--- a/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/AbstractSwaggerFeature.java
+++ b/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/AbstractSwaggerFeature.java
@@ -47,6 +47,8 @@ abstract class AbstractSwaggerFeature extends AbstractFeature {
 
     protected abstract void addSwaggerResource(Server server);
 
+    protected abstract void setBasePathByAddress(String address);
+
     private void calculateDefaultResourcePackage(Server server) {
         JAXRSServiceFactoryBean serviceFactoryBean = 
             (JAXRSServiceFactoryBean)server.getEndpoint().get(JAXRSServiceFactoryBean.class.getName());
@@ -61,9 +63,10 @@ abstract class AbstractSwaggerFeature extends AbstractFeature {
     private void calculateDefaultBasePath(Server server) {
         if (getBasePath() == null || getBasePath().length() == 0) {
             String address = server.getEndpoint().getEndpointInfo().getAddress();
-            setBasePath(address);
+            setBasePathByAddress(address);
         }
     }
+
     public String getResourcePackage() {
         return resourcePackage;
     }

http://git-wip-us.apache.org/repos/asf/cxf/blob/3051c2a5/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/Swagger2Feature.java
----------------------------------------------------------------------
diff --git a/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/Swagger2Feature.java b/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/Swagger2Feature.java
index 9b4bcc9..b5d8f30 100644
--- a/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/Swagger2Feature.java
+++ b/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/Swagger2Feature.java
@@ -19,6 +19,7 @@
 package org.apache.cxf.jaxrs.swagger;
 
 import java.io.IOException;
+import java.net.URI;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -77,6 +78,15 @@ public class Swagger2Feature extends AbstractSwaggerFeature {
         beanConfig.setScan(isScan());
     }
 
+    @Override
+    protected void setBasePathByAddress(String address) {
+        if (!address.startsWith("/")) {
+            // get rid of the path
+            address = URI.create(address).getPath();
+        }
+        setBasePath(address);
+    }
+
     @PreMatching
     private static class SwaggerContainerRequestFilter extends ApiListingResource implements ContainerRequestFilter {
         private static final String APIDOCS_LISTING_PATH_JSON = "swagger.json";

http://git-wip-us.apache.org/repos/asf/cxf/blob/3051c2a5/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/SwaggerFeature.java
----------------------------------------------------------------------
diff --git a/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/SwaggerFeature.java b/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/SwaggerFeature.java
index b4191e3..e008686 100644
--- a/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/SwaggerFeature.java
+++ b/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/SwaggerFeature.java
@@ -73,6 +73,11 @@ public class SwaggerFeature extends AbstractSwaggerFeature {
         beanConfig.setScan(isScan());
     }    
 
+    @Override
+    protected void setBasePathByAddress(String address) {
+        setBasePath(address);
+    }
+
     @PreMatching
     private static class SwaggerContainerRequestFilter implements ContainerRequestFilter {
         private static final String APIDOCS_LISTING_PATH = "api-docs";

http://git-wip-us.apache.org/repos/asf/cxf/blob/3051c2a5/systests/jaxrs/pom.xml
----------------------------------------------------------------------
diff --git a/systests/jaxrs/pom.xml b/systests/jaxrs/pom.xml
index 32f177e..24f893e 100644
--- a/systests/jaxrs/pom.xml
+++ b/systests/jaxrs/pom.xml
@@ -510,6 +510,12 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+           <groupId>org.yaml</groupId>
+           <artifactId>snakeyaml</artifactId>
+           <version>1.15</version>
+           <scope>test</scope>
+        </dependency>
+        <dependency>
             <!-- activate atmosphere. Its use can be disabled by setting
                  org.apache.cxf.transport.websocket.atmosphere.disabled to "true" -->
             <groupId>org.atmosphere</groupId>

http://git-wip-us.apache.org/repos/asf/cxf/blob/3051c2a5/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/description/AbstractSwagger2ServiceDescriptionTest.java
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/description/AbstractSwagger2ServiceDescriptionTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/description/AbstractSwagger2ServiceDescriptionTest.java
index 13be973..285b150 100644
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/description/AbstractSwagger2ServiceDescriptionTest.java
+++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/description/AbstractSwagger2ServiceDescriptionTest.java
@@ -40,6 +40,7 @@ import org.junit.Ignore;
 import org.junit.Test;
 
 import org.skyscreamer.jsonassert.JSONAssert;
+import org.yaml.snakeyaml.Yaml;
 
 public abstract class AbstractSwagger2ServiceDescriptionTest extends AbstractBusClientServerTestBase {
     
@@ -96,18 +97,32 @@ public abstract class AbstractSwagger2ServiceDescriptionTest extends AbstractBus
             assertEquals(Status.OK.getStatusCode(), r.getStatus());
             JSONAssert.assertEquals(
                 IOUtils.readStringFromStream((InputStream)r.getEntity()), 
-                String.format(IOUtils.readStringFromStream(getClass().getResourceAsStream("swagger2-json.txt")), 
-                              getPort()),
+                IOUtils.readStringFromStream(getClass().getResourceAsStream("swagger2-json.txt")),
                 false);
         } finally {
             client.close();
         }
     }
 
+    @Test
+    public void testApiListingIsProperlyReturnedYAML() throws Exception {
+        final WebClient client = createWebClient("/swagger.yaml");
+        
+        try {
+            final Response r = client.get();
+            assertEquals(Status.OK.getStatusCode(), r.getStatus());
+            Yaml yaml = new Yaml();
+            assertEquals(yaml.load(getClass().getResourceAsStream("swagger2-yaml.txt")),
+                         yaml.load(IOUtils.readStringFromStream((InputStream)r.getEntity())));
+        } finally {
+            client.close();
+        }
+    }
+
     private WebClient createWebClient(final String url) {
         return WebClient
             .create("http://localhost:" + getPort() + url, 
                 Arrays.< Object >asList(new JacksonJsonProvider()))
-            .accept(MediaType.APPLICATION_JSON);
+            .accept(MediaType.APPLICATION_JSON).accept("application/yaml");
     }
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/3051c2a5/systests/jaxrs/src/test/resources/org/apache/cxf/systest/jaxrs/description/swagger2-json.txt
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/resources/org/apache/cxf/systest/jaxrs/description/swagger2-json.txt b/systests/jaxrs/src/test/resources/org/apache/cxf/systest/jaxrs/description/swagger2-json.txt
index 4377a41..8a1ee87 100644
--- a/systests/jaxrs/src/test/resources/org/apache/cxf/systest/jaxrs/description/swagger2-json.txt
+++ b/systests/jaxrs/src/test/resources/org/apache/cxf/systest/jaxrs/description/swagger2-json.txt
@@ -5,7 +5,7 @@
          "contact":{"name":"committer@apache.org"},
          "license":{"name":"Apache 2.0 License",
                     "url":"http://www.apache.org/licenses/LICENSE-2.0.html"}},
- "basePath":"/http://localhost:%s/",
+ "basePath":"/",
  "tags":[{"name":"bookstore"}],
  "paths":{"/bookstore":{"get":{"tags":["bookstore"],
                                "summary":"Get books",

http://git-wip-us.apache.org/repos/asf/cxf/blob/3051c2a5/systests/jaxrs/src/test/resources/org/apache/cxf/systest/jaxrs/description/swagger2-yaml.txt
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/resources/org/apache/cxf/systest/jaxrs/description/swagger2-yaml.txt b/systests/jaxrs/src/test/resources/org/apache/cxf/systest/jaxrs/description/swagger2-yaml.txt
new file mode 100644
index 0000000..db11154
--- /dev/null
+++ b/systests/jaxrs/src/test/resources/org/apache/cxf/systest/jaxrs/description/swagger2-yaml.txt
@@ -0,0 +1,86 @@
+---
+swagger: "2.0"
+info:
+  description: "The Application"
+  version: "1.0.0"
+  title: "Sample REST Application"
+  contact:
+    name: "committer@apache.org"
+  license:
+    name: "Apache 2.0 License"
+    url: "http://www.apache.org/licenses/LICENSE-2.0.html"
+basePath: "/"
+tags:
+- name: "bookstore"
+paths:
+  /bookstore:
+    get:
+      tags:
+      - "bookstore"
+      summary: "Get books"
+      description: "Get books"
+      operationId: "getBooks"
+      produces:
+      - "application/json"
+      parameters:
+      - name: "page"
+        in: "query"
+        description: "Page to fetch"
+        required: true
+        type: "integer"
+        default: "1"
+        format: "int32"
+      responses:
+        200:
+          description: "successful operation"
+          schema:
+            type: "array"
+            items:
+              $ref: "#/definitions/Book"
+  /bookstore/{id}:
+    get:
+      tags:
+      - "bookstore"
+      summary: "Get book by Id"
+      description: "Get book by Id"
+      operationId: "getBook"
+      produces:
+      - "application/json"
+      parameters:
+      - name: "id"
+        in: "path"
+        description: "id"
+        required: true
+        type: "integer"
+        format: "int64"
+      responses:
+        200:
+          description: "successful operation"
+          schema:
+            $ref: "#/definitions/Book"
+    delete:
+      tags:
+      - "bookstore"
+      summary: "Delete book"
+      description: "Delete book"
+      operationId: "delete"
+      parameters:
+      - name: "id"
+        in: "path"
+        description: "id"
+        required: true
+        type: "string"
+      responses:
+        default:
+          description: "successful operation"
+definitions:
+  Book:
+    type: "object"
+    properties:
+      name:
+        type: "string"
+      id:
+        type: "integer"
+        format: "int64"
+    xml:
+      name: "Book"