Hello,
I'm trying to add swagger to my little rest service but having some problems getting swagger UI to come up. I've managed to get this working in the past with swagger 1.3 on other projects (we use swagger at work), but wanted to use the latest version for myself.
Instead of just copying/pasting the code, I figured it would be easier to share it, maybe someone is noticing something I'm missing/configured incorrectly.
https://github.com/Logikz/echo-nest-ws/tree/feature/swagger
I'm able to run this and see swagger.json just fine, I just can't get the UI to come up no matter how I choose to configure my context paths and such.
I suppose if you don't want to skim the code, here's the juicy bits:
private static Handler getSwaggerHandler() throws URISyntaxException {
// Create servlet for the UI
URL swaggerUi = Resources.getResource( Main.class, "webapp" );
Resource urlResource = URLResource.newResource( swaggerUi );
ResourceHandler swaggerUIHandler = new ResourceHandler();
swaggerUIHandler.setDirectoriesListed( true );
swaggerUIHandler.setBaseResource( urlResource );
swaggerUIHandler.setWelcomeFiles( new String[]{ "index.html" } );
ContextHandler context = new ContextHandler("/swagger");
context.setHandler( swaggerUIHandler );
return context;
}
private static Handler getRestHandler() {
ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.packages( NestResources.class.getPackage().getName(), ApiListingResource.class.getPackage()
.getName() );
ServletContainer container = new ServletContainer( resourceConfig );
ServletHolder holder = new ServletHolder( container );
ServletContextHandler context = new ServletContextHandler( ServletContextHandler.SESSIONS );
context.setContextPath( "/" );
context.addServlet( holder, "/api/v1/*" );
// Open CORS filter
FilterHolder filter = new FilterHolder();
filter.setInitParameter("allowedOrigins", "*");
filter.setInitParameter("allowedMethods", "POST,GET,OPTIONS,PUT,DELETE,HEAD");
filter.setInitParameter("allowedHeaders", "*");
filter.setInitParameter("allowCredentials", "true");
filter.setFilter( new CrossOriginFilter() );
context.addFilter( filter, "/*", EnumSet.of( DispatcherType.ASYNC, DispatcherType.REQUEST, DispatcherType.ERROR, DispatcherType.INCLUDE ) );
//auto load swagger ui
ServletHolder pathHolder = new ServletHolder(new SwaggerDocsServlet("/api/v1"));
context.addServlet( pathHolder, SwaggerDocsServlet.PATH_SERVLET_ENDPOINT );
return context;
}
Thanks,
Nick