Setting up Swagger in Apache CXF (JAX-RS) Using Maven

1,167 views
Skip to first unread message

Austin O'Donoghue

unread,
Nov 2, 2015, 2:58:19 PM11/2/15
to Swagger
Hi all,

I have been trying for the past week or so to get Swagger to work in my Apache CXF JAX-RS with Maven project and have not met any success.

When I run:

mvn tomcat7:run-war


Then try to access:

http://localhost:13000/jaxrs-service/api-doc

I see the following error:

WARNING: No operation matching request path "/jaxrs-service/api-doc" is found, Relative Path: /api-doc, HTTP Method: GET, ContentType: */*, Accept: text/html,application/xhtml+xml,image/webp,application/xml;q=0.9,*/*;q=0.8,. Please enable FINE/TRACE log level for more details.

Nov 02, 2015 2:51:58 PM org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper toResponse

WARNING: javax.ws.rs.ClientErrorException: HTTP 404 Not Found
 at org.apache.cxf.jaxrs.utils.SpecExceptions.toHttpException(SpecExceptions.java:117)
 at org.apache.cxf.jaxrs.utils.ExceptionUtils.toHttpException(ExceptionUtils.java:162)
 at org.apache.cxf.jaxrs.utils.JAXRSUtils.findTargetMethod(JAXRSUtils.java:528)
 at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:177)
 at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:77)
 at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
 at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
 at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:251)
 at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)
 at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208)
 at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)
 at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
 at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:293)
 at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:217)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
 at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:268)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
 at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
 at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
 at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
 at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
 at java.lang.Thread.run(Thread.java:745)


I have attached my Pom.xml, Web.xml, and Beans.xml. Below is a sample of my API annotated for Swagger.
  
@Path("/")
@Api(value="/", description="VenturoSoft eMustering Services")
public class Service {
 
final static Logger logger = Logger.getLogger(Service.class);
   
@GET
   
@Path("/echo/{input}")
   
@Produces(MediaType.TEXT_PLAIN_VALUE)
   
@Consumes(MediaType.TEXT_PLAIN_VALUE)
   
@ApiOperation(value = "Get Ping", response = String.class)
   
public static String ping(@PathParam("input") String input) {
   
return PingImpl.ping(input);
   
}
}


Any help would be greatly appreciated.  
pom.xml
beans.xml
web.xml

Aki Yoshida

unread,
Nov 3, 2015, 8:00:56 AM11/3/15
to swagger-sw...@googlegroups.com
i don't see where you are activating swagger and that is probably the
reason why it is not working.

the simplest way in activating swagger in cxf is to use cxf's swagger
feature which takes care of adding swagger filters.
there are a couple of samples included in the cxf's distribution.
you can also find them online at
https://github.com/apache/cxf/tree/master/distribution/src/main/release/samples/jax_rs
description_swagger - using swagger 1.3
description_swagger2 - using swagger 1.5.4 in plain jetty setup
description_swagger2_web - using swagger 1.5.4 using spring with tomcat
description_swagger2_osgi - using swagger 1.5.4 on karaf osgi runtime
> --
> You received this message because you are subscribed to the Google Groups
> "Swagger" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to swagger-swaggers...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages