专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »DotNet » soap协议:简单对象协议(SOAP)简介(2) »正文

soap协议:简单对象协议(SOAP)简介(2)

来源: 发布时间:星期三, 2008年9月10日 浏览:155次 评论:0

<br>
存取元素被用作表达类型的域、属性或数据成员。一个给定类型的域在它的SOAP表达将只有一个存取元素。存取元素的标记名对应于类型的域名。考虑下列Java类定义:<br>
<br>
packagecom.bofsoap.IBank;<br>
publicclassadjustment{<br>
publicintaccount;<br>
publicfloatamount;<br>
}<br>
在一个SOAP消息中被序列化的实例如下所示:<br>
<br>
&lt;t:adjustmentxmlns:t=’’urn:develop-com:java:com.bofsoap.IBank’’&gt;<br>
&nbsp;&nbsp;&lt;account&gt;3514&lt;/account&gt;<br>
&nbsp;&nbsp;&lt;amount&gt;100.0&lt;/amount&gt;<br>
&lt;/t:adjustment&gt;<br>
在这个例子中,存取元素account和amount被称着简单存取元素。对引用简单类型的存取元素,元素值被简单地编码为直接在存取元素下的字符数据,如上所示。对引用组合类型的存取元素(就是那些自身用子存取元素来构造的存取元素),有两个技术来对存取元素进行编码。最简单的方法是把被结构化的值直接嵌入在存取元素下。考虑下面的Java类定义:<br>
<br>
packagecom.bofsoap.IBank;<br>
publicclasstransfer{<br>
publicadjustmentfrom;<br>
publicadjustmentto;<br>
}<br>
如果用嵌入值编码存取元素,在SOAP中一个序列化的transfer对象如下所示:<br>
<br>
&lt;t:transferxmlns:t=’’urn:develop-com:java:com.bofsoap.IBank’’&gt;<br>
&lt;from&gt;<br>
&nbsp;&nbsp;&lt;account&gt;3514&lt;/account&gt;<br>
&nbsp;&nbsp;&lt;amount&gt;-100.0&lt;/amount&gt;<br>
&lt;/from&gt;<br>
&lt;to&gt;<br>
&nbsp;&nbsp;&lt;account&gt;3518&lt;/account&gt;<br>
&nbsp;&nbsp;&lt;amount&gt;100.0&lt;/amount&gt;<br>
&lt;/to&gt;<br>
&lt;/t:transfer&gt;<br>
在这种情况下,adjustment对象的值被直接编码在它们的存取元素下。在考虑组合存取元素时,需要说明几个问题。先考虑上面的transfer类。类的from和to的域是对象引用,它可能为空。SOAP用XMLSchemas的null属性来表示空值或引用。下面例子表示一个序列化的transfer对象,它的from域是空的:<br>
<br>
&lt;t:transferxmlns:t=’’urn:develop-com:java:com.bofsoap.IBank’’<br>
xmlns:xsd=’’http://www.w3.org/1999/XMLSchema/instance’’&gt;<br>
&lt;fromxsd:null=’’true’’/&gt;<br>
&lt;to&gt;<br>
&nbsp;&nbsp;&lt;account&gt;3518&lt;/account&gt;<br>
&nbsp;&nbsp;&lt;amount&gt;100.0&lt;/amount&gt;<br>
&lt;/to&gt;<br>
&lt;/t:transfer&gt;<br>
在不存在的情况下,xsd:null属性的隐含值是false。给定元素的能否为空的属性是由XMLSchema定义来控制的。例如下列XMLSchema将只允许from存取元素为空:<br>
<br>
&lt;typename=’’transfer’’&gt;<br>
&lt;elementname=’’from’’type=’’adjustment’’nullable=’’true’’/&gt;<br>
&lt;elementname=’’to’’type=’’adjustment’’nullable=’’false’’/&gt;<br>
&lt;/type&gt;<br>
在一个元素的Schema声明中如果没有nullable属性,就意味着在一个XML文档中的元素是不能为空的。Null存取元素的精确格式当前还在修订中&#0;要了解用更多信息参考最新版本的SOAP规范。<br>
<br>
与存取元素相关的另一个问题是由于类型关系引起的可代换性。由于前面的adjustment类不是一个final类型的类,transfer对象的from和to域实际引用继承类型的实例是可能的。为了支持这种类型兼容的替换,SOAP使用一个名域限定的类型属性的XMLSchema约定。这种类型属性的值是一个对元素具体的类型的限制的名字。考虑下面的adjustment扩展类:<br>
<br>
packagecom.bofsoap.IBank;<br>
publicclassauditedadjustmentextendsadjustment{<br>
publicintauditlevel;<br>
}<br>
给出下面Java语言:<br>
<br>
transferxfer=newtransfer();<br>
xfer.from=newauditedadjustment();<br>
xfer.from.account=3514;<br>
xfer.from.amount=-100;<br>
xfer.from.auditlevel=3;<br>
xfer.to=newadjustment();<br>

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: