1、概念是什么:(Java Architecture for XML Binding) 是一个业界的标准,即是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。有多种实现。
2、JAXB中有什么:包含“xjc”工具和一个“schemagen”工具。
“xjc”工具可以用来将XML模式或其他类型模式文件(Java 1.6试验性地支持RELAX NG,DTD以及WSDL)转换为Java类。Java类使用javax.xml.bind.annotation包下的Java 标注,例如@XmlRootElement和@XmlElement。XML列表序列表示为java.util.List类型的属性, 通过JAXBContext可以创建Marshallers(将Java对象转换成XML)和Unmarshallers(将XML解析为Java对象)。
另外的“schemagen”工具,能够执行“xjc”的反向操作,通过一组标注的Java类创建一个XML模式。
第一步:创建要转化的java对象,该对象需要使用相关注解注释各字段(标注在get方法上)。
package test.my;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
/**
* @Version 1.0
* @Author .com
* @Created Sep 15, 2015 10:35:59 AM
* @Description
* <p>
* 创建要转化的java对象,该对象需要使用相关注解注释各字段(标注在get方法上)
* @Modification
* <p>
* Date Author Version Description
* <p>
* Sep 15, 2015 .com 1.0 create file
*/
@XmlRootElement
public class Customer {
private String name;
private int age;
private int id;
@XmlElement
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
@XmlElement
public int getAge() {
return age;
}
public void setAge(final int age) {
this.age = age;
}
@XmlAttribute
public int getId() {
return id;
}
public void setId(final int id) {
this.id = id;
}
@Override
public String toString() {
return "Customer [id=" + id + ",name=" + name + ",age=" + age + "]";
}
}
编组(java对象转xml),提供多种编组目的地,以下只介绍两种,一种编组到文件,一种编组到控制台。
package test.my;
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
//Marshaller 对象生成到xml中
public class Object2XmlDemo {
public static void main(final String[] args) {
final Customer customer = new Customer();
customer.setId(001);
customer.setName("LiLei");
customer.setAge(29);
try {
final File file = new File("D:\\fileTest.xml");
final JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
final Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(customer, file);
jaxbMarshaller.marshal(customer, System.out);
} catch (final JAXBException e) {
e.printStackTrace();
}
}
}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer id="1">
<age>29</age>
<name>LiLei</name>
</customer>
解组(xml转java对象),直接从文件解组xml成java对象。
package test.my;
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
//Unmarshaller 解组(xml转java对象),直接从文件解组xml成java对象。
public class Xml2ObjectDemo {
public static void main(final String[] args) {
try {
final File file = new File("D:\\fileTest.xml");
final JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
final Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
final Customer customer = (Customer) jaxbUnmarshaller.unmarshal(file);
System.out.println(customer);
} catch (final JAXBException e) {
e.printStackTrace();
}
}
}
生成对象 Customer [id=1,name=LiLei,age=29]
。