JAXB Hello World example
With this example we shall show you how to work with the JAXB framework in Java. JAXB stands for Java Architecture for XML Binding. You can use JAXB to convert an object to XML format and write it to an XML File as well as read an XML File and construct a Java object out of it. These to operations are described in JAXB as:
Marshalling, which converts a Java object into XML format and writes it to an XML File (or generally an output stream).
Unmarshalling, which converts an XML file into a Java object.
1. JAXB library
As of JDK 1.6, JAXB libraries are included in the JDK. If you are using an older JDK you can download it form the JAXB official project site.
2. JAXB syntax for XML Formatting
JAXB uses annotations to provide meta information that dictates the exact structure of XML elements that will be derived from the class. The annotations are quite straightforward. Of course in the official site you will find all the information you need about JAXB annotations.
Here is the class that we are going to use for the demo:
Student.java:
package com.javacodegeeks.java.core; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Student { //default serialVersion id private int id; private String firstName; private String lastName; private int age; public Student(){ } public Student(String fname, String lname, int age, int id){ this.firstName = fname; this.lastName = lname; this.age = age; this.id = id; } @XmlElement public void setFirstName(String fname) { this.firstName = fname; } public String getFirstName() { return this.firstName; } @XmlElement public void setLastName(String lname) { this.lastName = lname; } public String getLastName() { return this.lastName; } @XmlElement public void setAge(int age) { this.age = age; } public int getAge() { return this.age; } @XmlAttribute public void setId(int id){ this.id = id; } public int getId(){ return this.id; } @Override public String toString() { return new StringBuffer(" First Name : ").append(this.firstName) .append(" Last Name : ").append(this.lastName).append(" Age : ").append(this.age).append(" ID : ").append(this.id).toString(); } }
3. Marshalling
Remember that Marshalling is the operation that JAXB uses in order to convert an object to XML format and write it to a File.
JXBExampleJava.java
package com.javacodegeeks.java.core; import java.io.File; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; public class JXBExampleJava { private static final String xmlFilePath = "C:\\Users\\nikos7\\Desktop\\filesForExamples\\Student.xml"; public static void main(String[] args) { Student student = new Student("James", "Jonathan", 25, 100); try { File xmlfile = new File(xmlFilePath); JAXBContext jaxbContext = JAXBContext.newInstance(Student.class); Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); // print the output with nice alignment jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); jaxbMarshaller.marshal(student, xmlfile); // you can use this to print the result in // standard output for debugging purposes // jaxbMarshaller.marshal(student, System.out); System.out.println("File was created succesfully"); } catch (JAXBException e) { e.printStackTrace(); } } }
Student.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <student id="0"> <age>25</age> <firstName>James</firstName> <lastName>Jonathan</lastName> </student>
4. Unmarshalling
Now we are going to do the opposite operation. That is, read an XML File and convert it into a Java Object.
JXBExampleJava.java
package com.javacodegeeks.java.core; import java.io.File; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; public class JXBExampleJava { private static final String xmlFilePath = "C:\\Users\\nikos7\\Desktop\\filesForExamples\\Student.xml"; public static void main(String[] args) { try { File xmlFile = new File(xmlFilePath); JAXBContext jaxbContext = JAXBContext.newInstance(Student.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); Student student = (Student) jaxbUnmarshaller.unmarshal(xmlFile); System.out.println(student); } catch (JAXBException e) { e.printStackTrace(); } } }
Output:
First Name : Jacl Last Name : Freeman Age : 32 ID : 100
This was an example on how to work with JAXB in Java.