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)