Several Swagger-related improvements: swagger-jaxrs upgraded to 1.5.8, now 
working properly even as filter, prepared Swagger2Feature for extension


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

Branch: refs/heads/3.0.x-fixes
Commit: e515c136504d2854a6db42c5351adf7aa00cddb3
Parents: 0afa9d2
Author: Francesco Chicchiriccò <ilgro...@apache.org>
Authored: Wed Mar 16 16:40:02 2016 +0100
Committer: Francesco Chicchiriccò <ilgro...@apache.org>
Committed: Wed Mar 16 16:40:02 2016 +0100

----------------------------------------------------------------------
 parent/pom.xml                                  |  2 +-
 .../cxf/jaxrs/swagger/Swagger2Feature.java      | 82 ++++++++++++--------
 .../cxf/jaxrs/swagger/Swagger2Serializers.java  | 14 ++--
 3 files changed, 57 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/e515c136/parent/pom.xml
----------------------------------------------------------------------
diff --git a/parent/pom.xml b/parent/pom.xml
index 1a49ffa..18abcc7 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -159,7 +159,7 @@
         <cxf.spring.ldap.version>1.3.1.RELEASE</cxf.spring.ldap.version>
         <cxf.spring.mock>spring-test</cxf.spring.mock>
         <cxf.swagger.version>1.3.13</cxf.swagger.version>
-        <cxf.swagger2.version>1.5.4</cxf.swagger2.version>
+        <cxf.swagger2.version>1.5.8</cxf.swagger2.version>
         <cxf.velocity.version>1.7</cxf.velocity.version>
         <cxf.woodstox.core.version>4.4.1</cxf.woodstox.core.version>
         <cxf.woodstox.stax2-api.version>3.1.4</cxf.woodstox.stax2-api.version>

http://git-wip-us.apache.org/repos/asf/cxf/blob/e515c136/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 701701b..df5ea1e 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
@@ -32,6 +32,7 @@ import javax.ws.rs.container.ContainerRequestContext;
 import javax.ws.rs.container.ContainerRequestFilter;
 import javax.ws.rs.container.PreMatching;
 import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
 
@@ -44,6 +45,7 @@ import org.apache.cxf.jaxrs.model.doc.DocumentationProvider;
 import org.apache.cxf.jaxrs.model.doc.JavaDocProvider;
 import org.apache.cxf.jaxrs.provider.ServerProviderFactory;
 import org.apache.cxf.jaxrs.utils.InjectionUtils;
+import org.apache.cxf.jaxrs.utils.JAXRSUtils;
 
 import io.swagger.jaxrs.config.BeanConfig;
 import io.swagger.jaxrs.config.DefaultReaderConfig;
@@ -52,6 +54,12 @@ import io.swagger.jaxrs.listing.ApiListingResource;
 
 public class Swagger2Feature extends AbstractSwaggerFeature {
 
+    protected boolean dynamicBasePath;
+
+    protected boolean replaceTags;
+
+    protected DocumentationProvider javadocProvider;
+
     private String host;
 
     private String[] schemes;
@@ -62,33 +70,24 @@ public class Swagger2Feature extends AbstractSwaggerFeature 
{
 
     private String ignoreRoutes;
 
-    private boolean dynamicBasePath;
-
-    private boolean replaceTags;
-
-    private DocumentationProvider javadocProvider;
-
     @Override
     protected void addSwaggerResource(Server server) {
-        List<ClassResourceInfo> cris = Collections.emptyList();
-        if (!runAsFilter) {
-            List<Object> serviceBeans = new ArrayList<Object>();
-            ApiListingResource apiListingResource = new ApiListingResource();
-            serviceBeans.add(apiListingResource);
-            JAXRSServiceFactoryBean sfb =
-                    (JAXRSServiceFactoryBean) 
server.getEndpoint().get(JAXRSServiceFactoryBean.class.getName());
-            sfb.setResourceClassesFromBeans(serviceBeans);
-            cris = sfb.getClassResourceInfo();
+        ApiListingResource apiListingResource = new ApiListingResource();
+        JAXRSServiceFactoryBean sfb =
+                (JAXRSServiceFactoryBean) 
server.getEndpoint().get(JAXRSServiceFactoryBean.class.getName());
+        
sfb.setResourceClassesFromBeans(Collections.<Object>singletonList(apiListingResource));
+        List<ClassResourceInfo> cris = sfb.getClassResourceInfo();
+
+        List<Object> providers = new ArrayList<Object>();
+        if (runAsFilter) {
+            providers.add(new SwaggerContainerRequestFilter());
+        } else {
             for (ClassResourceInfo cri : cris) {
                 if (ApiListingResource.class == cri.getResourceClass()) {
-                    InjectionUtils.injectContextProxiesAndApplication(cri, 
apiListingResource, null);
+                    InjectionUtils.injectContextProxies(cri, 
apiListingResource);
                 }
             }
         }
-        List<Object> providers = new ArrayList<Object>();
-        if (runAsFilter) {
-            providers.add(new SwaggerContainerRequestFilter());
-        }
         providers.add(new Swagger2Serializers(dynamicBasePath, replaceTags, 
javadocProvider, cris));
         providers.add(new ReaderConfigFilter());
         ((ServerProviderFactory) server.getEndpoint().get(
@@ -184,32 +183,49 @@ public class Swagger2Feature extends 
AbstractSwaggerFeature {
     }
 
     @PreMatching
-    private static class SwaggerContainerRequestFilter extends 
ApiListingResource implements ContainerRequestFilter {
+    protected static class SwaggerContainerRequestFilter extends 
ApiListingResource implements ContainerRequestFilter {
+
+        protected static final MediaType APPLICATION_YAML_TYPE = 
JAXRSUtils.toMediaType("application/yaml");
+
+        protected static final String APIDOCS_LISTING_PATH = "swagger";
 
-        private static final String APIDOCS_LISTING_PATH_JSON = "swagger.json";
+        protected static final String APIDOCS_LISTING_PATH_JSON = 
APIDOCS_LISTING_PATH + ".json";
 
-        private static final String APIDOCS_LISTING_PATH_YAML = "swagger.yaml";
+        protected static final String APIDOCS_LISTING_PATH_YAML = 
APIDOCS_LISTING_PATH + ".yaml";
 
         @Context
-        private MessageContext mc;
+        protected MessageContext mc;
 
         @Override
         public void filter(ContainerRequestContext requestContext) throws 
IOException {
             UriInfo ui = mc.getUriInfo();
-            if (ui.getPath().endsWith(APIDOCS_LISTING_PATH_JSON)) {
-                Response r = getListingJson(null, mc.getServletConfig(), 
mc.getHttpHeaders(), ui);
-                requestContext.abortWith(r);
-            } else if (ui.getPath().endsWith(APIDOCS_LISTING_PATH_YAML)) {
-                Response r = getListingYaml(null, mc.getServletConfig(), 
mc.getHttpHeaders(), ui);
-                requestContext.abortWith(r);
+            List<MediaType> mediaTypes = 
mc.getHttpHeaders().getAcceptableMediaTypes();
+
+            Response response = null;
+            if ((ui.getPath().endsWith(APIDOCS_LISTING_PATH)
+                    && !JAXRSUtils.intersectMimeTypes(mediaTypes, 
MediaType.APPLICATION_JSON_TYPE).isEmpty())
+                    || ui.getPath().endsWith(APIDOCS_LISTING_PATH_JSON)) {
+
+                response = getListingJsonResponse(
+                        null, mc.getServletContext(), mc.getServletConfig(), 
mc.getHttpHeaders(), ui);
+            } else if ((ui.getPath().endsWith(APIDOCS_LISTING_PATH)
+                    && !JAXRSUtils.intersectMimeTypes(mediaTypes, 
APPLICATION_YAML_TYPE).isEmpty())
+                    || ui.getPath().endsWith(APIDOCS_LISTING_PATH_YAML)) {
+
+                response = getListingYamlResponse(
+                        null, mc.getServletContext(), mc.getServletConfig(), 
mc.getHttpHeaders(), ui);
+            }
+
+            if (response != null) {
+                requestContext.abortWith(response);
             }
         }
     }
 
-    private class ReaderConfigFilter implements ContainerRequestFilter {
+    protected class ReaderConfigFilter implements ContainerRequestFilter {
 
         @Context
-        private MessageContext mc;
+        protected MessageContext mc;
 
         @Override
         public void filter(ContainerRequestContext requestContext) throws 
IOException {
@@ -224,7 +240,7 @@ public class Swagger2Feature extends AbstractSwaggerFeature 
{
             }
         }
 
-        private void addReaderConfig(String ignoreRoutesParam) {
+        protected void addReaderConfig(String ignoreRoutesParam) {
             DefaultReaderConfig rc = new DefaultReaderConfig();
             rc.setScanAllResources(true);
             if (ignoreRoutesParam != null) {

http://git-wip-us.apache.org/repos/asf/cxf/blob/e515c136/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/Swagger2Serializers.java
----------------------------------------------------------------------
diff --git 
a/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/Swagger2Serializers.java
 
b/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/Swagger2Serializers.java
index 0a39b8d..c6dcdae 100644
--- 
a/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/Swagger2Serializers.java
+++ 
b/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/Swagger2Serializers.java
@@ -48,13 +48,13 @@ import io.swagger.models.Tag;
 
 public class Swagger2Serializers extends SwaggerSerializers {
 
-    private final boolean dynamicBasePath;
+    protected final boolean dynamicBasePath;
 
-    private final boolean replaceTags;
+    protected final boolean replaceTags;
 
-    private final DocumentationProvider javadocProvider;
+    protected final DocumentationProvider javadocProvider;
 
-    private final List<ClassResourceInfo> cris;
+    protected final List<ClassResourceInfo> cris;
 
     public Swagger2Serializers(
             final boolean dynamicBasePath,
@@ -88,8 +88,8 @@ public class Swagger2Serializers extends SwaggerSerializers {
 
         if (replaceTags || javadocProvider != null) {
             Map<String, ClassResourceInfo> operations = new HashMap<String, 
ClassResourceInfo>();
-            Map<Pair<String, String>, OperationResourceInfo> methods = 
-                new HashMap<Pair<String, String>, OperationResourceInfo>();
+            Map<Pair<String, String>, OperationResourceInfo> methods =
+                    new HashMap<Pair<String, String>, OperationResourceInfo>();
             for (ClassResourceInfo cri : cris) {
                 for (OperationResourceInfo ori : 
cri.getMethodDispatcher().getOperationResourceInfos()) {
                     String normalizedPath = getNormalizedPath(
@@ -146,7 +146,7 @@ public class Swagger2Serializers extends SwaggerSerializers 
{
         super.writeTo(data, type, genericType, annotations, mediaType, 
headers, out);
     }
 
-    private String getNormalizedPath(String classResourcePath, String 
operationResourcePath) {
+    protected String getNormalizedPath(String classResourcePath, String 
operationResourcePath) {
         StringBuilder normalizedPath = new StringBuilder();
 
         String[] segments = StringUtils.split(classResourcePath + 
operationResourcePath, "/");

Reply via email to