JAXB概要
JAXB为Java Architecture for XML Binding的缩写,意为XML绑定的JAVA框架。它提供了一套可以简单存取XML数据的API,同时,JAXB可以根据XML的schema自动生成操作XML的JAVA类。利用JAXB,使用JAXB自动生成的操作XML的JAVA类,可以基本上不用考虑XML结构而简单地存取XML数据。
JAXB的下载与安装
JAXB至少需要导入以下jar文件。
- activation.jar
- jaxb-api.jar
- jaxb-impl.jar
- jaxb-xjc.jar
根据情况,可能还会需要其它jar文件。
下载:
可以通过
http://java.sun.com/webservices/downloads/webservicespack.html
下载JAXB。
XML原型
Order.xml
<?xml version="1.0" encoding="utf-8" ?>
<project default="xjc-compile" basedir=".">
<property name="src.dir" location="src" />
<property name="lib.dir" location="lib/jaxb" />
<property name="xml-schema.dir" location="xml-schema" />
<property name="schema.name" value="Orders.xsd" />
<property name="package" value="com.test" />
<path id="classpath">
<fileset dir="${lib.dir}" includes="*.jar" />
</path>
<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask" classpathref="classpath" />
<target name="xjc-compile">
<echo message="Build Jaxb Class from Schema" />
<xjc schema="${xml-schema.dir}/${schema.name}" target="${src.dir}" package="${package}" />
</target>
</project>
在eclipse里新建项目JaxbProject。目录阶层为:
/JaxbProject
--lib
--jaxb
--activation.jar
--jaxb-api.jar
--jaxb-impl.jar
--jaxb-xjc.jar
--src
--xml
--Orders.xml
--xml-schema
--Orders.xsd
--JaxbBuild.xml
执行JaxbBuild ant任务。会在/src/com/test下自动生成以下6个文件
Customer.java
Goods.java
Item.java
ObjectFactory.java
Order.java
Orders.java
(上述生成的java类的构造完全与Orders.xml里的节点构造一样,这里就不给出源代码了)
读取XML数据到JAVA对象
比如我们要读取Orders.xml到Orders对象,可以使用以下代码:
InputStream xmlInputStream = new FileInputStream("Orders.xml");
JAXBContext jc = JAXBContext.newInstance(Orders.class);
// or JAXBContext jc = JAXBContext.newInstance("com.test");
Unmarshaller u = jc.createUnmarshaller();
Orders orders = (Orders) u.unmarshal(xmlInputStream);
xmlInputStream.close();
List<Order> orderList = orders. getOrder();
Order order = orderList.get(0);
Customer customer = order.getCustomer();
Goods goods = order.getGoods();
…
完全没必要理会Orders.xml构造,只要对Orders等对象操作就可以了。
XML数据的保存
OutputStream os = new FileOutputStream("Orders.xml");
Marshaller mu = jc.createMarshaller();
mu.marshal(orders, os); //Orders orders;
小结
便可把
Orders
对
象
结
构保存到
Orders.xml
里。
JAXB简单地实现了XML,JAVA的相互绑定。