简介:JAXB是Java Architecture for XML Binding的缩写,可以将一个Java对象转变成为XML格式,反之亦然。我们把对象与关系数据库之间的映射称为ORM, 其实也可以把对象与XML之间的映射称为OXM(Object XML Mapping). 原来JAXB是Java EE的一部分,在JDK6中,SUN将其放到了Java SE中,这也是SUN的一贯做法。JDK6中自带的这个JAXB版本是2.0, 比起1.0(JSR 31)来,JAXB2(JSR 222)用JDK5的新特性Annotation来标识要作绑定的类和属性等,这就极大简化了开发的工作量。实际上,在Java EE 5.0中,EJB和Web Services也通过Annotation来简化开发工作。另外,JAXB2在底层是用StAX(JSR 173)来处理XML文档。
优点:JAXB2.0支持使用Annotation在java代码中说明各种属性的XML风格,相当的方便。
1. 实例之一(由javaBean生成xml):
package example;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Calendar;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class User {
@XmlElement
String username;
@XmlElement
String password;
public User(){
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public static void main(String[] args) throws JAXBException,IOException {
JAXBContext context = JAXBContext.newInstance(User.class);
//下面代码演示将对象转变为xml
Marshaller m = context.createMarshaller();
User user=new User("aaa","bbbb");
FileWriter fw = new FileWriter("test.xml");
m.marshal(user,fw);
}
}
注意:username,password不用setxxx方法,可以写getxxx方法。
2. 实例之二(根据Xsd生成xml)
由上面的程序可以test.xml,可采用XMLSPy工具生成test.xml对应的xsd.
如:<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--W 3C Schema 由 XMLSpy v2006 U 创建 (http://www.altova.com)-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="bbbb"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="user">
<xs:complexType>
<xs:sequence>
<xs:element ref="username"/>
<xs:element ref="password"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="username">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="aaa"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
一个叫xjc的自带工具负责编译,如xjc -p test test.xsd : -p 指定生成的程序的包名。
会生成两个类:User.java和ObjectFactory.java
测试类:
package test;
import java.io.FileWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
public class Test {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
JAXBContext context = JAXBContext.newInstance(ObjectFactory.class);
Marshaller m = context.createMarshaller();
ObjectFactory obj=new ObjectFactory();
test.User user=obj.createUser();
user.setUsername("xxxx");
user.setPassword("bbbb");
FileWriter fw = new FileWriter("test2.xml");
m.marshal(user,fw);
}
}