xsd:any 是一個用于設計 XML 模式的流行特性。但它所帶來的麻煩常常比它所帶來的價值還要多。了解 xsd:any 在 XML 本身中和 JAX-RPC Java 語言綁定中的一些不足之處后,即使您決定使用 xsd:any,也能為更好地使用它做好準備。
引言
人們為什么喜歡使用 xsd:any 呢?我聽人們談起過很多原因:為了實現松散耦合、為了啟用版本管理、為了獲得完全靈活的多態性。而所有這些理由最終都歸結為不需對 API 進行更改。這是一個很不錯的理由,但在實踐中,使用 xsd:any 既不恰當,也不實際。如果所處的是動態環境,僅處理 XML,則 xsd:any 可能非常合適(也的確如此)。但大多數人并不喜歡動態訪問 XML(即 SAX 或 DOM 或 SAAJ 編程模型)的復雜性,而且,即使他們喜歡這種復雜性,動態性也會受到局限。而 XML 很少存在于“真空環境”中。XML 幾乎總是映射到別的對象或與其他對象進行交互。例如,XML 模式可能作為 Web 服務的一部分而存在,而這意味著將可能處理語言綁定問題。因此,應當對語言綁定將 xsd:any 映射到給定語言的方式加以注意。在本文中,我將重點討論 JAX-RPC Java™ 語言綁定。
使用 xsd:any 的 Web 服務示例
讓我們看一下清單 1 中的 WSDL 文件示例。這是一個簡單的寵物醫院 Web 服務。它定義了一個名為 registerPet 的操作,其輸入信息包含一個 xsd:any。此 WSDL 還定義了兩個寵物類型:cat 和 fish。
清單 1. 使用 xsd:any 的獸醫服務 WSDL
<?xml version="1.0" encoding="UTF-8"?>
<definitions
targetNamespace="urn:any"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="urn:any"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<schema
targetNamespace="urn:any"
xmlns:tns="urn:any"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.w3.org/2001/XMLSchema">
<complexType name="Cat">
<sequence>
<element name="name" type="xsd:string"/>
<element name="breed" type="xsd:string"/>
</sequence>
</complexType>
<complexType name="Fish">
<sequence>
<element name="name" type="xsd:string"/>
<element name="saltWater" type="xsd:boolean"/>
</sequence>
</complexType>
<element name="registerPet">
<complexType>
<sequence>
<any namespace="##any"/>
</sequence>
</complexType>
</element>
<element name="registerPetResponse">
<complexType>
<sequence/>
</complexType>
</element>
</schema>
</types>
<message name="registerPetRequest">
<part name="registerPetRequest" element="tns:registerPet"/>
</message>
文章來源于領測軟件測試網 http://www.kjueaiud.com/