Matt Raible created CAMEL-7878:
----------------------------------

             Summary: Swagger's base.path should be calculated rather than 
hardcoded
                 Key: CAMEL-7878
                 URL: https://issues.apache.org/jira/browse/CAMEL-7878
             Project: Camel
          Issue Type: Improvement
          Components: camel-swagger
    Affects Versions: 2.14.0
            Reporter: Matt Raible


The "base.path" has to be configured or calling the methods by clicking on 
buttons in Swagger UI doesn't work. With Spring Boot, I'm able to configure 
Swagger with the following: 

{code}
@Configuration 
@EnableSwagger 
public class SwaggerConfig implements EnvironmentAware { 
        public static final String DEFAULT_INCLUDE_PATTERN = "/api/.*"; 

        private RelaxedPropertyResolver propertyResolver; 

        @Override 
        public void setEnvironment(Environment environment) { 
                this.propertyResolver = new 
RelaxedPropertyResolver(environment, "swagger."); 
        } 

        /** 
         * Swagger Spring MVC configuration 
         */ 
        @Bean 
        public SwaggerSpringMvcPlugin 
swaggerSpringMvcPlugin(SpringSwaggerConfig springSwaggerConfig) { 
                return new SwaggerSpringMvcPlugin(springSwaggerConfig) 
                                .apiInfo(apiInfo()) 
                                .genericModelSubstitutes(ResponseEntity.class) 
                                .includePatterns(DEFAULT_INCLUDE_PATTERN); 
        } 

        /** 
         * API Info as it appears on the swagger-ui page 
         */ 
        private ApiInfo apiInfo() { 
                return new ApiInfo( 
                                propertyResolver.getProperty("title"), 
                                propertyResolver.getProperty("description"), 
                                
propertyResolver.getProperty("termsOfServiceUrl"), 
                                propertyResolver.getProperty("contact"), 
                                propertyResolver.getProperty("license"), 
                                propertyResolver.getProperty("licenseUrl")); 
        } 
} 
{code}

With Camel, it's a bit less code, but if I don't override the "base.path", it 
defaults to localhost:8080. The Spring MVC Swagger implementation figures out 
the correct base path on its own. 

{code}
        /** 
         * Swagger Camel Configuration 
         */ 
        @Bean 
        public ServletRegistrationBean swaggerServlet() { 
                ServletRegistrationBean swagger = new 
ServletRegistrationBean(new SpringRestSwaggerApiDeclarationServlet(), 
"/swagger/*"); 
                Map<String, String> params = new HashMap<>(); 
                params.put("base.path", "https://localhost:8443/rest";); 
                params.put("api.title", propertyResolver.getProperty("title")); 
                params.put("api.description", 
propertyResolver.getProperty("description")); 
                params.put("api.termsOfServiceUrl", 
propertyResolver.getProperty("termsOfServiceUrl")); 
                params.put("api.version", 
propertyResolver.getProperty("version")); 
                params.put("api.license", 
propertyResolver.getProperty("license")); 
                params.put("api.licenseUrl", 
propertyResolver.getProperty("licenseUrl")); 
                swagger.setInitParameters(params); 
                return swagger; 
        } 
{code}

Is it possible to improve the SpringRestSwaggerApiDeclarationServlet so it gets 
the path from CamelServlet and it doesn't have to be hardcoded? 

Mailing list thread: 
http://camel.465427.n5.nabble.com/Camel-s-Swagger-vs-Spring-MVC-Swagger-td5757023.html



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to