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 :
- 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 (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 - Create the Java classes StudentService.java,StudentClient.java and Student.java under com.javainterviewpoint folder.
- 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%20http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://java.sun.com/xml/ns/j2ee%20http://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.
- Create a Client object to access the StudentService.
- Create object for WebResource, which has the URI of our REST Service.
- 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..)
- 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