国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

JAXB解析xml轉(zhuǎn)換為POJO

2019-11-09 19:15:40
字體:
供稿:網(wǎng)友

一。概述

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文件中。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 山西省| 临泽县| 济宁市| 南靖县| 讷河市| 布尔津县| 通江县| 三门峡市| 大竹县| 新闻| 扶风县| 扎鲁特旗| 炎陵县| 曲阜市| 朝阳县| 林西县| 遂昌县| 景泰县| 百色市| 兴国县| 永清县| 南城县| 横山县| 龙岩市| 岑巩县| 五寨县| 武穴市| 名山县| 郴州市| 新建县| 藁城市| 新河县| 皋兰县| 聂荣县| 大方县| 宝山区| 惠水县| 永川市| 南华县| 阜宁县| 绍兴县|