XML based Restful web service with Jersey and JAXB.
In this page you will see support for XML using JAXB and Jersey API. JAXB is used for mapping java classes to equivalent xml documents
and vice versa. It is done using marshalling and and unmarshalling features of JAXB. In this example we will convert Order object to
xml format.
Here is the pom.xml file.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>RestfulWebServices</groupId>
<artifactId>RestfulWebServices</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.17</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>1.17</version>
</dependency>
</dependencies>
</project>
|
Web.xml file for your reference:
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.java2novice.restful</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
|
Our model class Order is annotated with required JAXB annoations to support xml transformation:
package com.java2novice.model;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "order")
public class Order {
private int orderNo;
private String custmer;
private String address;
private String amount;
@XmlAttribute(name = "order-no")
public int getOrderNo() {
return orderNo;
}
public void setOrderNo(int orderNo) {
this.orderNo = orderNo;
}
@XmlElement
public String getCustmer() {
return custmer;
}
public void setCustmer(String custmer) {
this.custmer = custmer;
}
@XmlElement
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@XmlElement(name = "bill-amount")
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
}
|
Note that our restful web service API returning xml, so annotate your service method with @Produces and specify MIME type as
application/xml.
package com.java2novice.restful;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import com.java2novice.model.Order;
@Path("/order-inventory")
public class OrderInventoryService {
@GET
@Path("/order/{orderId}")
@Produces(MediaType.APPLICATION_XML)
public Order getUserById(@PathParam("orderId") Integer orderId){
Order ord = new Order();
ord.setOrderNo(orderId);
ord.setCustmer("Java2Novice");
ord.setAddress("Bangalore");
ord.setAmount("$2000");
return ord;
}
}
|
Try below URL to get xml output:
http://localhost:8080/RestfulWebServices/order-inventory/order/1016

|