Saturday, December 14, 2013

[Java] JAX-RS Example

This is a simple example of creating Web Service using JAX-RS.

The following are the requirements for this example to work:
   a. Apache Tomcat 6 - this sample code was tested using version 6.
   b. Java 1.5 or higher
   c. Eclipse - Kepler version was used to code this example.
   c. Knowledge of XML, WSDL and SOAP.

Step 1: Create Web Service.

a. Create WebService Dynamic Web project.

i.e. jaxrsexample

b. Create a class that returns plain text, xml, html and json message. 


import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import net.sf.json.JSONObject;

@Path("/jaxrsservice")

public class HelloJAXRSService 
{

   @GET

   @Path("/{param}")
   @Produces(MediaType.TEXT_PLAIN)
   public Response getMsg(@PathParam("param") String name) 
   {
      String str =  "Hello " + name;
      return Response.status(200).entity(str).build();
   }

   @GET

   @Produces(MediaType.TEXT_XML)
   public String sayXMLHello() 
   {
      return "<?xml version=\"1.0\"?>" + "<hello> Hello Robin" + "</hello>";
   }

   @GET

   @Produces(MediaType.TEXT_HTML)
   public String sayHtmlHello() 
   {
      return "<html> " + "<title>" + "Hello Robin" + "</title>"
         + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
   }


   @GET

   @Produces(MediaType.APPLICATION_JSON)
   public String sayJSONHello()
   {
      JSONObject json = new JSONObject();
       List<String> list = new ArrayList<String>();
       list.add("Sunday");
       list.add("Monday");
       list.add("Tuesday");
         
       json.accumulate("weekdays", list);
        
       return json.toString();
   }

}//end class



c. Update web.xml file.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">

<web-app>

   
    <servlet>
        <servlet-name>jersey-serlvet</servlet-name>
        <servlet-class>
        com.sun.jersey.spi.container.servlet.ServletContainer
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
  
</web-app>

c. Export jaxrsexample as WAR file. You can save it directly to Apache Tomcat webapps folder.

i.e. jaxrsexample.war



d. Start Tomcat server.




Step 2: Create Client.


a. Generate client classes using ws import:

wsimport -keep -verbose <WSDL url here>

b. Create client class using wsimport generated classes:


import java.net.URI;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;

public class HelloTraineeClient 

{

 private static URI getBaseURI(){
  return UriBuilder.fromUri(
         "http://localhost:8080/WebService").build();

 }


 public static void main(String[] args)
{
  ClientConfig config = new DefaultClientConfig();
  Client client = Client.create(config);
  WebResource service = client.resource(getBaseURI());
   
  //XML
  System.out.println("XML :" + service.path("rest").path("hellotrainee").accept(MediaType.TEXT_XML).get(String.class));

  //HTML

  System.out.println("\nHTML :" + service.path("rest").path("hellotrainee").accept(MediaType.TEXT_HTML).get(String.class));

   //JSON    

   System.out.println("\nJSON : " + service.path("rest").path("hellotrainee").accept(MediaType.APPLICATION_JSON).get(String.class));

 }

   
 
}//end class



c. Run the Client class.

That's it!

Note : You can use SOAPUI for quick testing.


No comments:

Post a Comment