一。概述
JAXB(java Architecture for xml Binding)是由 J2EE 體系中標準的 XML schema 和 Java 數據綁定框架,開發者可以使用 JAXB 方便地在 Java 應用程序中進行XML 數據和 Java 對象的轉換。JAXB 提供了將 XML 文檔解析為 Java 內容樹的方法,以及將 Java 內容樹重新寫回 XML 文檔的方法。同時 JAXB 還提供了基于 XML schema 生成 Java 類以及從 Java 類生成 XML schema 的支持。二。JAXB 框架分為以下三個組成部分:
schema 編譯器:schema 編譯器以 XML schema 為輸入生成和 schema 相對應的 Java 類集,生成的 Java 類中會根據 schema 的結構自動包含了相應的 JAXB 注解。 比方說 schema 里的一個元素映射的 Java 類會自動用 @XmlType 注解加以標注,一個元素的屬性所映射的 Java 字段會自動用 @XmlElement 注解加以標注;
schema 生成器:schema 生成器以包含 JAXB 注解的 Java 類集為輸入生成相應的 XML schema。比方說一個包含 @XmlType 注解的 Java 類在生成的schema 中會被映射為一個元素;
JAXB 運行環境:JAXB 運行時環境提供了兩個基本的操作用于 XML 文檔的訪問,操作以及驗證等等:marshal、unmarshal,這兩個操作也是 XML 和 Java 綁定的基礎。Marshal 是指將一個內存對象以 XML 文檔形式進行編組處理的過程,unmarshal 則是一個相反的過程,將一個 XML 文檔解析為內存對象的過程。
三。JAXB基礎---XML SchemaXML schema 是 XML 文檔的格式定義,是 DTD 的替代產品用于約束 XML 文檔內容及結構,比如它定義了 XML 文檔可以出現的元素,元素出現的順序,元素具有的屬性等。XML schema 本身就是一個 XML 文檔,因此天然具有了 XML 的可擴展性。同時 XML schema 對 XML 數據類型提供了更為豐富的支持。JAXB 框架的基礎就是 XML schema,一個使用 JAXB 的典型場合就是根據業務數據模型需要先寫出 XML schema,然后利用 JAXB 框架的綁定編譯器直接生成 XML 相應的 Java 類集。四。JAXB與WEB服務的關系
JAX-WS 型 Web 服務將 XML 和 Java 之間的綁定代理給了 JAXB 來完成,也就是說在 Web 服務調用過程中的 XML 數據和 Java 對象間轉換都是由 JAXB 框架來完成的。Web 服務中接口引用的參數、返回類型等等數據類型描述都是在關聯的 XML schema 中定義的,而 JAXB 框架也正是根據這個 Web 服務關聯的 XML schema 來完成于 Java 對象之間的相互映射。從 Java 到 XML schema 的映射開發者可以通過 JAXB 提供的注解來完成,在編程 Java 類時可以使用 JAXB 豐富的注解輕松地完成綁定定制。五。使用JAXB來定制WEB服務@XmlRootElement 注解用于標注類或枚舉類型,用它標注的類在映射后的 schema 中會以一個全局元素的形式出現
參數:name 定制映射的 schema 全局元素的名稱,一般來說以 @XmlRootElement 標注的類在相應的 XML 文檔中會以最外層或根節點形式出現。
namespace 定義這個根節點命名空間, XML元素的名稱空間名例:
@XmlaccessorType 定義映射這個類中的何種類型需要映射到XML。 可接收四個參數,分別是:
XmlAccessType.FIELD:映射這個類中的 PRivate 非靜態所有字段到XML
XmlAccessType.PROPERTY:映射這個類中的屬性(get/set方法)到XML
XmlAccessType.PUBLIC_MEMBER:將這個類中的所有public的field或property同時映射到XML(默認)
XmlAccessType.NONE:不映射例如:@XmlAccessorType(XmlAccessType.FIELD) @XmlAccessorType(value = XmlAccessType.PROPERTY)
@XmlType @XmlType 注解用于標注類或枚舉類型,用它標注的類在映射后的 schema 中中會以一個 XML 復雜數據類型的形式出現
參數:propOrder 指定映射XML時的節點順序,來指定輸出順序,來定制映射后的復雜數據類型的內容順序
factoryClass 指定UnMarshal時生成映射類實例所需的工廠類,默認為這個類本身
factoryMethod 指定工廠類的工廠方法
name 定義XML Schema中type的名稱,定制映射的 XML 數據類型的名稱
namespace 指定Schema中的命名空間
例:@XmlElement 1)@XmlElement 注解用于標注 Javabean 的屬性,用它標注的屬性在映射后的 schema 中以元素的形式出現,所有 Javabean 屬性映射的元素組合成為 @XmlType 映射的復雜數據類型.2)指定一個字段或get/set方法映射到XML的節點。如,當一個類的XmlAccessorType 被標注為PROPERTY時,在某一個沒有get/set方法的字段上標注此注解,即可將該字段映射到XML。
參數:defaultValue 指定節點默認值
name 指定節點名稱,定制映射后的 XML 元素的名稱
namespace 指定節點命名空間
required 指定該元素是否必須出現.是否必須(默認為false)required() 為 true,則將Javabean 屬性映射到一個 minOccurs="1" 的 XML 模式元素聲明 。maxOccurs為 "1" 表示單個賦值的屬性,maxOccurs 為 "unbounded" 則表示多個賦值的屬性。
nillable 該字段是否包含 nillable="true" 屬性(默認為false)
type 定義該字段或屬性的關聯類型例:
@XmlAttribute 指定一個字段或get/set方法映射到XML的屬性。用于標注 Javabean 屬性,用它標注的屬性在映射后的 schema 中以元素屬性形式表現
參數:name 指定屬性名稱,定制映射后的名稱
namespace 指定屬性命名空間
required 是否必須(默認為false,指定是否映射后的屬性為必須出現的例:
@XmlTransient 定義某一字段或屬性不需要被映射為XML。如,當一個類的XmlAccessorType 被標注為PROPERTY時,在某一get/set方法的字段上標注此注解,那么該屬性則不會被映射。
@XmlElementWrapper 為數組元素或集合元素定義一個父節點。如,類中有一元素為List items,若不加此注解,該元素將被映射為
<items>...</items>
<items>...</items>
這種形式,此注解可將這個元素進行包裝,如:
@XmlElementWrapper(name="items") @XmlElement(name="item") public List items;
將會生成這樣的XML樣式:
<items>
<item>...</item>
<item>...</item>
</items>
@XmlJavaTypeAdapter 自定義某一字段或屬性映射到XML的適配器。如,類中包含一個接口,我們可以定義一個適配器(繼承自javax.xml.bind.annotation.adapters.XmlAdapter類),指定這個接口如何映射到XML。
@XmlSchema 配置整個包的namespace,這個注解需放在package-info.java文件中。
新聞熱點
疑難解答