程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 數據綁定之JAXB

數據綁定之JAXB

編輯:關於JAVA

JAXB(Java Architecture for XML Binding)提供了一個快速而方便的方式 綁定XML Schemas和java,使java程序員能夠很方便的在java應用程序中處理XML 數據。JAXB提供了將XML文檔解組為java內容樹的方法,以及將java內容樹重新 編組回XML文檔的方法。JAXB同樣也提供了一種從java對象生成XML Schema的方 式。

這裡有幾個重要的定義:

編組(Marshalling)是把內存中的數據轉化到存儲媒介上的過程。因此在 Java 和 XML 環境中,編組就是把一些 Java 對象轉化成一個(或多個) XML 文檔。在數據庫環境中,則是把 Java 表示的數據存入數據庫。顯然,編組的秘 密在於把 Java 實例中的面向對象結構轉化成適用於 XML 的 扁平結構,或者 RDBMS 中的關系結構(使用 Java 技術轉換到 OODBMS 實際上很簡單)。

解組(Unmarshalling) 是把數據從存儲媒介轉換到內存中的過程--正好與 編組相反。因此需要把 XML 文檔解組到 Java VM 中。這裡的復雜性不是在扁平 數據中,因為這不是必需的,而在於從正確的數據到正確的 Java 代碼變量的映 射。如果映射是錯誤的,就不可能正確地訪問數據。當然,如果再嘗試重新編組 還會造成更大的問題,並且問題傳播得很快。

往返(Round-tripping)可能是最重要也最容易誤解的數據綁定術語。往返 用於描述從存儲媒介到內存然後回到存儲媒介的完整循 環。在 XML 和 Java 技 術環境中,這就意味著從 XML 文檔到 Java 實例變量,然後再回到 XML 文檔。 正確的往返要求,如果中間沒有修改數據,XML 輸入和 XML 輸出應該是等同的 。

生成Java文件:

1.可以通過JAXB的bin中的xjc執行生成操作,命令如下:

xjc –p com.chris.jaxb test.xsd –d gen-src

-p <pkg>:指定生成java文件的package

-d <dir>:指定生成java文件的目錄

其中-d所指定的目錄必須是已經存在的,否則會報:“cowardly refuses to write to a non-existent directory "gen- src"”。

2.使用ant生成

在ant文件中定義一個xjc的task,通過執行該task生成java文件,ant文件的 定義:

<property name="jaxb.home" value="./lib" />
  <path id="classpath">
  <pathelement path="src" />
  <fileset dir="${jaxb.home}" includes="*.jar" />
</path>
<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
  <classpath refid="classpath" />
</taskdef>
<target name="generate" description="generate Java source files">
  <echo message="generate java from schema..." />
  <mkdir dir="gen-src" />
  <xjc schema="test.xsd" package="com.chris.jaxb" destdir="gen-src">
    <produces dir="gen-src/com.chris.jaxb " includes="**/*.java" />
  </xjc>
</target>

編組操作:

利用上面生成的java文件執行編組操作。

JAXBContext context = JAXBContext.newInstance ("com.chris.jaxb");
//create java content tree
PurchaseOrderType po = new PurchaseOrderType();
………..
// create an element for marshalling
JAXBElement<PurchaseOrderType> poElement =(new ObjectFacory ()).createPurchaseOrder(po);
// create a Marshaller and marshal to System.out
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.marshal(poElement, System.out);

解組操作:

通過xml文件執行解組操作。

JAXBContext context = JAXBContext.newInstance ("com.chris.jaxb");
Unmarshaller um = context.createUnmarshaller();
SchemaFactory sf = SchemaFactory.newInstance (XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema sc = sf.newSchema(Main.class.getResource ("test.xsd"));
um.setSchema(sc);
JAXBElement<?> poEle = (JAXBElement<?>) um.unmarshal(new FileInputStream("po.xml"));
PurchaseOrderType pot = (PurchaseOrderType) poElement.getValue ();

JAXB常用操作基本就這些,經過綁定xml和java對象可以很方便的執行一些 xml操作,現在的一些webservice框架也都采用了JAXB作為綁定方式,所以JAXB 的基本原理還是很有必要了解下的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved