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对象转换的内容,更多相关内容请关注PHP中文网(www.php.cn)!

更多相关文章

  1. xml学习(7) .net 获取xml节点或者属性最大值
  2. 详细介绍XML中的属性学习方法
  3. XML实例教程:nodeName、nodeValue和nodeType属性的详解
  4. XML入门教程-属性声明代码示例
  5. XML学习(一)元素,属性,读取详解
  6. XML开发基础-XML属性的代码详解
  7. xml数据岛绑定时的超链接处理的示例代码分享
  8. xml的属性总结代码详情
  9. XML数据岛之数据绑定实例详解

随机推荐

  1. Android —— 第一次安装 Android Studio
  2. Android 四大组件之Activity生命周期
  3. Android Studio apk生成路径
  4. android 语言切换过程分析
  5. 1.4 android——UI之 UI界面属性用法与注
  6. android 网络开发
  7. Android(安卓)sqlite cursor的遍历
  8. Android Scroll 分析
  9. Android:Android SDK Manager
  10. Android布局属性解析