This tutorial explains how to use JAXB (Java Architecture for XML Binding) to convert an XML document to Java Objects.
The previous tutorial has explained the conversion of Java Objects to XML.
As of Java 11, JAXB is not part of the JRE anymore, and you need to configure the relevant libraries via your dependency management system, for example, either Maven or Gradle.
Configure the Java compiler level to be at least 11 and add the JAXB dependencies to your pom 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>JAXBDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>JAXBDemo</name>
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.3</version>
</dependency>
</dependencies>
</project>
Sample XML Structure
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<EmployeeDetails>
<firstName>Terry</firstName>
<lastName>Mathew</lastName>
<gender>female</gender>
<age>30</age>
<maritalStatus>married</maritalStatus>
<designation>Manager</designation>
<contactNumber>+919999988822</contactNumber>
<emailId>abc@test.com</emailId>
<GrossSalary>75000.0</GrossSalary>
</EmployeeDetails>
Un-marshalling provides a client application the ability to convert XML data into JAXB-derived Java objects.
Let’s see the steps to convert XML document into java object.
- Create POJO Class
- Create the JAXBContext object
- Create the Unmarshaller objects
- Call the unmarshal method
- Use getter methods of POJO to access the data
Now, let us create the Java Objects (POJO) for the above XML.
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlRootElement(name = "EmployeeDetails")
@XmlAccessorType(XmlAccessType.FIELD)
//Define the order in which the fields are written in XML
@XmlType(propOrder = { "firstName", "lastName", "gender", "age", "maritalStatus", "designation", "contactNumber","emailId", "salary" })
public class Employee {
private String firstName;
private String lastName;
private int age;
@XmlElement(name = "GrossSalary")
private double salary;
private String designation;
private String contactNumber;
private String emailId;
private String gender;
private String maritalStatus;
public Employee() {
super();
}
// Getter and setter methods
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String getDesignation() {
return designation;
}
public void setDesignation(String designation) {
this.designation = designation;
}
public String getContactNumber() {
return contactNumber;
}
public void setContactNumber(String contactNumber) {
this.contactNumber = contactNumber;
}
public String getEmailId() {
return emailId;
}
public void setEmailId(String emailId) {
this.emailId = emailId;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getMaritalStatus() {
return maritalStatus;
}
public void setMaritalStatus(String maritalStatus) {
this.maritalStatus = maritalStatus;
}
@Override
public String toString() {
return "Employee [FirstName=" + firstName + ", LastName=" + lastName + ", Age=" + age + ", Salary=" + salary
+ ", Designation=" + designation + ", ContactNumber=" + contactNumber + ", EmailId=" + emailId
+ ", Gender=" + gender + ", MaritalStatus=" + maritalStatus + "]";
}
}
Create the following test program for reading the XML file. The XML file is present under src/test/resources.

Let’s use JAXB Unmarshaller to unmarshal our JAXB_XML back to a Java object:
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import org.junit.Test;
public class JAXBDeserialization {
@Test
public void JAXBUnmarshalTest() {
try {
String userDir = System.getProperty("user.dir");
File file = new File(userDir + "\\src\\test\\resources\\JAXB_XML.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Employee.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Employee employee = (Employee) jaxbUnmarshaller.unmarshal(file);
System.out.println("FirstName: " + employee.getFirstName());
System.out.println("LastName: " + employee.getLastName());
System.out.println("Age: " + employee.getAge());
System.out.println("Salary: " + employee.getSalary());
System.out.println("Contact Number: " + employee.getContactNumber());
System.out.println("Designation: " + employee.getDesignation());
System.out.println("Gender: " + employee.getGender());
System.out.println("EmailId: " + employee.getEmailId());
System.out.println("MaritalStatus: " + employee.getMaritalStatus());
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
When we run the code above, we may check the console output to verify that we have successfully converted XML data into a Java object:
The output of the above program is

There is another simple way of unmarshalling the XML to Java Objects.
@Test
public void JAXBUnmarshalTest1() {
try {
String userDir = System.getProperty("user.dir");
File file = new File(userDir + "\\src\\test\\resources\\JAXB_XML.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Employee.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Employee emp = (Employee) jaxbUnmarshaller.unmarshal(file);
System.out.println(emp);
} catch (JAXBException e) {
e.printStackTrace();
}
}
When we run the code above, we may check the console output to verify that we have successfully converted XML data into a Java object:
The output of the above program is

We are done! Congratulations on making it through this tutorial and hope you found it useful! Happy Learning!!