JAXB – Java Architecture for XML Binding
1. Marshalling – Converting a java object into XML format – jaxbMarshaller.marshal().
2. Unmarshalling – Converting xml into java object – jaxbMarshaller.unmarshal().
From jdk 1.6, jaxb comes bundled with jdk.
Main annotations: @XmlRootElement, @XmlElement, @XmlAttribute, @XmlType
Main Classes : JAXBContext, Marshaller, Unmarshaller
import java.io.ByteArrayInputStream; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @XmlRootElement(name="Product") @XmlType(propOrder={"price","name"}) public class Product { private String name; private String sku; private double price; public Product(String name, String sku, double price) { super(); this.name = name; this.sku = sku; this.price = price; } public Product() { super(); // TODO Auto-generated constructor stub } @XmlElement(name="product_name") public String getName() { return name; } public void setName(String name) { this.name = name; } @XmlAttribute(name="product_sku") public String getSku() { return sku; } public void setSku(String sku) { this.sku = sku; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public String toString() { return "Product [name=" + name + ", sku=" + sku + ", price=" + price + "]"; } public static void main(String[] args) throws JAXBException { Product product=new Product("Product1","sku1",15.0d); JAXBContext jaxbContext=JAXBContext.newInstance(Product.class); Marshaller marshaller=jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(product, System.out); //unmarshall example String xmlProduct="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"+ "<Product product_sku=\"sku1\">"+ "<product_name>Product1</product_name>"+ "<price>15.0</price>"+ "</Product>"; Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); Product product2 = (Product) jaxbUnmarshaller.unmarshal(new ByteArrayInputStream(xmlProduct.getBytes())); System.out.println(product2); } }
output: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Product product_sku="sku1"> <price>15.0</price> <product_name>Product1</product_name> </Product> Product [name=Product1, sku=sku1, price=15.0]