<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.3</version>
</dependency>
<root>
<person>
<name>John Doe</name>
<age>30</age>
<address>
<street>123 Main St</street>
<city>New York</city>
<state>NY</state>
</address>
</person>
</root>
import javax.xml.bind.annotation.*;
@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
@XmlElement(name="person")
private Person person;
// getters and setters
}
@XmlAccessorType(XmlAccessType.FIELD)
public class Person {
private String name;
private int age;
private Address address;
// getters and setters
}
@XmlAccessorType(XmlAccessType.FIELD)
public class Address {
private String street;
private String city;
private String state;
// getters and setters
}
import javax.xml.bind.*;
import java.io.File;
public class JAXBExample {
public static void main(String[] args) {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Root.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Root root = (Root) unmarshaller.unmarshal(new File("example.xml"));
System.out.println("Person Name: " + root.getPerson().getName());
System.out.println("Person Age: " + root.getPerson().getAge());
System.out.println("Person Address: " + root.getPerson().getAddress().getStreet() +
", " + root.getPerson().getAddress().getCity() +
", " + root.getPerson().getAddress().getState());
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}