You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2014/12/12 14:22:02 UTC

cxf git commit: Prototyping some code to get SwaggerFeature run as a filter

Repository: cxf
Updated Branches:
  refs/heads/master 9aace1d5e -> 3834ba2ea


Prototyping some code to get SwaggerFeature run as a filter


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

Branch: refs/heads/master
Commit: 3834ba2ea50a164cf2b5ffe15229dcf512e110c6
Parents: 9aace1d
Author: Sergey Beryozkin <sb...@talend.com>
Authored: Fri Dec 12 13:21:46 2014 +0000
Committer: Sergey Beryozkin <sb...@talend.com>
Committed: Fri Dec 12 13:21:46 2014 +0000

----------------------------------------------------------------------
 .../cxf/jaxrs/swagger/SwaggerFeature.java       | 64 +++++++++++++++++---
 1 file changed, 56 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/3834ba2e/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 3630415..f63a2a0 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
@@ -18,13 +18,27 @@
  */
 package org.apache.cxf.jaxrs.swagger;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
+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.Response;
+import javax.ws.rs.core.UriInfo;
+
+import com.wordnik.swagger.jaxrs.config.BeanConfig;
+import com.wordnik.swagger.jaxrs.listing.ApiDeclarationProvider;
+import com.wordnik.swagger.jaxrs.listing.ApiListingResourceJSON;
+import com.wordnik.swagger.jaxrs.listing.ResourceListingProvider;
+
 import org.apache.cxf.Bus;
 import org.apache.cxf.endpoint.Server;
 import org.apache.cxf.feature.AbstractFeature;
 import org.apache.cxf.jaxrs.JAXRSServiceFactoryBean;
+import org.apache.cxf.jaxrs.ext.MessageContext;
 import org.apache.cxf.jaxrs.model.AbstractResourceInfo;
 import org.apache.cxf.jaxrs.provider.ServerProviderFactory;
 
@@ -39,22 +53,29 @@ public class SwaggerFeature extends AbstractFeature {
     private String license = "Apache 2.0 License";
     private String licenseUrl = "http://www.apache.org/licenses/LICENSE-2.0.html";
     private boolean scan = true;
-    
+    private boolean runAsFilter;
     
     @Override
     public void initialize(Server server, Bus bus) {
-        List<Object> serviceBeans = new ArrayList<Object>();
-        serviceBeans.add(new com.wordnik.swagger.jaxrs.listing.ApiListingResourceJSON());
         calulateDefaultResourcePackage(server);
         calulateDefaultBasePath(server);
-        ((JAXRSServiceFactoryBean)server.getEndpoint().get(JAXRSServiceFactoryBean.class.getName())).
-            setResourceClassesFromBeans(serviceBeans);
+        ApiListingResourceJSON apiListingResource = new ApiListingResourceJSON();
+        if (!runAsFilter) {
+            List<Object> serviceBeans = new ArrayList<Object>();
+            serviceBeans.add(apiListingResource);
+            ((JAXRSServiceFactoryBean)server.getEndpoint().get(JAXRSServiceFactoryBean.class.getName())).
+                setResourceClassesFromBeans(serviceBeans);
+        }
         List<Object> providers = new ArrayList<Object>();
-        providers.add(new com.wordnik.swagger.jaxrs.listing.ResourceListingProvider());
-        providers.add(new com.wordnik.swagger.jaxrs.listing.ApiDeclarationProvider());
+        if (runAsFilter) {
+            providers.add(new SwaggerContainerRequestFilter(apiListingResource));
+        }
+        providers.add(new ResourceListingProvider());
+        providers.add(new ApiDeclarationProvider());
         ((ServerProviderFactory)server.getEndpoint().get(
                 ServerProviderFactory.class.getName())).setUserProviders(providers);
-        com.wordnik.swagger.jaxrs.config.BeanConfig beanConfig = new com.wordnik.swagger.jaxrs.config.BeanConfig();
+        
+        BeanConfig beanConfig = new BeanConfig();
         beanConfig.setResourcePackage(getResourcePackage());
         beanConfig.setVersion(getVersion());
         beanConfig.setBasePath(getBasePath());
@@ -138,4 +159,31 @@ public class SwaggerFeature extends AbstractFeature {
         this.scan = scan;
     }
 
+    public boolean isRunAsFilter() {
+        return runAsFilter;
+    }
+    public void setRunAsFilter(boolean runAsFilter) {
+        this.runAsFilter = runAsFilter;
+    }
+
+    @PreMatching
+    private static class SwaggerContainerRequestFilter implements ContainerRequestFilter {
+        private ApiListingResourceJSON apiListingResource;
+        @Context
+        private MessageContext mc;
+        public SwaggerContainerRequestFilter(ApiListingResourceJSON apiListingResource) {
+            this.apiListingResource = apiListingResource;
+        }
+
+        @Override
+        public void filter(ContainerRequestContext requestContext) throws IOException {
+            UriInfo ui = mc.getUriInfo();
+            if (ui.getPath().endsWith("api-docs")) {
+                Response r = 
+                    apiListingResource.apiDeclaration("", null, mc.getServletConfig(), mc.getHttpHeaders(), ui);
+                requestContext.abortWith(r);
+            }
+        }
+        
+    }
 }