Reputation: 14337
I followed the step to add Swagger to my already built Jersey REST API project in TOMCAT
swagger-annotations-1.3.10.jar swagger-core_2.10-1.3.10.jar swagger-jaxrs_2.10-1.3.10.jar swagger-jersey2-jaxrs_2.10-1.3.10.jar
Added in web.xml
contextClass org.springframework.web.context.support.AnnotationConfigWebApplicationContext contextConfigLocation com.estartup.config.PersistenceConfig
<!-- Bootstrap the root application context as usual using ContextLoaderListener -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.estartup.config.Application</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-servlet</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Jersey2Config</servlet-name>
<servlet-class>com.wordnik.swagger.jersey.config.JerseyJaxrsConfig</servlet-class>
<init-param>
<param-name>api.version</param-name>
<param-value>1.0.0</param-value>
</init-param>
<init-param>
<param-name>swagger.api.basepath</param-name>
<param-value>http://localhost:8080/api</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
Application class:
public class Application extends ResourceConfig {
@Inject
public Application(ServiceLocator serviceLocator) {
register(new ServiceBinder());
register(com.estartup.feature.JacksonFeature.class);
packages(true, "com.estartup", "com.wordnik.swagger.jaxrs.json","com.wordnik.swagger.jersey.listing");
}
}
However, when I navigate to
http://localhost:8080/api/api-docs
I get HTTP Status 404 - page not found.
:(. In the logs I do see that swagger is being loaded like this: What is wrong?
15935 DEBUG [localhost-startStop-1] com.wordnik.swagger.jaxrs.config.WebXMLReader - set api.version to 1.0.0
15935 DEBUG [localhost-startStop-1] com.wordnik.swagger.jaxrs.config.WebXMLReader - set swagger.api.basepath to http://localhost:8080/api
Upvotes: 1
Views: 5795
Reputation: 628
Try this configuration:
pom.xml
:
...
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jersey2-jaxrs</artifactId>
<version>1.5.0</version>
</dependency>
...
web.xml
:
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>ProjectName</display-name>
<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>your.package.name.YourApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-servlet</servlet-name>
<url-pattern>/rs/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>SwaggerBootstrap</servlet-name>
<servlet-class>your.package.name.SwaggerApplication</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
</web-app>
SwaggerApplication.java
:
public class SwaggerApplication extends HttpServlet {
private static final long serialVersionUID = -6039834823506457822L;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
BeanConfig beanConfig = new BeanConfig();
final String contextPath = config.getServletContext().getContextPath();
final StringBuilder sbBasePath = new StringBuilder();
sbBasePath.append(contextPath);
sbBasePath.append("/rs");
beanConfig.setBasePath(sbBasePath.toString());
// API Info
beanConfig.setVersion("0.1");
beanConfig.setTitle("My Swagger APP");
beanConfig.setResourcePackage("your.package.name");
beanConfig.setScan(true);
}
}
To access your Swagger JSON: http://<your-app>/<your-context>/rs/swagger.json
Upvotes: 3
Reputation: 14840
Based on your comment, if your application is deployed on Tomcat, than that's most likely the wrong URL.
Say the context root of your application is myapp
, then your API itself will be deployed available on http://localhost:8080/myapp/api/...
and the same way, the swagger docs would be available on http://localhost:8080/myapp/api/api-docs
.
Upvotes: 1