JAXB Hello World Marshalling / Unmarshalling Example
jaxb
Marshalling
Unmarshalling
java
Java Architecture for XML Binding (JAXB) is a software framework that allows mapping Java classes to XML and back.
There are two important processes offered by the JAXB framework:
- marshal - the process to convert a Java object into an XML file.
- unmarshal - the process to convert XML content into a Java Object.
The following table describes the default data type bindings between the XML data types and Java data types.
XML Schema Type | Java Data Type |
---|---|
xsd:unsignedShort |
int |
xsd:unsignedLong |
java.math.BigDecimal |
xsd:unsignedInt |
long |
xsd:unsignedByte |
short |
xsd:time |
javax.xml.datatype.XMLGregorianCalendar |
xsd:string |
java.lang.String |
xsd:short |
short |
xsd:QName |
javax.xml.namespace.QName |
xsd:positiveInteger |
java.math.BigInteger |
xsd:NOTATION |
javax.xml.namespace.QName |
xsd:long |
long |
xsd:integer |
java.math.BigInteger |
xsd:int |
int |
xsd:hexBinary |
byte[] |
xsd:g |
javax.xml.datatype.XMLGregorianCalendar |
xsd:float |
float |
xsd:duration |
javax.xml.datatype.Duration |
xsd:double |
double |
xsd:decimal |
java.math.BigDecimal |
xsd:dateTime |
javax.xml.datatype.XMLGregorianCalendar |
xsd:date |
javax.xml.datatype.XMLGregorianCalendar |
xsd:byte |
byte |
xsd:boolean |
boolean |
xsd:base64Binary |
byte[] |
xsd:anySimpleType |
java.lang.String |
xsd:anySimpleType |
java.lang.Object |
Class annotation
There are three annotations used:
- XmlRootElement - this is added to the class and will map the class to the XML;
- XmlElement - is used to methods or property and will map the property to an XML element.
- XmlAttribute - is used to methods or property and will map the property to an XML attribute.
For this article will choose a simple User class to be marshaled and unmarshaled.
package com.admfactory.jaxb;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class User {
private int id;
private String name;
private String address;
private String email;
public int getId() {
return id;
}
@XmlAttribute
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
@XmlElement
public void setAddress(String address) {
this.address = address;
}
public String getEmail() {
return email;
}
@XmlElement
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User [id:" + id + ",name: " + name + ", email:" + email + ", address: " + address + "]";
}
}
Object to XML
To convert the object to XML the marshaller.marshal() method is used.
package com.admfactory.jaxb;
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
public class JAXBToXML {
public static void main(String[] args) {
System.out.println("JAXB Object to XML example");
System.out.println();
User user = new User();
user.setAddress("John Islip, London");
user.setEmail("john@example.com");
user.setId(33);
user.setName("John Doe");
try {
JAXBContext context = JAXBContext.newInstance(User.class);
Marshaller marshaller = context.createMarshaller();
/** output the XML in pretty format */
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
/** display the output in the console */
marshaller.marshal(user, System.out);
/** put the XML to the file - will be used by the unmarshal example */
marshaller.marshal(user, new File("user.xml"));
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
Output
JAXB Object to XML example
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user id="33">
<address>John Islip, London</address>
<email>john@example.com</email>
<name>John Doe</name>
</user>
XML to Object
To convert the XML file to object the marshaller.unmarshal() method is used.
package com.admfactory.jaxb;
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
public class JAXBToObject {
public static void main(String[] args) {
System.out.println("JAXB XML to Object example");
System.out.println();
try {
JAXBContext context = JAXBContext.newInstance(User.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
User user = (User) unmarshaller.unmarshal(new File("user.xml"));
System.out.println(user);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
Output
JAXB XML to Object example
User [id:33,name: John Doe, email:john@example.com, address: John Islip, London]