Deploying Jersey to JBOSS

I spent the afternoon playing around with Jersey in JBOSS. Jersey is a Java API for publishing REST web-services, and JBOSS is the application server we use at work. Not finding any particularly helpful tutorials, I muddled my way through. Lucky for you, I have distilled the required steps here.

The first step is to create a Java class with the method you would like to invoke via a REST call. Here is what I came up with:

package com.bitkickers;

import java.util.Map;
import javax.ws.rs.*;

@Path("JerseyServices")
public class JerseyServices {

 @GET
 @Produces({"text/plain"})
 @Path("/helloWorld") 
 public String helloWorld(@QueryParam("name") String name) {
  return String.format("Hello, %s", name);
 } 
  
}

The annotations include @Path("JerseyServices"), which defines a path relative to the web context to serve all of the methods in this class from. @GET, tells Jersey to attach to HTTP GET requests for this method. @Path("/helloWorld") and @QueryParam("name") combine to define the whole relative URL as "/JerseyServices/helloWorld?name=Chase" to call this method with the parameter name set to "Chase".

The web.xml to tie in the Jersey servlet looks like the following:

<?xml version="1.0" encoding="ISO-8859-1"?>
<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_2_5.xsd"
    version="2.5">

    <display-name>Jersey API Skunkworks</display-name>

    <servlet>
        <servlet-name>JerseyAPI</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>        
  <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.bitkickers</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>JerseyAPI</servlet-name>
        <url-pattern>/api/*</url-pattern>
    </servlet-mapping> 

</web-app>

The parameter "com.sun.jersey.config.property.packages" tells "ServletContainer" to scan for any classes annotated with @Path in the package "com.bitkickers", recursively. The servlet mapping tells the servlet to attach to the URL "/api".

Finally, the jboss-web.xml just sets the root context to "jersey":

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 2.4//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_4_2.dtd">
<jboss-web>

    <context-root>jersey</context-root>
 
</jboss-web>

All together, the URL to invoke this REST call becomes "http://localhost:8080/jersey/api/JerseyServices/helloWorld?name=Chase".

Also included in the download is an ANT file to build the WAR, and an HTML file that uses jQuery to invoke the REST service.

Tags:

Updated: