JAX-RS (using Apache CXF) in embedded Tomcat example
I had serious trouble today firing up an embedded Tomcat server that serves up REST resources using JAX-RS via Apache CXF.
Here's minimal example, hopefully saving you the same trouble:
src/HelloJaxRs.java:
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.Context;
import org.apache.catalina.Wrapper;
public class HelloJaxRs
{
public static void main( String[] args ) throws Exception
{
Tomcat tomcat = new Tomcat();
Context context = tomcat.addContext( "/", "" );
Wrapper servlet = context.createWrapper();
servlet.setName( "jaxrs" );
servlet.setServletClass(
"org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet" );
servlet.addInitParameter(
"jaxrs.serviceClasses",
Hello.class.getName()
);
servlet.setLoadOnStartup( 1 );
context.addChild( servlet );
context.addServletMapping( "/rest/*", "jaxrs" );
tomcat.start();
tomcat.getServer().await();
}
}
src/Hello.java:
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
@Path( "/hello/{name}" )
public class Hello
{
@GET
public String getThing( @PathParam( "name" ) String name )
{
return "Hello, " + name;
}
}
build.xml:
To download the dependencies (or you can do something clever with Maven):
$ mkdir lib $ cd lib $ wget http://www.webhostingjams.com/mirror/apache/tomcat/tomcat-7/v7.0.57/bin/apache-tomcat-7.0.57.tar.gz $ tar -xzf apache-tomcat-7.0.57.tar.gz $ wget http://www.apache.org/dyn/closer.cgi?path=/cxf/3.0.3/apache-cxf-3.0.3.tar.gz $ tar -xzf apache-cxf-3.0.3.tar.gz $ cd ..
To run Tomcat:
$ ant
Then, in another terminal, you can see it's working:
$ curl http://localhost:8080/rest/hello/andy Hello, andy
Originally posted at 2015-01-13 17:24:02+00:00. Automatically generated from the original post : apologies for the errors introduced.