Jersey RESTful Web Services Client – Getting List of Object (GenericType)

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

Jersey RESTful Web Services Client

  1. Create a Dynamic Web Project RESTfulExample and create a package for our src files com.javainterviewpoint
  2. 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

  3. Create the Java classes Employee.java, EmployeeService.java and EmployeeJerseyClient.java under  com.javainterviewpoint folder.
  4. 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

Your email address will not be published. Required fields are marked *