JAXB示例教程

时间:2020-02-23 14:35:17  来源:igfitidea点击:

XML绑定Java体系结构(JAXB)提供了API,可轻松将Object转换为XML以及将XML转换为Object。
JAXB是作为一个单独的项目开发的,但得到了广泛的使用,最终成为Java 6中JDK的一部分。

JAXB教程

本教程基于Java 7和当前的JAXB 2.0版。

JAXB编组:将Java对象转换为XML。

JAXB Unmarhsalling:将XML转换为Java对象。

使用JAXB非常容易,并且使用Java注释。
我们需要注释Java Object来提供XML创建的说明,然后我们必须创建Marshaller来将Object转换为XML。

Unmarshaller用于将XML转换为Java Object。

JAXBContext是JAXB的入口,它提供了获取编组器和解组器对象的方法。

一些基本和有用的JAXB注释是:

  • @XmlRootElement:这是要在JAXB中使用的对象必须具有的注释。
    它定义了XML内容的根元素。

  • @XmlType:它将类映射到XML模式类型。
    我们可以使用它来排序XML中的元素。

  • @XmlTransient:这将确保不将Object属性写入XML。

  • @XmlAttribute:这将创建Object属性作为属性。

  • @XmlElement(name =" abc"):这将创建名称为" abc"的元素

您还可以从JAXB官方上学习其他一些JAXB批注。

JAXB示例

让我们运行一个简单的JAXB示例程序,以演示JAXB编组和反编组的用法。

package com.theitroad.xml.jaxb;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;

@XmlRootElement(name = "Emp")
@XmlType(propOrder = {"name", "age", "role", "gender"})
public class Employee {

  private int id;

  private String gender;

  private int age;
  private String name;
  private String role;

  private String password;

  @XmlTransient
  public String getPassword() {
      return password;
  }

  public void setPassword(String password) {
      this.password = password;
  }

  @XmlAttribute
  public int getId() {
      return id;
  }

  public void setId(int id) {
      this.id = id;
  }

  public int getAge() {
      return age;
  }

  public void setAge(int age) {
      this.age = age;
  }

  public String getName() {
      return name;
  }

  public void setName(String name) {
      this.name = name;
  }

  @XmlElement(name = "gen")
  public String getGender() {
      return gender;
  }

  public void setGender(String gender) {
      this.gender = gender;
  }

  public String getRole() {
      return role;
  }

  public void setRole(String role) {
      this.role = role;
  }

  @Override
  public String toString() {
      return "ID = " + id + " NAME=" + name + " AGE=" + age + " GENDER=" + gender + " ROLE=" +
              role + " PASSWORD=" + password;
  }

}

Employee是一个普通的Java Bean,具有私有字段及其获取器和设置器。
注意,使用JAXB批注定义根元素,元素名称,元素顺序和瞬态属性。

这是一个测试JAXB示例程序,显示了JAXB编组和JAXB编组。

package com.theitroad.xml.jaxb;

import java.io.File;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

public class JAXBExample {

  private static final String FILE_NAME = "jaxb-emp.xml";

  public static void main(String[] args) {
      Employee emp = new Employee();
      emp.setId(1);
      emp.setAge(25);
      emp.setName("hyman");
      emp.setGender("Male");
      emp.setRole("Developer");
      emp.setPassword("sensitive");

      jaxbObjectToXML(emp);

      Employee empFromFile = jaxbXMLToObject();
      System.out.println(empFromFile.toString());
  }

  private static Employee jaxbXMLToObject() {
      try {
          JAXBContext context = JAXBContext.newInstance(Employee.class);
          Unmarshaller un = context.createUnmarshaller();
          Employee emp = (Employee) un.unmarshal(new File(FILE_NAME));
          return emp;
      } catch (JAXBException e) {
          e.printStackTrace();
      }
      return null;
  }

  private static void jaxbObjectToXML(Employee emp) {

      try {
          JAXBContext context = JAXBContext.newInstance(Employee.class);
          Marshaller m = context.createMarshaller();
          //for pretty-print XML in JAXB
          m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

          //Write to System.out for debugging
          //m.marshal(emp, System.out);

          //Write to File
          m.marshal(emp, new File(FILE_NAME));
      } catch (JAXBException e) {
          e.printStackTrace();
      }
  }

}

上面的程序创建以下jaxb-emp.xml文件。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Emp id="1">
  <name>hyman</name>
  <age>25</age>
  <role>Developer</role>
  <gen>Male</gen>
</Emp>

检查XML文件没有密码字段,当将相同XML文件解组到Object时,我们得到以下输出。

ID = 1 NAME=hyman AGE=25 GENDER=Male ROLE=Developer PASSWORD=null