您的位置:软件 > 开发者网络 > 开发工具 > Java > 正文
SOAP协议初级指南
[文章信息]
作者:petery
时间:2003-10-28
出处:论坛
责任编辑:方舟
[文章导读]
SOAP有助于实现大量异构程序和平台之间的互操作性,从而使存在的应用能够被广泛的用户所访问
advertisement
热点推荐
· 天极网软件频道改版调查
· 10.29软件精选 精简注册表
· 加速启动Win XP操作系统的谬论
· 如何提高Linux操作系统速度
· 精简注册表高级用法——安全篇
[正文]

上一页  1 2 3 4 5 6 7 8 9  下一页

  独立元素

  在SOAP中,一个独立元素表示至少被一个多引用存取元素引用的类型的实例。所有的独立元素用soap:id属性作标记,而且这个属性的值在整个SOAP envelope中必须是唯一的。独立的元素被编码就好象是它们被一个存取元素打包,这个存取元素的标记名是实例的名域限制的类型名。在上面的例子中,实例的名域限制的类型名是t:adjustment。

  SOAP限制独立元素能被编码的场所。SOAP定义了一个能适用于任何元素的属性:(soap:Package)。这个属性被用于控制独立元素能在哪里被解码。SOAP序列化规则指出独立元素必须编码为soap:Header元素或soap:Body元素的直接子元素,或者是任何其它标记为soap:Package=‘true’的元素。通过把一个元素注释为包,你能保证编码那个实例的XML元素是完全自包含的,并且在这个包以外没有任何引用到这个元素的多引用存取元素。

  假设transfer 类对应于一个方法请求。如果transfer类型不是一个包,被to和from存取元素引用的独立元素将作为soap:Body元素的直接子元素出现,如图10所示。如果transfer类型是一个合法的SOAP包类型,编码可能象图11所示。注意,因为transfer元素是一个包,所有多引用存取器元素都引用被包含的元素。这使得把transfer元素看成一个能从它的父辈元素中分离出的独立的XML代码段变得更为容易。

  多引用存取元素总是引用独立元素的模型是有一个例外的。SOAP允许包含字符串和二进值数据的存取元素是多引用存取元素的目标。这意味着下面的代码是合法的:

<t:mytype>
<field1 soap:href="#id1" />
<field2 soap:id="id1">Hello, SOAP</field2>
</t:mytype>

  尽管事实是存取元素2有一个soap:id属性,它实际上是一个存取元素而不是独立元素。

  SOAP数组

  数组被编码为组合类型的一个特殊的例子。在SOAP中,一个数组必须有一个秩(维数)和一个容量。一个数组被编码为一个组合类型,其中每一个数组元素被编码为一个子元素,这个子元素的名字是元素的名域限制的类型名。

  假设有下面的COM IDL类型定义:

struct POINTLIST {
long cElems;
[size_is(cElems)] POINT points[];
};
 
  这个类型的实例将被序列化为:

<t:POINTLIST xmlns:t=‘uri for POINTLIST‘>
<cElems>3</cElems>
<points xsd:type=‘t:POINT[3]‘ >
<POINT>lt;x>3</x>lt;y>4</y>lt;/POINT>
<POINT>lt;x>7</x>lt;y>5</y>lt;/POINT>
<POINT>lt;x>1</x>lt;y>9</y>lt;/POINT>
</points>
<t:POINTLIST>

  如果points域被标记为[ptr]属性,这个编码将用一个多引用存取元素,如下所示:
 
<t:POINTLIST xmlns:t=‘uri for POINTLIST‘>
<cElems>3</cElems>
<points soap:href="#x9" />
</t:POINTLIST>
<t:ArrayOfPOINT soap:id=‘x9‘ xsd:type=‘t:POINT[3]‘>
<POINT>lt;x>3</x>lt;y>4</y>lt;/POINT>
<POINT>lt;x>7</x>lt;y>5</y>lt;/POINT>
<POINT>lt;x>1</x>lt;y>9</y>lt;/POINT>
</t:ArrayOfPOINT>

  当把一个数组编码为一个独立元素时,标记名是带前缀ArrayOf的类型名。

  象NDR和CDR一样,SOAP支持部分转换的数组。如果子元素的数量少于所声明的容量,这些元素被假设正从数组的末尾丢失。这能够通过在正包含的数组元素上使用soap:offset属性来被忽略。

<t:ArrayOfPOINT soap:id=‘x9‘ xsd:type=‘t:POINT[5]‘
soap:offset=‘[1]‘>
<POINT>lt;x>1</x>lt;y>9</y>lt;/POINT>
</t:ArrayOfPOINT>

  soap:offset属性表示出现在数组中的第一个元素的索引。在上面的例子中,元素0,2到4都是不被转换的。SOAP也支持稀疏数组,这是通过使用soap:position属性来把每个元素用它的绝对索引来注释而实现的:

<t:ArrayOfPOINT soap:id=‘x9‘ xsd:type=‘t:POINT[9]‘>
<POINT soap:position=‘[3]‘>lt;x>3</x>lt;y>4</y>lt;/POINT>
<POINT soap:position=‘[7]‘>lt;x>4</x>lt;y>5</y>lt;/POINT>
</t:ArrayOfPOINT>

  在这个例子中,元素0到2,4到6,以及8到9都不是被转换的。

  请注意,在SOAP中数组的精确语法在这篇文章写作时还在被重新审查以调整到即将推出的W3C XML Schema规范中。要不断了解SOAP规范的最新版本来获得更多的细节。
 

上一页  1 2 3 4 5 6 7 8 9  下一页

·"WAP天极之IT新闻资讯,50万元等你拿"    ·天极WAP之游戏狂图,50万元等你下载

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容阅读排行榜
  • 使用Java控制UDP协议
  • 在Java编程中如何使用线程
  • DB2 J2EE开发成本收益分析(三)
  • 使用Java3D实现三维图像
  • JDK1.4下实现访问WIN32注册表
  • 主板超频特色技术ASUS华硕篇
  • 十大年底网游期待大作
  • 竞技游戏美女汉堡MM访谈
  • ATI显卡驱动下载回顾专题
  • 裸露的飞天舞 完全裸机酷图
  • CIG 2004:重庆赛区地点更改通知
  • 10.29软件精选 精简注册表
  • 且看江湖谁主沉浮 金庸群侠魔兽版
  • Advertisement