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

