文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Value Type to XML Mapping/Binding

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):
1
2
3
4
5
public class Value { public String id; public String name; public byte[] data; } 

這樣一個就可以有很多不同的 Schema 表示方式
比如說 id 作為 sub-element:
1
2
3
4
5
6
7
<complexType name="Value"> <sequence> <element name="id" type="string"/> <element name="name" type="string"/> <element name="data" type="base64Binary"/> </sequence> </complexType> 

id 作為 attribute:
1
2
3
4
5
6
7
<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
2
3
4
5
6
7
<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
2
3
4
5
6
7
8
9
10
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<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.
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载