Jars Required:
1.       
asm-all-3.3.1.jar
2.       
commons-codec.jar
3.       
commons-httpclient.jar
4.       
commons-logging.jar
5.       
jersey-bundle-1.14.jar
6.       
json-simple.jar
 
Tools Required:
1.       
Eclipse
2.       
Any
webserver/application server
3.     JDK 1.7
References:
http://rest.elkstein.org/
Restful service:
REST (Representational state Transfer) is an
architectural style which is based on WEB standards and the HTTP protocol.
It relies on a 
a.       
Stateless
b.       
client-server
c.       
Cacheable
communications protocol.
As a programming approach
REST is light weight alternative to web service (SOAP) and RPC.
Features:
1.       
Data which is retrieved
from the server is known as resource.
2.       
Resources identified
over the network by URI.
3.       
Bounded by
standard protocol HTTP.
4.       
It’s a stateless
and simple
5.       
Request response represented
in JSON/XML/TEXT etc.
 
REST sample:
Server side implementation:
Class: WebServices.java
Using annotation
@Path (“/WebServices”) in below code we are just saying this is class needs to
looked up for the request http://localhost:8080/Restwebservice/webservice. Annotation @Get used for querying the
resource. A method level annotation @Path (“hello”) used to identify the resource
and URI for this http://localhost:8080/Restwebservice/webservice/hello. Annotation @Produces("application/json") used for specifying the response type. 
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; 
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import
javax.ws.rs.QueryParam; 
@Path("/webservice")
public class WebServices { 
        private static Map<String,
Employee> employees = new HashMap<String, Employee>();
        @GET
        @Path("/hello")
        @Produces("application/json")
        public List<Heloo>
hello() { 
                Map
hellomap = new HashMap();
                Heloo
h = new Heloo();
                h.setLname("Savadi");
                h.setName("Prashant");
                hellomap.put("1", h);
                Heloo
h1 = new Heloo();
                h1.setLname("Savadi");
                h1.setName("Sushant");
                hellomap.put("2", h1);
                return new
ArrayList<Heloo>(hellomap.values());
        }
        @GET
        @Path("/message")
        @Produces("text/plain")
        public String showMsg(@QueryParam("message") String message) {
                return message;
        }
        @GET
        @Path("/employees")
        @Produces("application/xml")
        public List<Employee>
listEmployees() {
                return new
ArrayList<Employee>(employees.values());
        }
        @GET
        @Path("/employee/{employeeid}")
        @Produces("application/xml")
        public Employee getEmployee(@PathParam("employeeid") String employeeId) {
                return employees.get(employeeId);
        }
        @GET
        @Path("/json/employees/")
        @Produces("application/json")
        public Map
listEmployeesJSON() {
                return  employees;
        }
        @GET
        @Path("/json/employee/{employeeid}")
        @Produces("application/json")
        public Employee
getEmployeeJSON(@PathParam("employeeid") String employeeId) {
                return employees.get(employeeId);
        } 
}
Class: Heloo.java
This is model
class used for returning the data.
import
javax.xml.bind.annotation.XmlElement;
import
javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "heloo")
public class Heloo {
        private String name;
        private String lname;
        @XmlElement
        public String getName() {
                return name;
        }
        public void setName(String name)
{
                this.name = name;
        }
        @XmlElement
        public String getLname() {
                return lname;
        }     
        public void setLname(String
lname) {
                this.lname = lname;
        }
}
WEB.xml file entry for servlet
registration:
REST is implemented by jersey API. Need jersey
servlet entry in the server wheel. 
<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>/*</url-pattern>
 </servlet-mapping>
 
Client:
 
 
Using below client we can access the resources from server (cleint/server architecture) using URI :http://localhost:9084/Rest/webservice/hello.
Here response us JSON format and JSON data can be handled by simple-Json API. 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import
org.json.simple.JSONArray;
import
org.json.simple.JSONObject;
import
org.json.simple.parser.JSONParser;
import
com.sun.jersey.api.client.Client;
import
com.sun.jersey.api.client.ClientResponse;
import
com.sun.jersey.api.client.WebResource;
public class RestWebServiceClient
{ 
       /**
        * @param args
        */
       public static void main(String[] args)
{
              RestWebServiceClient
restWebServiceClient = new RestWebServiceClient();
              restWebServiceClient.sayHello();
              //
restWebServiceClient.getJSONEmployees();
              /*
               *
restWebServiceClient.getMessage("Welcome");
               * restWebServiceClient.getXMLEmployees();
               * restWebServiceClient.getXMLEmployee(11111);
               * restWebServiceClient.getJSONEmployees();
               * restWebServiceClient.getJSONEmployee(11111);
               */
       }
       private void sayHello() {
              try {
                     Client
client = Client.create();
                     WebResource
webResource = client
                                  .resource("http://localhost:9084/Rest/webservice/hello");
                     ClientResponse
response = webResource.accept("application/json")
                                  .get(ClientResponse.class);
                     if
(response.getStatus() != 200) {
                           throw new RuntimeException("Failed : HTTP
error code : "
                                         +
response.getStatus());
                     } 
                     String
output = response.getEntity(String.class);
                     System.out.println("\n============getResponse============");
                     Object
p = new
JSONParser().parse(output);
                     JSONObject
array = (JSONObject) p;
                     JSONArray
jarray = (JSONArray) array.get("heloo");
                     Heloo
h=null;
                     List
list = new ArrayList();                    
                     Iterator
it = jarray.iterator();
                     while (it.hasNext()) {
                           h=
new Heloo();
                           JSONObject
obj=((JSONObject) it.next());
                           System.out.println(obj.get("name"));
                           System.out.println(obj.get("lname"));
                           h.setName(obj.get("name")+"");
                           h.setLname(obj.get("lname")+"");
                           list.add(h);                    
                           
                     }
                      System.out.println(list.toString());
              }
catch (Exception e) {
                     e.printStackTrace();
              }
       }
       private void getMessage(String
msg) {
              try {
                     Client
client = Client.create();
                     WebResource
webResource = client
                                  .resource("http://localhost:8080/Restwebservice/webservice/message/"
                                                +
msg);
                     ClientResponse
response = webResource.accept("text/plain").get(
                                  ClientResponse.class);
                     if
(response.getStatus() != 200) {
                           throw new RuntimeException("Failed : HTTP
error code : "
                                         +
response.getStatus());
                     }
 
                     String
output = response.getEntity(String.class);
                     System.out.println("\n============getCResponse============");
                     System.out.println(output);
 
              }
catch (Exception e) {
                     e.printStackTrace();
              }
       }
 
       private void getXMLEmployees()
{
              try {
                     Client
client = Client.create();
                     WebResource
webResource = client
                                  .resource("http://localhost:8080/Restwebservice/webservice/employees");
                     ClientResponse
response = webResource.accept("application/xml")
                                  .get(ClientResponse.class);
                     if
(response.getStatus() != 200) {
                           throw new RuntimeException("Failed : HTTP
error code : "
                                         +
response.getStatus());
                     }
 
                     String
output = response.getEntity(String.class);
                     System.out.println("\n============getCResponse============");
                     System.out.println(output);
 
              }
catch (Exception e) {
                     e.printStackTrace();
              }
       }
 
       private void getXMLEmployee(int empid) {
              try {
                     Client
client = Client.create();
                     WebResource
webResource = client
                                  .resource("http://localhost:8080/Restwebservice/webservice/employee/"
                                                +
empid);
                     ClientResponse
response = webResource.accept("application/xml")
                                  .get(ClientResponse.class);
                     if
(response.getStatus() != 200) {
                           throw new RuntimeException("Failed : HTTP
error code : "
                                         +
response.getStatus());
                     }
 
                     String
output = response.getEntity(String.class);
                     System.out.println("\n============getCResponse============");
                     System.out.println(output);
 
              }
catch (Exception e) {
                     e.printStackTrace();
              }
       }
 
       private void getJSONEmployees()
{
              try {
                     Client
client = Client.create();
                     WebResource
webResource = client
                                  .resource("http://localhost:8080/Restwebservice/webservice/json/employees/");
                     ClientResponse
response = webResource.accept("application/json")
                                  .get(ClientResponse.class);
                     if
(response.getStatus() != 200) {
                           throw new RuntimeException("Failed : HTTP
error code : "
                                         +
response.getStatus());
                     }
 
                     String
output = response.getEntity(String.class);
                     System.out.println("\n============getCResponse============");
                     System.out.println(output);
 
              }
catch (Exception e) {
                     e.printStackTrace();
              }
       }
 
       private void getJSONEmployee(int empid) {
              try {
                     Client
client = Client.create();
                     WebResource
webResource = client
                                  .resource("http://localhost:8080/Restwebservice/webservice/json/employee/"
                                                +
empid);
                     ClientResponse
response = webResource.accept("application/json")
                                  .get(ClientResponse.class);
                     if
(response.getStatus() != 200) {
                           throw new RuntimeException("Failed : HTTP
error code : "
                                         +
response.getStatus());
                     }
 
                     String
output = response.getEntity(String.class);
                     System.out.println("\n============getCResponse============");
                     System.out.println(output);
 
              }
catch (Exception e) {
                     e.printStackTrace();
              }
       }
}