Value Type to XML Mapping/Binding
时间:2006-01-12 来源:cjsteven
不論是 .NET 或是 JAVA, 在實作一個 WebService Class 時,
都會希望用較複雜的Class (or non-primitive Type) 作為 method parameter
而不是簡單的Integer, String 之類.
在JAX-RPC (section 5.4) 中 將這類的 Class 叫做 Value Type,
必須要有 Java Bean 的樣子 (setter, getter, or public field) 並符合一些簡單的要求,
WebService Platform/Tool 便可以自動幫你在 WSDL 上產生XML Schema.
然而對 developer 來說, 可能會希望對 Schema Mapping 方式有所控制,
例如我們有這樣一個 Class (C# or JAVA):
這樣一個就可以有很多不同的 Schema 表示方式
比如說 id 作為 sub-element:
id 作為 attribute:
以 hexBinary的格式 encode Byte array:
.NET 允許你用 Attribute 來決定 XML binding/mapping:
在 JAVA 中目前可以找的到的"標準方式"是在 JSR-109 J2EE WebServices 中定義的
jaxrpc mapping deployment descriptor (mapping file).
這是一個 XML 格式的 deployment descriptor, 你可以在這個 mapping file中, 描述
Value type 與 xml schema 之間的 mapping/binding:
在未來的 JSR181, JSR224, 或 JAXB中, 相信也會提供以 Attribute 的
方式來指定value type class 與 xml schema 之間的 binding.
都會希望用較複雜的Class (or non-primitive Type) 作為 method parameter
而不是簡單的Integer, String 之類.
在JAX-RPC (section 5.4) 中 將這類的 Class 叫做 Value Type,
必須要有 Java Bean 的樣子 (setter, getter, or public field) 並符合一些簡單的要求,
WebService Platform/Tool 便可以自動幫你在 WSDL 上產生XML Schema.
然而對 developer 來說, 可能會希望對 Schema Mapping 方式有所控制,
例如我們有這樣一個 Class (C# or JAVA):
1 |
public class Value { public String id; public String name; public byte[] data; } |
這樣一個就可以有很多不同的 Schema 表示方式
比如說 id 作為 sub-element:
1 |
<complexType name="Value"> <sequence> <element name="id" type="string"/> <element name="name" type="string"/> <element name="data" type="base64Binary"/> </sequence> </complexType> |
id 作為 attribute:
1 |
<complexType name="Value"> <sequence> <element name="name" type="string"/> <element name="data" type="base64Binary"/> </sequence> <attribute name="id" type="string"/> </complexType> |
以 hexBinary的格式 encode Byte array:
1 |
<complexType name="Value"> <sequence> <element name="name" type="string"/> <element name="data" type="hexBinary"/> </sequence> <attribute name="id" type="string"/> </complexType> |
.NET 允許你用 Attribute 來決定 XML binding/mapping:
1 |
public class Value { [SoapAttribute(DataType = "string", AttributeName = "id")] public String id; [SoapElement(DataType = "string", ElementName = "name")] public String name; [SoapElement(DataType = "base64Binary", ElementName = "data")] public byte[] data; } |
在 JAVA 中目前可以找的到的"標準方式"是在 JSR-109 J2EE WebServices 中定義的
jaxrpc mapping deployment descriptor (mapping file).
這是一個 XML 格式的 deployment descriptor, 你可以在這個 mapping file中, 描述
Value type 與 xml schema 之間的 mapping/binding:
1 |
<java-xml-type-mapping> <class-type>com.hello.Value</class-type> <root-type-qname xmlns:myPrefix="http://hello/xsd">myPrefix:value </root-type-qname> <qname-scope>complexType</qname-scope> <variable-mapping> <java-variable-name>myID</java-variable-name> <xml-element-name>id</xml-element-name> </variable-mapping> <variable-mapping> <java-variable-name>myName</java-variable-name> <xml-element-name>name</xml-element-name> </variable-mapping> <variable-mapping> <java-variable-name>myData</java-variable-name> <xml-element-name>data</xml-element-name> </variable-mapping> </java-xml-type-mapping> |
在未來的 JSR181, JSR224, 或 JAXB中, 相信也會提供以 Attribute 的
方式來指定value type class 與 xml schema 之間的 binding.
相关阅读 更多 +