Jersey RESTful Web Services Client can consume XML , JSON and many other MediaType responses from a RESTful web service. There is a drawback in this approach, suppose if you have a RESTful service which returns a list of all employees in XML format. Let’s take a look into the below example
@GET @Produces(MediaType.APPLICATION_XML) public List<Employee> getEmployeeDetails() { Employee emp1 = new Employee(); emp1.setId(1); emp1.setName("JavaInterviewPoint1111"); Employee emp2 = new Employee(); emp2.setId(2); emp2.setName("JavaInterviewPoint22222"); List<Employee> l = new ArrayList<Employee>(); l.add(emp1); l.add(emp2); return l; }
The above service will produce an XML response like below
<employees> <Employee> <id>1</id> <name>JavaInterviewPoint1111</name> </Employee> <Employee> <id>2</id> <name>JavaInterviewPoint22222</name> </Employee> </employees>
Then again in the client program we to have write Unmarshal logic to convert XML to java object and put it into a List.
But instead of doing all these there is an easy way of getting a List of entities(List of Employee object) by using a class called “GenericType”. Now Let’s see how to do that in the below example.
Folder Structure
- Create a Dynamic Web Project RESTfulExample and create a package for our src files “com.javainterviewpoint“
- Place the required jar files under WEB-INF/Lib
jersey-bundle-1.18.jar
jsr311-api-1.1.1.jar
jackson-core-asl-1.9.13.jar
jaxb-api.jar
jaxb-impl-2.0.1.jar
asm-3.1.jar - Create the Java classes Employee.java, EmployeeService.java and EmployeeJerseyClient.java under com.javainterviewpoint folder.
- Place the web.xml under the WEB-INF directory
Jersey RESTful Web Services Client
Employee.java
Create a new Java Class “Employee” and put it under “com.javainterviewpoint“ folder
import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name="Employee") public class Employee { String name; int id; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } }
Our Employe class is a simple POJO consisting of getters and setters for the Employee property name and id.
Employee JAX-RS WebService
import java.util.ArrayList; import java.util.List; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path("/employee") public class EmployeeService { @GET @Produces(MediaType.APPLICATION_XML) public List<Employee> getEmployeeDetails() { Employee emp1 = new Employee(); emp1.setId(1); emp1.setName("JavaInterviewPoint1111"); Employee emp2 = new Employee(); emp2.setId(2); emp2.setName("JavaInterviewPoint22222"); List<Employee> l = new ArrayList<Employee>(); l.add(emp1); l.add(emp2); return l; } }
- Our service serves the GET request which is denoted by the @GET annotation and produces XML response
@GET @Produces(MediaType.APPLICATION_XML) public List<Employee> getEmployeeDetails()
- The getEmployeeDetails() method creates two Employee object emp1 and emp2 and add both the object into a List and returns the List<Employee>
Employee Jersey RESTful Web Services Client
import java.util.List; import java.util.Iterator; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.GenericType; import com.sun.jersey.api.client.WebResource; public class EmployeeJerseyClient { public static void main(String args[]) { Client client = Client.create(); WebResource webresource = client.resource("http://localhost:8080/RestfulExample/rest/employee/"); List<Employee> emp = webresource.get(new GenericType<List<Employee>>(){}); Iterator it = emp.iterator(); while(it.hasNext()) { Employee em = (Employee)it.next(); System.out.println("Id: "+em.getId()+" Employee Name :"+em.getName()); } } }
- Create a new Client object.
Client client = Client.create();
- resource() method of the client object returns the WebResource type of object.
WebResource webresource = client. resource("http://localhost:8080/RestfulExample/rest/employee/");
- The crucial part comes here we have created object for the class GenericType to accept List of Employee in the webresource.get() method
List<Employee> emp = webresource.get(new GenericType<List<Employee>>(){})
- Here now our List emp will have Employee objects which we have created in our service.
On executing our client program we will get the below output
Id: 1 Employee Name :JavaInterviewPoint1111 Id: 2 Employee Name :JavaInterviewPoint22222
Leave a Reply