本數(shù)據(jù)綁定系列的第三部分演示了如何使用“JSR-031:數(shù)據(jù)綁定,Sun 數(shù)據(jù)綁定規(guī)范申請”中指定的方法,將 xml 元素和屬性轉(zhuǎn)換成 java 對象。這部分主要講述從數(shù)據(jù)的XML 表示移到應(yīng)用程序代碼易于使用的 Java 實(shí)例。第三部分論及通過將 XML 文檔中的嵌套元素取消編組成 Java 對象、測試和用某些實(shí)際示例來使用新的工具。
本系列的目標(biāo)是演示如何將 XML 元素轉(zhuǎn)換成 Java 對象,然后可以使用 Java 語言 accessor 和 mutator 方法直接處理 XML 數(shù)據(jù)。第一部分比較了數(shù)據(jù)綁定和 Java 應(yīng)用程序中其它處理 XML 數(shù)據(jù)的方法,分析了設(shè)計決策,還定義了示例 Web 服務(wù)配置文檔的 XML 模式。第二部分說明了如何從 XML 模式生成接口和實(shí)現(xiàn),以便符合 XML 模式的 XML 文檔可以轉(zhuǎn)換成這些生成類的實(shí)例。
在第三部分(共四部分)中,將完成基礎(chǔ)知識的講解,并且描述了如何精心設(shè)計代碼以執(zhí)行取消編組,取消編組將完成將 XML 轉(zhuǎn)換成 Java 對象的過程。執(zhí)行了取消編組后,可以使用測試類(已包括在內(nèi))來檢查是否所有部分都已正確組合在一起。本系列的每一部分都建立在其它部分的基礎(chǔ)之上,所以假如您還沒有看過第一和第二部分,您也許會看不懂本文中的一些描述。假如要回顧專門的詞匯表,請參閱術(shù)語解釋側(cè)欄。
使用第一部分中為 WebServiceConfiguration 定義的 XML 模式(請參閱更新版本)和第二部分中的接口,即將創(chuàng)建為配置數(shù)據(jù)的特定實(shí)例提供數(shù)據(jù)的 XML 文檔。任何符合模式的 XML 文檔都可以編組成 Java 對象。這些對象應(yīng)該是使用 SchemaMapper 類生成的類的實(shí)例。當(dāng)然,最終結(jié)果就是數(shù)據(jù)綁定。 制作 XML 實(shí)例文檔
創(chuàng)建符合模式的 XML 文檔 -- 通常叫做 XML 實(shí)例 -- 很簡單。文檔必須只提供與模式中定義的約束相匹配的數(shù)據(jù)值,如清單 1 所示。
清單 1. 符合示例 XML 模式的 XML 實(shí)例文檔
<?xml version="1.0"?>
<webServiceConfiguration xmlns="http://www.enhydra.org" xmlns:xsi="http://www.w3.org/1999/XMLSchema/instance" xsi:schemaLocation="http://www.enhydra.org configuration.xsd" version="1.1" name="Unsecured Web Listener" >
清單 1 中的示例完整地顯示了 WebServiceConfiguration 的實(shí)例。實(shí)例文檔包括了兩個名稱空間聲明。第一個是缺省名稱空間聲明,請參考 http://www.enhydra.org。這表示所有沒有前綴的元素會分配到此名稱空間。雖然,在本示例中不需要聲明缺省名稱空間,它還給予了文檔一些身份。這個缺省名稱空間有助于將該文檔與其它有相似或等同元素名稱的 XML 文檔區(qū)分出來。
定義的另一個名稱空間分配給 xsi 前綴,所以帶該前綴的所有元素都分配到此名稱空間。它 (http://www.w3.org/1999/XMLSchema/instance) 引用“XML 模式實(shí)例規(guī)范”的 URI。該規(guī)范依次定義了 XML 文檔如何引用文檔符合的 XML 模式。最后,schemaLocation 屬性引用 XML 模式。該屬性的第一個變量是受到約束的名稱空間(示例缺省名稱空間,它包括文檔中的每個元素)。第二個變量,用空格與第一個變量分開,引用 XML 模式的實(shí)際位置。本例中,模式 configuration.xsd 是一個本地文件,它與文檔在同一個目錄中。也可以通過使用 URL 來引用網(wǎng)絡(luò)上任意位置的模式。
在缺省名稱空間中,附加屬性(因?yàn)樗鼈儧]有前綴)定義了版本 (1.1) 和名稱 (Unsecured Web Listener)。
接著,聲明了模式中的 Port 對象,并定義了它的數(shù)據(jù):端口號為 80,協(xié)議是 http。正確取消編組成 Java 代碼后,該文檔就變成了 WebServiceConfigurationImpl 類的實(shí)例。然后,Java 代碼可以使用本系列第二部分中設(shè)計的接口 WebServiceConfiguration,以使用基本 XML 文檔中的數(shù)據(jù)。(請注重,可能會在應(yīng)用程序中執(zhí)行驗(yàn)證,如模式驗(yàn)證側(cè)欄中所概述的。)
模式驗(yàn)證
較新的 XML 語法分析器,如 Apache Xerces 語法分析器的當(dāng)前發(fā)行版,答應(yīng)對 XML 實(shí)例文檔執(zhí)行模式驗(yàn)證。驗(yàn)證答應(yīng)在程序格式上確保 XML 文檔符合它引用的 XML 模式。請與語法分析器供給商聯(lián)系或參考文檔,以確定語法分析器是否支持模式驗(yàn)證,其驗(yàn)證范圍,以及如何打開驗(yàn)證。