The JAXB Unmarshaller interface is responsible for governing the process of deserializing XML to Java Objects. The unmarshalling of objects can be done to a variety of input sources such as URL, File, FileInputStream, StreamSource, org.w3.dom.Node, SAXSource, XMLStreamReader or XMLEventReader.
We can create an Unmarshaller instance using createUnmarshaller() method and then use the unmarshal() method to perform the unmarshalling.
Note that the POJO should be annotated with @XmlRootElement annotation. This is the simplest mode of unmarshalling.
JAXBContext jaxbContext =JAXBContext.newInstance(Employee.class);Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();//Overloaded methods to unmarshal from different xml sourcesEmployee employee =(Employee) jaxbUnmarshaller.unmarshal( xmlSource );
2.1. Read XML from InputStream
Read the file using InputStream and pass it to the unmarshal() method.
JAXB unmarshaller fills a field’s default value when the document’s corresponding XML element is present, but the element content is missing. In short, the element is an empty XML tag.
<foo><a/><!-- or <a></a> --> //The default value is filled in the POJO.
</foo>
4. JAXB Unmarshaller Properties
There currently are no properties required to be supported by all JAXB Providers on Unmarshaller. However, some providers may support their own set of provider-specific properties.
5. Unmarshaller Event Callbacks
We can customize the unmarshalling operation by adding the callback methods inside JAXB annotated classes e.g. Employee.java. We need to define two methods that will listen before and after the Unmarshaller process that class.
importjava.io.Serializable;importjakarta.xml.bind.Marshaller;importjakarta.xml.bind.annotation.XmlAccessType;importjakarta.xml.bind.annotation.XmlAccessorType;importjakarta.xml.bind.annotation.XmlRootElement;@XmlRootElement(name ="employee")@XmlAccessorType(XmlAccessType.PROPERTY)publicclassEmployeeimplementsSerializable{privatestaticfinallong serialVersionUID =1L;privateInteger id;privateString firstName;privateString lastName;privateDepartment department;publicEmployee(){super();}//Setters and Getters@OverridepublicStringtoString(){return"Employee [id="+ id +", firstName="+ firstName +", lastName="+ lastName +", department="+ department +"]";}// It is called immediately after the object is created and before the unmarshalling begins.// The callback provides an opportunity to initialize JavaBean properties prior to unmarshalling.voidbeforeUnmarshal(Unmarshaller unmarshaller,Object parent){System.out.println("Before Unmarshaller Callback");}// It is called after all the properties are unmarshalled for this object,// but before this object is set to the parent object.voidafterUnmarshal(Unmarshaller unmarshaller,Object parent){System.out.println("After Unmarshaller Callback");}}
5. JAXB Unmarshaller Example
The following is an example of unmarshalling an XML document to Java Object.
A fun-loving family man, passionate about computers and problem-solving, with over 15 years of experience in Java and related technologies.
An avid Sci-Fi movie enthusiast and a fan of Christopher Nolan and Quentin Tarantino.
Comments