RESTful Java Client With Jersey Client

Till now we have learnt on how to create a RESTful web service and we have tested it using “Postman Client”.In this tutorial we will create a simple Jersey client to connect to our REST web service. We will be using JAX-RS Client API for creating the REST client.

Folder Structure :

  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 (will have jersey-client.jar, hence jersey-bundle will be sufficient) 
    jackson-2.1.0-all.jar
    jsr311-api-1.1.1.jar
    jaxb-api.jar
    jaxb-impl-2.0.1.jar
    asm-3.1.jar

  3. Create the Java classes StudentService.java,StudentClient.java and Student.java under  com.javainterviewpoint folder.
  4. Place the web.xml  under the WEB-INF directory

Student.java

Student class is our model class,we have annotated our Student class with @XmlRootElement marking the root element.

package com.javainterviewpoint;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Student 
{
    private String name;
    private int age;
       
    public Student() {
    }
    
    public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

   public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_ID" version="2.4">
 <display-name>Restful Web Application</display-name>
 <servlet>
 <servlet-name>jersey-serlvet</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.javainterviewpoint</param-value>
 </init-param>
 
 <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>

We register our jersey container “com.sun.jersey.spi.container.servlet.ServletContainer” in the servlet-class of our web.xml and we will mention the source files location as the value to the init param “com.sun.jersey.config.property.packages” so that the container will scan for annotations of the class files within that package.

Jersey client GET example

REST Service for GET – HTTP method

StudentService.java

package com.javainterviewpoint;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/student")
public class StudentService 
{   
	@GET
	@Path("/getStudent")
	@Produces(MediaType.APPLICATION_JSON)
	public Student getBothResponse()
	{
		Student s = new Student();
		s.setAge(15);
		s.setName("JavaInterviewPoint");
		return s;
	}
}

StudentClient.java

package com.javainterviewpoint;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;

public class StudentClient
{
    public static void main(String[] args) 
    {
        try 
        {
            //Creating a Client
            Client client = Client.create();
            //Resource for accessing our Service
            WebResource webResource = client
               .resource("http://localhost:8080/RESTfulExample/rest/student/getStudent");
            //Format of the response accepted 
            ClientResponse response = webResource.accept("application/json")
                       .get(ClientResponse.class);
            //Check for the response is success or not
            if (response.getStatus() != 200) 
            {
               throw new Exception("Exception Occured - HTTP Error Code : "
                + response.getStatus());
            }
    
            String output = response.getEntity(String.class);
    
            System.out.println("Fetching Output....");
            System.out.println(output);
    
        } catch (Exception e) 
        {
            e.printStackTrace();
        }
    }
}

We will be performing the below operations for creating a Jersey Client.

  1. Create a Client object to access the StudentService.
  2. Create object for WebResource, which has the URI of our REST Service.
  3. ClientResponse holds the type of Response which we are about to receive (JSON, XML, etc..) and the HTTP Method which we are going to hit (GET, PUT, POST etc..)
  4. Finally check for the status code of the response received.

Output :

Fetching Output....
{"age":"15","name":"JavaInterviewPoint"}

Jersey client POST example

REST Service for POST – HTTP method

StudentService.java

package com.javainterviewpoint;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path("/student")
public class StudentService 
{   
    @POST
    @Path("/postStudent")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response postStudent(Student s)
    {
	String student = "<< Student Received >> \n Student Name : "
	                        +s.getName()+" \n Student Age : "+s.getAge();
        return Response
                .status(201)
                .entity(student)
                .build();
    }
}

StudentClient.java

package com.javainterviewpoint;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;

public class StudentClient
{
    public static void main(String[] args)
    {
        try
        {
            // Creating a Client
            Client client = Client.create();
            // Resource for accessing our Service
            WebResource webResource = client
                    .resource("http://localhost:8080/RESTfulExample/rest/student/postStudent");
            // Input for send to the service
            String inputMsg = "{\"age\": \"55\", \"name\": \"JavaInterviewPoint1212\"}";
            // Format of the response accepted
            ClientResponse response = webResource
                                        .type("application/json")
                                        .post(ClientResponse.class, inputMsg);
            // Check for the response is success or not
            if (response.getStatus() != 201)
            {
                throw new Exception
                    ("Exception Occured - HTTP Error Code :" + response.getStatus());
            }

            System.out.println("Fetching Output....");
            String output = response.getEntity(String.class);
            System.out.println(output);

        } catch (Exception e)
        {

            e.printStackTrace();
        }
    }
}

Output :

Fetching Output....
<< Student Received >> 
 Student Name : JavaInterviewPoint1212 
 Student Age : 55

Leave a Reply

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