JAXB示例教程
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