JAXB是Java Architecture for XML Binding的缩写,用于在Java类与XML之间竖立映照,可以协助开发者很轻易的將XML和Java对象举行互相转换。
本文以一个简朴的例子引见JAXB的运用,起首我们须要相识一下JAXB经常使用的API。
JAXBContext类,是运用的进口,用于治理XML/Java绑定信息。
Marshaller接口,将Java对象序列化为XML数据。
Unmarshaller接口,将XML数据反序列化为Java对象。
@XmlType,将Java类或罗列范例映照到XML形式范例
@XmlAccessorType(XmlAccessType.FIELD),掌握字段或属性的序列化。FIELD示意JAXB将自动绑定Java类中的每一个非静态的(static)、非瞬态的(由@XmlTransient标注)字段到XML。其他值另有XmlAccessType.PROPERTY和XmlAccessType.NONE。
@XmlAccessorOrder,掌握JAXB 绑定类中属性和字段的排序
@XmlJavaTypeAdapter,运用定制的适配器(即扩大抽象类XmlAdapter并掩盖marshal()和unmarshal()要领),以序列化Java类为XML。
@XmlElementWrapper ,关于数组或鸠合(即包括多个元素的成员变量),生成一个包装该数组或鸠合的XML元素(称为包装器)。
@XmlRootElement,将Java类或罗列范例映照到XML元素。
@XmlElement,将Java类的一个属性映照到与属性同名的一个XML元素。
@XmlAttribute,将Java类的一个属性映照到与属性同名的一个XML属性。
我们须要举行绑定的Java Bean内容以下:
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; } }
须要转换为Java对象的XML文件内容以下:
employee.xml
<?xml version="1.0"?><employee id="1"> <name>Pankaj</name> <age>29</age> <role>Java Developer</role> <gender>Male</gender></employee>
接下来编写测试用例代码:
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; } }
运转testObj2Xml测试要领,掌握台输出:
<?xml version="1.0" encoding="utf-8" standalone="yes"?><employee> <name>Jane</name> <age>10</age> <role>Teacher</role> <gender>Male</gender></employee>
运转testXml2Obj测试要领,掌握台输出:
Employee:: Name=Pankaj Age=29 Gender=Male Role=Java Developer
注:本例中运用JUnit4作为单元测试东西,在Eclipse中点击Window->Show View->OutLine菜单翻开outline视图,分别在testXml2Obj和testObj2Xml要领上点击右键->Run As->JUnit Test即可。
JAXB是Java Architecture for XML Binding的缩写,用于在Java类与XML之间竖立映照,可以协助开发者很轻易的將XML和Java对象举行互相转换。
本文以一个简朴的例子引见JAXB的运用,起首我们须要相识一下JAXB经常使用的API。
JAXBContext类,是运用的进口,用于治理XML/Java绑定信息。
Marshaller接口,将Java对象序列化为XML数据。
Unmarshaller接口,将XML数据反序列化为Java对象。
@XmlType,将Java类或罗列范例映照到XML形式范例
@XmlAccessorType(XmlAccessType.FIELD),掌握字段或属性的序列化。FIELD示意JAXB将自动绑定Java类中的每一个非静态的(static)、非瞬态的(由@XmlTransient标注)字段到XML。其他值另有XmlAccessType.PROPERTY和XmlAccessType.NONE。
@XmlAccessorOrder,掌握JAXB 绑定类中属性和字段的排序
@XmlJavaTypeAdapter,运用定制的适配器(即扩大抽象类XmlAdapter并掩盖marshal()和unmarshal()要领),以序列化Java类为XML。
@XmlElementWrapper ,关于数组或鸠合(即包括多个元素的成员变量),生成一个包装该数组或鸠合的XML元素(称为包装器)。
@XmlRootElement,将Java类或罗列范例映照到XML元素。
@XmlElement,将Java类的一个属性映照到与属性同名的一个XML元素。
@XmlAttribute,将Java类的一个属性映照到与属性同名的一个XML属性。
我们须要举行绑定的Java Bean内容以下:
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; } }
须要转换为Java对象的XML文件内容以下:
employee.xml
<?xml version="1.0"?><employee id="1"> <name>Pankaj</name> <age>29</age> <role>Java Developer</role> <gender>Male</gender></employee>
接下来编写测试用例代码:
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; } }
运转testObj2Xml测试要领,掌握台输出:
<?xml version="1.0" encoding="utf-8" standalone="yes"?><employee> <name>Jane</name> <age>10</age> <role>Teacher</role> <gender>Male</gender></employee>
运转testXml2Obj测试要领,掌握台输出:
Employee:: Name=Pankaj Age=29 Gender=Male Role=Java Developer
注:本例中运用JUnit4作为单元测试东西,在Eclipse中点击Window->Show View->OutLine菜单翻开outline视图,分别在testXml2Obj和testObj2Xml要领上点击右键->Run As->JUnit Test即可。
以上就是Java&Xml教程(十一)JAXB完成XML与Java对象转换的内容,更多相关内容请关注ki4网(www.ki4.cn)!