Return-Path: X-Original-To: apmail-cxf-commits-archive@www.apache.org Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 7D94719409 for ; Wed, 16 Mar 2016 15:40:12 +0000 (UTC) Received: (qmail 76708 invoked by uid 500); 16 Mar 2016 15:40:12 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 76642 invoked by uid 500); 16 Mar 2016 15:40:12 -0000 Mailing-List: contact commits-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list commits@cxf.apache.org Received: (qmail 76633 invoked by uid 99); 16 Mar 2016 15:40:12 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 16 Mar 2016 15:40:12 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 0DE4CDFBD5; Wed, 16 Mar 2016 15:40:12 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: ilgrosso@apache.org To: commits@cxf.apache.org Date: Wed, 16 Mar 2016 15:40:12 -0000 Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: [1/2] cxf git commit: Several Swagger-related improvements: swagger-jaxrs upgraded to 1.5.8, now working properly even as filter, prepared Swagger2Feature for extension Repository: cxf Updated Branches: refs/heads/3.0.x-fixes 0afa9d25d -> e515c1365 refs/heads/master bafe76605 -> 7098ccba6 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/7098ccba Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/7098ccba Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/7098ccba Branch: refs/heads/master Commit: 7098ccba6b70f911fa7056979b94324fe6104522 Parents: bafe766 Author: Francesco Chicchiriccò Authored: Wed Mar 16 16:09:17 2016 +0100 Committer: Francesco Chicchiriccò Committed: Wed Mar 16 16:18:35 2016 +0100 ---------------------------------------------------------------------- parent/pom.xml | 2 +- .../cxf/jaxrs/swagger/Swagger2Feature.java | 82 ++++++++++++-------- .../cxf/jaxrs/swagger/Swagger2Serializers.java | 10 +-- 3 files changed, 55 insertions(+), 39 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/7098ccba/parent/pom.xml ---------------------------------------------------------------------- diff --git a/parent/pom.xml b/parent/pom.xml index 0815e51..864df71 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -148,7 +148,7 @@ 1.3.1.RELEASE spring-test 1.3.13 - 1.5.4 + 1.5.8 1.7 4.4.1 3.1.4 http://git-wip-us.apache.org/repos/asf/cxf/blob/7098ccba/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 5072104..bc9102f 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; @@ -46,6 +47,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; @@ -55,6 +57,12 @@ import io.swagger.jaxrs.listing.ApiListingResource; @Provider(Type.Feature) public class Swagger2Feature extends AbstractSwaggerFeature { + protected boolean dynamicBasePath; + + protected boolean replaceTags; + + protected DocumentationProvider javadocProvider; + private String host; private String[] schemes; @@ -65,33 +73,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 cris = Collections.emptyList(); - if (!runAsFilter) { - List serviceBeans = new ArrayList<>(); - 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.singletonList(apiListingResource)); + List cris = sfb.getClassResourceInfo(); + + List providers = new ArrayList<>(); + 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 providers = new ArrayList<>(); - if (runAsFilter) { - providers.add(new SwaggerContainerRequestFilter()); - } providers.add(new Swagger2Serializers(dynamicBasePath, replaceTags, javadocProvider, cris)); providers.add(new ReaderConfigFilter()); ((ServerProviderFactory) server.getEndpoint().get( @@ -187,32 +186,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 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 { @@ -227,7 +243,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/7098ccba/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 187ea96..e6f7be2 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 cris; + protected final List cris; public Swagger2Serializers( final boolean dynamicBasePath, @@ -145,7 +145,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, "/");