本資料繫結系列的第三部分示範了如何使用“JSR-031:資料繫結,Sun 資料繫結規範申請”中指定的方法,將 XML 元素和屬性轉換成 Java 對象。這部分主要講述從資料的 XML 表示移到應用程式代碼便於使用的 Java 執行個體。第三部分論及通過將 XML 文檔中的嵌套元素取消編組成 Java 對象、測試和用某些實際樣本來使用新的工具。
本系列的目標是示範如何將 XML 元素轉換成 Java 對象,然後可以使用 Java 語言 accessor 和 mutator 方法直接處理 XML 資料。 第一部分比較了資料繫結和 Java 應用程式中其它處理 XML 資料的方法,分析了設計決策,還定義了樣本 Web 服務配置文檔的 XML 模式。 第二部分說明了如何從 XML 模式產生介面和實現,以便符合 XML 模式的 XML 文檔可以轉換成這些產生類的執行個體。
在第三部分(共四部分)中,將完成基礎知識的講解,並且描述了如何精心設計代碼以執行取消編組,取消編組將完成將 XML 轉換成 Java 對象的過程。執行了取消編組後,可以使用測試類別(已包括在內)來檢查是否所有部分都已正確組合在一起。本系列的每一部分都建立在其它部分的基礎之上,所以如果您還沒有看過第一和第二部分,您也許會看不懂本文中的一些描述。如果要回顧專門的詞彙表,請參閱 術語解釋側欄。
使用第一部分中為 WebServiceConfiguration 定義的 XML 模式(請參閱 更新版本 )和第二部分中的介面,即將建立為配置資料的特定執行個體提供資料的 XML 文檔。任何符合模式的 XML 文檔都可以編組成 Java 對象。這些對象應該是使用 SchemaMapper 類產生的類的執行個體。當然,最終結果就是資料繫結。
製作 XML 執行個體文檔
建立符合模式的 XML 文檔 -- 通常叫做 XML 執行個體-- 很簡單。文檔必須只提供與模式中定義的約束相匹配的資料值,如清單 1 所示。
清單 1. 符合樣本 XML 模式的 XML 執行個體文檔
<?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"
>
_<port number="80"
牋牋牋_protocol="http"
牋牋牋_protectedPort="false"
_/>
_<document root="/usr/local/enhydra/html"
牋牋牋牋牋_index="*.html,*.xml"
牋牋牋牋牋_error="error.html"
_/>
</webServiceConfiguration>
清單 1 中的樣本完整地顯示了 WebServiceConfiguration 的執行個體。執行個體文檔包括了兩個名稱空間聲明。第一個是預設名稱空間聲明,請參考 http://www.enhydra.org。這表示所有沒有首碼的元素會分配到此名稱空間。雖然,在本樣本中不需要聲明預設名稱空間,它還給予了文檔一些身份。這個預設名稱空間有助於將該文檔與其它有相似或等同元素名稱的 XML 文檔區分出來。
定義的另一個名稱空間分配給 xsi 首碼,所以帶該首碼的所有元素都分配到此名稱空間。它 (http://www.w3.org/1999/XMLSchema/instance) 引用“XML 模式執行個體規範”的 URI。該規範依次定義了 XML 文檔如何引用文檔符合的 XML 模式。最後, schemaLocation 屬性引用 XML 模式。該屬性的第一個變數是受到約束的名稱空間(樣本預設名稱空間,它包括文檔中的每個元素)。第二個變數,用空格與第一個變數分開,引用 XML 模式的實際位置。本例中,模式 configuration.xsd 是一個本地檔案,它與文檔在同一個目錄中。也可以通過使用 URL 來引用網路上任意位置的模式。
在預設名稱空間中,附加屬性(因為它們沒有首碼)定義了版本 (1.1) 和名稱 (Unsecured Web Listener)。
接著,聲明了模式中的 Port 對象,並定義了它的資料:連接埠號碼為 80,協議是 http。正確取消編組成 Java 代碼後,該文檔就變成了 WebServiceConfigurationImpl類的執行個體。然後,Java 代碼可以使用本系列第二部分中設計的介面 WebServiceConfiguration,以使用基本 XML 文檔中的資料。(請注意,可能會在應用程式中執行驗證,如 模式驗證側欄中所概述的。)