Java&Xml教程(十一)JAXB实现XML与Java对象转换

互联网 17-2-22
  • 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属性。

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;      }    }
<?xml version="1.0"?><employee id="1">      <name>Pankaj</name>      <age>29</age>      <role>Java Developer</role>      <gender>Male</gender></employee>
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即可。

  • 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属性。

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;      }    }
<?xml version="1.0"?><employee id="1">      <name>Pankaj</name>      <age>29</age>      <role>Java Developer</role>      <gender>Male</gender></employee>
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.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:Java对象、Json、Xml转换工具Jackson使用

相关资讯