In previous post, i explained simple Hello world application. In this post I am going to
explain how to return XML response.
We are going
to develop a resource with URI (/employees), which returns list of all
employees in XML format.
Step 1: Create package “com.jersey_tutorial.model” to
store all model classes.
Step 2: Create model
classes Employee, Address.
Address.java
package com.jersey_tutorial.model; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Address { private String street; private String city; private String state; private String country; public Address() { this("No Data", "No Data", "No Data", "No Data"); } public Address(String area, String city, String state, String country) { super(); this.street = area; this.city = city; this.state = state; this.country = country; } public String getArea() { return street; } public String getCity() { return city; } public String getCountry() { return country; } public String getState() { return state; } public void setArea(String area) { this.street = area; } public void setCity(String city) { this.city = city; } public void setCountry(String country) { this.country = country; } public void setState(String state) { this.state = state; } }
Employee.java
package com.jersey_tutorial.model; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Employee { private String firstName; private String lastName; private String id; private Address permAddrees; private Address tempAddrees; public Employee() { this("No Data", "No Data", "No Data", new Address(), new Address()); } public Employee(String firstName, String lastName, String id, Address permAddrees, Address tempAddrees) { super(); this.firstName = firstName; this.lastName = lastName; this.id = id; this.permAddrees = permAddrees; this.tempAddrees = tempAddrees; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getId() { return id; } public void setId(String id) { this.id = id; } public Address getPermAddrees() { return permAddrees; } public void setPermAddrees(Address permAddrees) { this.permAddrees = permAddrees; } public Address getTempAddrees() { return tempAddrees; } public void setTempAddrees(Address tempAddrees) { this.tempAddrees = tempAddrees; } }
XmlRootElement
annotation is used to map a Java class to an XML element.
Step 3: Create a package com.jersey_tutorial.services
Step 4: Create EmployeeService class to get all Employee
details.
EmployeeService.java
package com.jersey_tutorial.services; import java.util.ArrayList; import java.util.List; import com.jersey_tutorial.model.Address; import com.jersey_tutorial.model.Employee; public class EmployeeService { private static List<Employee> employees; static { initializeEmployees(); } private static void initializeEmployees() { employees = new ArrayList<>(); Address tempAddr1 = new Address(); Address tempAddr2 = new Address(); Address permAddr1 = new Address("Marthali", "Bangalore", "Karnataka", "India"); Address permAddr2 = new Address("Bharath Nagar", "Hyderabad", "Andhra Pradesh", "India"); Employee emp1 = new Employee("Hari Krishna", "Gurram", "1", permAddr1, tempAddr1); Employee emp2 = new Employee("PTR", "PTR", "2", permAddr2, tempAddr2); employees.add(emp1); employees.add(emp2); } public static List<Employee> getAllEmployees() { return employees; } }
Step 5: Create EmployeeResource.
package com.jersey_tutorial.resources; 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; import com.jersey_tutorial.model.Employee; import com.jersey_tutorial.services.EmployeeService; @Path("employees") public class EmployeeResource { @GET @Produces(MediaType.APPLICATION_XML) public List<Employee> getAllEmployees() { return EmployeeService.getAllEmployees(); } }
The
@javax.ws.rs.Produces annotation applied to getAllEmployees() specifies which
media type the method will return in the message body of the HTTP response.
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/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>jersey_tutorial</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.jersey_tutorial.resources</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
Maven dependencies
<dependencies> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet-core</artifactId> <version>2.21</version> </dependency> <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-server</artifactId> <version>2.21</version> </dependency> </dependencies>
Run
application in server and hit following URL.
You will get
following kind of output.
Note:
When I ran
the URL in Mozilla, safari browser, I got text response, instead of XML
response. It is the problem with safari and Mozilla browsers. Same application
works fine with Chrome browser.
No comments:
Post a Comment