一。概述
JAXB(java Architecture for xml Binding)是由 J2EE 體系中標(biāo)準(zhǔn)的 XML schema 和 Java 數(shù)據(jù)綁定框架,開發(fā)者可以使用 JAXB 方便地在 Java 應(yīng)用程序中進行XML 數(shù)據(jù)和 Java 對象的轉(zhuǎn)換。JAXB 提供了將 XML 文檔解析為 Java 內(nèi)容樹的方法,以及將 Java 內(nèi)容樹重新寫回 XML 文檔的方法。同時 JAXB 還提供了基于 XML schema 生成 Java 類以及從 Java 類生成 XML schema 的支持。二。JAXB 框架分為以下三個組成部分:
schema 編譯器:schema 編譯器以 XML schema 為輸入生成和 schema 相對應(yīng)的 Java 類集,生成的 Java 類中會根據(jù) schema 的結(jié)構(gòu)自動包含了相應(yīng)的 JAXB 注解。 比方說 schema 里的一個元素映射的 Java 類會自動用 @XmlType 注解加以標(biāo)注,一個元素的屬性所映射的 Java 字段會自動用 @XmlElement 注解加以標(biāo)注;
schema 生成器:schema 生成器以包含 JAXB 注解的 Java 類集為輸入生成相應(yīng)的 XML schema。比方說一個包含 @XmlType 注解的 Java 類在生成的schema 中會被映射為一個元素;
JAXB 運行環(huán)境:JAXB 運行時環(huán)境提供了兩個基本的操作用于 XML 文檔的訪問,操作以及驗證等等:marshal、unmarshal,這兩個操作也是 XML 和 Java 綁定的基礎(chǔ)。Marshal 是指將一個內(nèi)存對象以 XML 文檔形式進行編組處理的過程,unmarshal 則是一個相反的過程,將一個 XML 文檔解析為內(nèi)存對象的過程。

三。JAXB基礎(chǔ)---XML SchemaXML schema 是 XML 文檔的格式定義,是 DTD 的替代產(chǎn)品用于約束 XML 文檔內(nèi)容及結(jié)構(gòu),比如它定義了 XML 文檔可以出現(xiàn)的元素,元素出現(xiàn)的順序,元素具有的屬性等。XML schema 本身就是一個 XML 文檔,因此天然具有了 XML 的可擴展性。同時 XML schema 對 XML 數(shù)據(jù)類型提供了更為豐富的支持。JAXB 框架的基礎(chǔ)就是 XML schema,一個使用 JAXB 的典型場合就是根據(jù)業(yè)務(wù)數(shù)據(jù)模型需要先寫出 XML schema,然后利用 JAXB 框架的綁定編譯器直接生成 XML 相應(yīng)的 Java 類集。四。JAXB與WEB服務(wù)的關(guān)系
JAX-WS 型 Web 服務(wù)將 XML 和 Java 之間的綁定代理給了 JAXB 來完成,也就是說在 Web 服務(wù)調(diào)用過程中的 XML 數(shù)據(jù)和 Java 對象間轉(zhuǎn)換都是由 JAXB 框架來完成的。Web 服務(wù)中接口引用的參數(shù)、返回類型等等數(shù)據(jù)類型描述都是在關(guān)聯(lián)的 XML schema 中定義的,而 JAXB 框架也正是根據(jù)這個 Web 服務(wù)關(guān)聯(lián)的 XML schema 來完成于 Java 對象之間的相互映射。從 Java 到 XML schema 的映射開發(fā)者可以通過 JAXB 提供的注解來完成,在編程 Java 類時可以使用 JAXB 豐富的注解輕松地完成綁定定制。五。使用JAXB來定制WEB服務(wù)@XmlRootElement 注解用于標(biāo)注類或枚舉類型,用它標(biāo)注的類在映射后的 schema 中會以一個全局元素的形式出現(xiàn)
參數(shù):name 定制映射的 schema 全局元素的名稱,一般來說以 @XmlRootElement 標(biāo)注的類在相應(yīng)的 XML 文檔中會以最外層或根節(jié)點形式出現(xiàn)。
namespace 定義這個根節(jié)點命名空間, XML元素的名稱空間名例:

@XmlaccessorType 定義映射這個類中的何種類型需要映射到XML。 可接收四個參數(shù),分別是:
XmlAccessType.FIELD:映射這個類中的 PRivate 非靜態(tài)所有字段到XML
XmlAccessType.PROPERTY:映射這個類中的屬性(get/set方法)到XML
XmlAccessType.PUBLIC_MEMBER:將這個類中的所有public的field或property同時映射到XML(默認(rèn))
XmlAccessType.NONE:不映射例如:@XmlAccessorType(XmlAccessType.FIELD) @XmlAccessorType(value = XmlAccessType.PROPERTY)
@XmlType @XmlType 注解用于標(biāo)注類或枚舉類型,用它標(biāo)注的類在映射后的 schema 中中會以一個 XML 復(fù)雜數(shù)據(jù)類型的形式出現(xiàn)
參數(shù):propOrder 指定映射XML時的節(jié)點順序,來指定輸出順序,來定制映射后的復(fù)雜數(shù)據(jù)類型的內(nèi)容順序
factoryClass 指定UnMarshal時生成映射類實例所需的工廠類,默認(rèn)為這個類本身
factoryMethod 指定工廠類的工廠方法
name 定義XML Schema中type的名稱,定制映射的 XML 數(shù)據(jù)類型的名稱
namespace 指定Schema中的命名空間
例:
@XmlElement 1)@XmlElement 注解用于標(biāo)注 Javabean 的屬性,用它標(biāo)注的屬性在映射后的 schema 中以元素的形式出現(xiàn),所有 Javabean 屬性映射的元素組合成為 @XmlType 映射的復(fù)雜數(shù)據(jù)類型.2)指定一個字段或get/set方法映射到XML的節(jié)點。如,當(dāng)一個類的XmlAccessorType 被標(biāo)注為PROPERTY時,在某一個沒有g(shù)et/set方法的字段上標(biāo)注此注解,即可將該字段映射到XML。
參數(shù):defaultValue 指定節(jié)點默認(rèn)值
name 指定節(jié)點名稱,定制映射后的 XML 元素的名稱
namespace 指定節(jié)點命名空間
required 指定該元素是否必須出現(xiàn).是否必須(默認(rèn)為false)required() 為 true,則將Javabean 屬性映射到一個 minOccurs="1" 的 XML 模式元素聲明 。maxOccurs為 "1" 表示單個賦值的屬性,maxOccurs 為 "unbounded" 則表示多個賦值的屬性。
nillable 該字段是否包含 nillable="true" 屬性(默認(rèn)為false)
type 定義該字段或?qū)傩缘年P(guān)聯(lián)類型例:


@XmlAttribute 指定一個字段或get/set方法映射到XML的屬性。用于標(biāo)注 Javabean 屬性,用它標(biāo)注的屬性在映射后的 schema 中以元素屬性形式表現(xiàn)
參數(shù):name 指定屬性名稱,定制映射后的名稱
namespace 指定屬性命名空間
required 是否必須(默認(rèn)為false,指定是否映射后的屬性為必須出現(xiàn)的例:
這個 Java 類在映射后的 Web 服務(wù) schema 中會表現(xiàn)為:
@XmlTransient 定義某一字段或?qū)傩圆恍枰挥成錇閄ML。如,當(dāng)一個類的XmlAccessorType 被標(biāo)注為PROPERTY時,在某一get/set方法的字段上標(biāo)注此注解,那么該屬性則不會被映射。
@XmlElementWrapper 為數(shù)組元素或集合元素定義一個父節(jié)點。如,類中有一元素為List items,若不加此注解,該元素將被映射為
<items>...</items>
<items>...</items>
這種形式,此注解可將這個元素進行包裝,如:
@XmlElementWrapper(name="items") @XmlElement(name="item") public List items;
將會生成這樣的XML樣式:
<items>
<item>...</item>
<item>...</item>
</items>

@XmlJavaTypeAdapter 自定義某一字段或?qū)傩杂成涞絏ML的適配器。如,類中包含一個接口,我們可以定義一個適配器(繼承自javax.xml.bind.annotation.adapters.XmlAdapter類),指定這個接口如何映射到XML。
@XmlSchema 配置整個包的namespace,這個注解需放在package-info.java文件中。
新聞熱點
疑難解答