Java & Xml tutorial (11) JAXB for XML and Java object Conversion
JAXB is short for Java Architecture for XML Binding. It is used to establish a ing between Java classes and XML, which helps developers easily convert XML and Java objects.
This article introduces the use of JAXB with a simple example. First, we need to understand the common APIs of JAXB.
The JAXBContext class is an application entry used to manage binding information in XML/Java. The Marshaller interface serializes Java objects into XML data.
Unserializedaller interface to deserialize XML data into Java objects.
@ XmlType: maps Java classes or enumeration types to XML Schema types.
@ XmlAccessorType (XmlAccessType. FIELD) controls the serialization of fields or attributes. FIELD indicates that JAXB will automatically bind each non-static (static) and non-transient (marked by @ XmlTransient) FIELD in the Java class to XML. Other values include XmlAccessType. PROPERTY and XmlAccessType. NONE. @ XmlAccessorOrder: controls the sorting of attributes and fields in the JAXB binding class @ XmlJavaTypeAdapter, and uses a custom adapter (that is, extends the abstract class XmlAdapter and overwrites the marshal () and unmarshal () methods ), use serialized Java classes as XML. @ XmlElementWrapper: For an array or set (that is, a member variable containing multiple elements), an XML Element (called the wrapper) That wraps the array or set is generated ). @ XmlRootElement: maps Java classes or enumeration types to XML elements. @ XmlElement: maps an attribute of a Java class to an XML element with the same name as the attribute. @ XmlAttribute: maps an attribute of a Java class to an XML Attribute with the same name as the attribute.
The content of the Java Bean to be bound is as follows:
Employee. java
package net.csdn.beans;import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlRootElement;import javax.xml.bind.annotation.XmlType;@XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement @XmlType(name = "Employee", propOrder = { "name", "age", "role", "gender" }) public class Employee { private String name; private String gender; private int age; private String role; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } @Override public String toString() { return "Employee:: Name=" + this.name + " Age=" + this.age + " Gender=" + this.gender + " Role=" + this.role; }}
The content of the XML file to be converted to a Java object is as follows:
Employee. xml
Pankaj
29
Java Developer
Male
Next, write the test case code:
TestJAXB. java
package net.csdn.test;import java.io.InputStream;import java.io.StringReader;import java.io.StringWriter;import javax.xml.bind.JAXBContext;import javax.xml.bind.Marshaller;import javax.xml.bind.Unmarshaller;import net.csdn.beans.Employee;import org.junit.Test;public class TestJAXB { @Test public void testXml2Obj() throws Exception { InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("employee.xml"); byte[] bytes = new byte[is.available()]; is.read(bytes); String xmlStr = new String(bytes); JAXBContext context = JAXBContext.newInstance(Employee.class); Unmarshaller unmarshaller = context.createUnmarshaller(); Employee emp = (Employee) unmarshaller.unmarshal(new StringReader(xmlStr)); System.out.println(emp); } @Test public void testObj2Xml() { Employee emp = new Employee(); emp.setAge(10); emp.setGender("Male"); emp.setName("Jane"); emp.setRole("Teacher"); String xmlStr = TestJAXB.convertToXml(emp,"utf-8"); System.out.println(xmlStr); } public static String convertToXml(Object obj, String encoding) { String result = null; try { JAXBContext context = JAXBContext.newInstance(obj.getClass()); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding); StringWriter writer = new StringWriter(); marshaller.marshal(obj, writer); result = writer.toString(); } catch (Exception e) { e.printStackTrace(); } return result; } }
Run the testObj2Xml test method. The console outputs:
<code class=" hljs xml"><!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%20standalone%3D%22yes%22%3F%2D%2D%3E--><employee> <name>Jane</name> <age>10</age> <role>Teacher</role> <gender>Male</gender></employee></code>
Run the testXml2Obj test method. The console outputs:
Employee:: Name=Pankaj Age=29 Gender=Male Role=Java Developer
Note: In this example, JUnit4 is used as a unit test tool. In Eclipse, click Window> Show View> OutLine to open the outline View, right-click the testXml2Obj and testObj2Xml methods and choose Run As> JUnit Test.