热门IT资讯网

JAXB实现XML与Java对象转换

发表于:2024-11-29 作者:热门IT资讯网编辑
编辑最后更新 2024年11月29日,今天小编给大家分享的是JAXB实现XML与Java对象转换的实例展示,相信大部分人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,话不多说,一起往下看吧。JAXB是Java Architec

今天小编给大家分享的是JAXB实现XML与Java对象转换的实例展示,相信大部分人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,话不多说,一起往下看吧。

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

    Pankaj    29    Java Developer    Male

接下来编写测试用例代码:
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测试方法,控制台输出:

    Jane    10    Teacher    Male

运行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

    Pankaj    29    Java Developer    Male

接下来编写测试用例代码:
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测试方法,控制台输出:

    Jane    10    Teacher    Male

运行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实现XML与Java对象转换的具体操作,代码详细清楚,如果在日常工作遇到这个问题,希望你能通过这篇文章解决问题。如果想了解更多相关内容,欢迎关注行业资讯频道!

0