JAXB應用指南

Creative Commons License
本作品採用知識共享署名-非商業性使用-相同方式共享 2.5 中國大陸許可協議進行許可。

 

 

JAXB(Java Architecture for XML Binding)是一種特殊的序列化/反序列化工具。它可以使XML數據以Java Objects的形式直接應用於Java程序之中,使Java Objects與XML數據之間的轉換成爲可能。在JAXB中將Java Objects到XML數據的轉換稱爲marshal;XML數據到Java Objects的轉換稱爲unmarshal。

JAXB使用簡圖
如圖所示,使用JAXB分兩步,首先利用xjc命令行程序編譯DTD或Schema文件生成與XML數據結構相對應的JavaBeans類,再通過JAXB API中的marshal與unmarshal操作完成JavaBeans對象與XML數據之間的互換。
JAXB使用了最新的元數據技術,故而只能在JDK 1.5以上版本使用,JAXB的官方網站如下:
https://jaxb.dev.java.net/
可以在其中下載到最新的JAXB。安裝之後的JAXB目錄結構如下:

/JAXB-HOME(path/to/jaxb)
  /bin
  /lib
  /docs

在bin目錄中有所有的JAXB工具,其中包括xjc命令行程序;在lib目錄中可以找到所有JAXB的jar包;在docs目錄中有一個JAXB的使用幫助及API說明。

一. xjc使用幫助

1. 通過命令行編譯
命令行程序xjc用於編譯DTD或Schema生成與XML數據結構對應的JavaBeans類。操作方法如下:

xjc [-xmlschema|-dtd] [–d 保存java文件的目錄] [–p java文件所在的包] <編譯文件>

-xmlschema  指定編譯文件的格式爲Schema格式,此參數是默認值,可以不用提供。
                    如果不提供此參數,編譯文件必須是Schema文件。
-dtd  指定編譯文件的格式爲DTD格式,如果編譯文件是DTD文件則必須提供此參數。
-d  指定了保存java文件的目錄
-p  指定了生成的java文件所在的包

例如編譯當前目錄下的schema.xls文件,java文件保存在src目錄,包名爲generate,其命令如下:
xjc –d src –p generate schema.xsd
如果編譯文件是schema.dta,則命令如下:
xjc –dtd –d src –p generate schema.dtd

 

2. 通過ANT編譯
在/JAXB-HOME/lib目錄中的jaxb-xjc.jar包中包含了XJCTask.class文件,可以依據該類定義一個ant task,通過執行該task生成java文件,task的定義如下:

 <taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
   <classpath>
     <fileset dir="${JAXB-HOME}/lib" includes="*.jar" />
   </classpath>
 </taskdef>

執行xjc task的ant代碼樣例如下:

 <target name="generate" description="generate Java source files">
     <echo message="generate java from schema..." />
     <mkdir dir="src" />
     <xjc schema="books.xsd" package="com.chris.jaxb" destdir="gen-src">
         <produces dir="src/com/chris/jaxb " includes="**/*.java" />
     </xjc>
 </target>

其中
schema 指定DTD或Schema文件的位置;
destdir  指定生成的java文件所保存的根目錄;
package  指定生成的java文件所在的包;
args  指定額外的參數,其中最重要的參數是“-dtd”,如果schema指定的是一個DTD文件,則args中必須提供“-dtd”;
produces  用於在指定目錄中檢查最新版本。

二. 序列化(Marshalling)與反序列化(Unmarshalling)

要想在Java程序中使用JAXB,必須用到以下幾個jar包:

jaxb-api.jar
jaxb-impl.jar
activation.jar
jsr173_1.0_api.jar

以上包均在/JAXB-HOME/lib目錄中可以找到。

JAXB的核心類是JAXBContext類,該類可以根據一個包名或一個類名加載Java Objects。

使用包名加載Java Objects的樣例如:

JAXBContext jc = JAXBContext.newInstance("generate");

其指定的包中必須包含ObjectFactory類,該類由xjc生成,用於生成XML數據所對應的Java Objects。
如果使用類名加載Java Object,例如:

JAXBContext jc = JAXBContext.newInstance(ObjectFactory.class);

其指定的類必須是用於生成Java Objects的工廠類,如ObjectFactory類。

爲了方便使用,下面的代碼封裝了JAXB相關類,樣例以包名加載方式爲主,提供了基本的marshal與unmarshal操作。

使用這個工具類非常簡單,代碼如下:

發佈了27 篇原創文章 · 獲贊 15 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章