Repository: incubator-geode Updated Branches: refs/heads/feature/GEODE-1983 9fab238fd -> 8edb2e987
GEODE-2014: Upgrade Swagger libraries This closes #265 Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/8edb2e98 Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/8edb2e98 Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/8edb2e98 Branch: refs/heads/feature/GEODE-1983 Commit: 8edb2e987503fc44d8293ee0327cdfbd417f667c Parents: 9fab238 Author: Kevin Duling <[email protected]> Authored: Tue Oct 18 15:54:55 2016 -0700 Committer: Kirk Lund <[email protected]> Committed: Wed Oct 19 09:28:23 2016 -0700 ---------------------------------------------------------------------- .../web/RestSecurityIntegrationTest.java | 2 +- .../web/swagger/config/RestApiPathProvider.java | 67 ++++++++++++++------ .../web/swagger/config/SwaggerConfig.java | 53 ++++++---------- gradle/dependency-versions.properties | 4 +- 4 files changed, 72 insertions(+), 54 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8edb2e98/geode-assembly/src/test/java/org/apache/geode/rest/internal/web/RestSecurityIntegrationTest.java ---------------------------------------------------------------------- diff --git a/geode-assembly/src/test/java/org/apache/geode/rest/internal/web/RestSecurityIntegrationTest.java b/geode-assembly/src/test/java/org/apache/geode/rest/internal/web/RestSecurityIntegrationTest.java index 6e91894..fd811d2 100644 --- a/geode-assembly/src/test/java/org/apache/geode/rest/internal/web/RestSecurityIntegrationTest.java +++ b/geode-assembly/src/test/java/org/apache/geode/rest/internal/web/RestSecurityIntegrationTest.java @@ -94,7 +94,7 @@ public class RestSecurityIntegrationTest { @Test public void testFunctions() throws Exception { String json = "{\"@type\":\"double\",\"@value\":210}"; - + Thread.sleep(500000); HttpResponse response = doGet("/functions", "unknown-user", "1234567"); assertEquals(401, getCode(response)); response = doGet("/functions", "stranger", "1234567"); http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8edb2e98/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/swagger/config/RestApiPathProvider.java ---------------------------------------------------------------------- diff --git a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/swagger/config/RestApiPathProvider.java b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/swagger/config/RestApiPathProvider.java index f232c96..8c81f21 100644 --- a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/swagger/config/RestApiPathProvider.java +++ b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/swagger/config/RestApiPathProvider.java @@ -16,20 +16,21 @@ */ package org.apache.geode.rest.internal.web.swagger.config; -import org.apache.geode.distributed.internal.DistributionConfig; -import org.apache.geode.distributed.internal.InternalDistributedSystem; -import org.apache.geode.internal.net.SocketCreator; -import org.apache.geode.internal.lang.StringUtils; -import com.mangofactory.swagger.core.SwaggerPathProvider; +import java.net.UnknownHostException; + +import javax.servlet.ServletContext; + +import com.mangofactory.swagger.paths.SwaggerPathProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.Assert; -import org.springframework.web.util.UriComponentsBuilder; -import javax.servlet.ServletContext; -import java.net.UnknownHostException; +import org.apache.geode.distributed.internal.DistributionConfig; +import org.apache.geode.distributed.internal.InternalDistributedSystem; +import org.apache.geode.internal.lang.StringUtils; +import org.apache.geode.internal.net.SocketCreator; @SuppressWarnings("unused") -public class RestApiPathProvider implements SwaggerPathProvider { +public class RestApiPathProvider extends SwaggerPathProvider { @Autowired private ServletContext servletContext; @@ -74,22 +75,50 @@ public class RestApiPathProvider implements SwaggerPathProvider { return defaultPathProvider.getApiResourcePrefix(); } + /** + * For relative SwaggerPathProviders this is typically '/' meaning relative to the swagger ui page serving the + * documentation. The swagger specification recommends that this should be an absolute URL. + * <p> + * Corresponds to the base path attribute of a swagger api declaration. + * This is the actual base path serving the api (not the swagger documentation) + * @return the applications base uri + */ @Override - public String getAppBasePath() { - return UriComponentsBuilder.fromHttpUrl(docsLocation) - .path(servletContext.getContextPath()).build().toString(); + protected String applicationPath() { + return null; } + /** + * The base path to the swagger api documentation. + * <p> + * Typically docs are served from <yourApp>/api-docs so a relative resourceListing path will omit the api-docs + * segment. + * E.g. + * Relative: "path": "/" + * Absolute: "path": "http://localhost:8080/api-docs" + * @return the documentation base path + */ @Override - public String getSwaggerDocumentationBasePath() { - return UriComponentsBuilder.fromHttpUrl(getAppBasePath()) - .pathSegment("api-docs/").build().toString(); + protected String getDocumentationPath() { + return null; } - @Override - public String getRequestMappingEndpoint(String requestMappingPattern) { - return defaultPathProvider.getRequestMappingEndpoint(requestMappingPattern); - } + // @Override + // public String getAppBasePath() { + // return UriComponentsBuilder.fromHttpUrl(docsLocation) + // .path(servletContext.getContextPath()).build().toString(); + // } + // + // @Override + // public String getSwaggerDocumentationBasePath() { + // return UriComponentsBuilder.fromHttpUrl(getAppBasePath()) + // .pathSegment("api-docs/").build().toString(); + // } + // + // @Override + // public String getRequestMappingEndpoint(String requestMappingPattern) { + // return defaultPathProvider.getRequestMappingEndpoint(requestMappingPattern); + // } public void setDefaultPathProvider( final SwaggerPathProvider defaultSwaggerPathProvider) { http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8edb2e98/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/swagger/config/SwaggerConfig.java ---------------------------------------------------------------------- diff --git a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/swagger/config/SwaggerConfig.java b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/swagger/config/SwaggerConfig.java index 42578ba..33a96b3 100644 --- a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/swagger/config/SwaggerConfig.java +++ b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/swagger/config/SwaggerConfig.java @@ -20,22 +20,21 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import org.apache.geode.internal.i18n.LocalizedStrings; -import com.mangofactory.swagger.configuration.JacksonScalaSupport; import com.mangofactory.swagger.configuration.SpringSwaggerConfig; -import com.mangofactory.swagger.configuration.SpringSwaggerModelConfig; import com.mangofactory.swagger.configuration.SwaggerGlobalSettings; import com.mangofactory.swagger.core.SwaggerApiResourceListing; +import com.mangofactory.swagger.models.dto.ApiInfo; +import com.mangofactory.swagger.models.dto.AuthorizationType; +import com.mangofactory.swagger.plugin.SwaggerSpringMvcPlugin; import com.mangofactory.swagger.scanners.ApiListingReferenceScanner; -import com.wordnik.swagger.model.ApiInfo; -import com.wordnik.swagger.model.AuthorizationType; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.apache.geode.internal.i18n.LocalizedStrings; + @Configuration @ComponentScan(basePackages = "com.mangofactory.swagger") @SuppressWarnings("unused") @@ -44,17 +43,26 @@ public class SwaggerConfig { protected static final List<String> DEFAULT_INCLUDE_PATTERNS = Arrays .asList("/.*"); - protected static final String SWAGGER_GROUP = "gemfireApi"; + protected static final String SWAGGER_GROUP = "apacheGeode"; @Autowired private SpringSwaggerConfig springSwaggerConfig; - @Autowired - private SpringSwaggerModelConfig springSwaggerModelConfig; - @Value("${app.docs}") private String docsLocation; + @SuppressWarnings("SpringJavaAutowiringInspection") + @Autowired + public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) { + this.springSwaggerConfig = springSwaggerConfig; + } + + @Bean + public SwaggerSpringMvcPlugin customImplementation() { + + return new SwaggerSpringMvcPlugin(this.springSwaggerConfig).apiInfo(apiInfo()); + } + /** * API Info as it appears on the Swagger-UI page */ @@ -69,20 +77,6 @@ public class SwaggerConfig { } /** - * Adds the Jackson Scala module to the MappingJackson2HttpMessageConverter - * registered with Spring. Swagger core models are Scala so we need to be able - * to convert to JSON. Also registers some custom serializers needed to - * transform Swagger models to Swagger-UI required JSON format. - */ - @Bean - public JacksonScalaSupport jacksonScalaSupport() { - JacksonScalaSupport jacksonScalaSupport = new JacksonScalaSupport(); - // set to false to disable - jacksonScalaSupport.setRegisterScalaModule(true); - return jacksonScalaSupport; - } - - /** * Configure a SwaggerApiResourceListing for each Swagger instance within your * app. e.g. 1. private 2. external APIs 3. ..., required to be a Spring bean * as Spring will call the postConstruct method to bootstrap Swagger scanning. @@ -93,8 +87,7 @@ public class SwaggerConfig { // ApiListingReferenceScanner // Note that swaggerCache() is by DefaultSwaggerController to serve the // Swagger JSON - SwaggerApiResourceListing swaggerApiResourceListing = new SwaggerApiResourceListing( - springSwaggerConfig.swaggerCache(), SWAGGER_GROUP); + SwaggerApiResourceListing swaggerApiResourceListing = new SwaggerApiResourceListing(springSwaggerConfig.swaggerCache(), SWAGGER_GROUP); // set required Swagger settings swaggerApiResourceListing.setSwaggerGlobalSettings(swaggerGlobalSettings()); @@ -108,12 +101,10 @@ public class SwaggerConfig { // every SwaggerApiResourceListing needs an ApiListingReferenceScanner to // scan the Spring RequestMappings - swaggerApiResourceListing - .setApiListingReferenceScanner(apiListingReferenceScanner()); + swaggerApiResourceListing.setApiListingReferenceScanner(apiListingReferenceScanner()); // global authorization - see the Swagger documentation - swaggerApiResourceListing.setAuthorizationTypes(Collections - .<AuthorizationType> emptyList()); + swaggerApiResourceListing.setAuthorizationTypes(Collections.<AuthorizationType>emptyList()); return swaggerApiResourceListing; } @@ -128,8 +119,6 @@ public class SwaggerConfig { .defaultResponseMessages()); swaggerGlobalSettings.setIgnorableParameterTypes(springSwaggerConfig .defaultIgnorableParameterTypes()); - swaggerGlobalSettings.setParameterDataTypes(springSwaggerModelConfig - .defaultParameterDataTypes()); return swaggerGlobalSettings; } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8edb2e98/gradle/dependency-versions.properties ---------------------------------------------------------------------- diff --git a/gradle/dependency-versions.properties b/gradle/dependency-versions.properties index 50af2aa..a4caa34 100644 --- a/gradle/dependency-versions.properties +++ b/gradle/dependency-versions.properties @@ -100,8 +100,8 @@ spring-tx.version = 4.3.2.RELEASE springframework.version = 4.3.2.RELEASE stephenc-findbugs.version = 1.3.9-1 spymemcached.version = 2.9.0 -swagger.version = 1.3.2 -swagger-springmvc.version = 0.8.2 +swagger.version=1.3.13 +swagger-springmvc.version=1.0.2 system-rules.version = 1.16.0 tempus-fugit.version = 1.1 tomcat6.version = 6.0.37
