SOAP协议初级指南 (二)

</t:transfer>

  这个表达有两个问题。首先最容易理解的问题是同样的信息被发送了两次,这导致了一个比实际所需要消息的更大的消息。一个更微妙的但是更重要的问题是由于反序列化程序不能分辨两个带有同样值的adjustment对象与在两个地方被引用的一个单一的adjustment对象的区别,两个存取元素间的身份关系就被丢失。如果这个消息接收者已经在结果对象上执行了下面的测试,(xfer.to == xfer.from)将不会返回true。

void processTransfer(transfer xfer) {
if (xfer.to == xfer.from)
handleDoubleAdjustment(xfer.to);
else
handleAdjustments(xfer.to, xfer.from);
}

  (xfer.to.equals(xfer.from))可能返回true的事实只是比较了两个存取元素的值而不是它们身份。
为了支持必须保持身份关系的类型的序列化,SOAP支持多引用存取元素。目前我们接触到的存取元素是单引用存取元素,也就是说,元素值是嵌入在存取元素下面的,而且其它存取元素被允许引用那个值(这很类似于在NDR中的[unique]的概念)。多引用存取元素总是被编码为只包含已知的soap:href属性的空元素。soap:href属性总是包含一个代码片段标识符,它对应于存取元素引用到的实例。如果to和from存取元素已经被编码为多引用存取元素,序列化的transfer对象如下所示:

<t:transfer
xmlns:t=‘urn:develop-com:java:com.bofsoap.IBank‘>
<from soap:href=‘#id1‘ />
<to soap:href=‘#id1‘ />
</t:transfer>

  这个编码假设与adjustment类兼容的一个类型的实例已经在envelope中的其它地方被序列化,而且这个实例已经被用soap:id属性标记,如下所示:

<t:adjustment soap:id=‘id1‘
xmlns:t=‘urn:develop-com:java:com.bofsoap.IBank‘>
<account>3514</account>
<amount>-100.0</amount>
</t:adjustment>

  对多引用存取元素,把代码段的标识符(例如#id1)分解到正确的实例是反序列化程序的工作。

  前面的讨论解释了多引用存取元素怎样与它的目标实例相关联。下面要讨论的是目标实例在哪里被序列化。这就关系到独立元素和包的概念。

时间: 2024-10-09 22:57:39

SOAP协议初级指南 (二)的相关文章

SOAP协议初级指南 (一)

SOAP(Simple Object Access Protocal) 技术有助于实现大量异构程序和平台之间的互操作性,从而使存在的应用能够被广泛的用户所访问.SOAP是把成熟的基于HTTP的WEB技术与XML的灵活性和可扩展性组合在了一起. 这篇文章带你全面回顾对象远程进程调用(ORPC)技术的历程,以帮助你理解SOAP技术的基础,以及它克服存在技术(如CORBA和DCOM)的许多缺陷的方法.随后讲述详细的SOAP编码规则,并把焦点放在SOAP是怎样映射到存在的ORPC概念上的. 引言: 当我

SOAP协议初级指南

SOAP(Simple Object Access Protocal) 技术有助于实现大量异构程序和平台之间的互操作性,从而使存在的应用能够被广泛的用户所访问.SOAP是把成熟的基于HTTP的WEB技术与XML的灵活性和可扩展性组合在了一起. 这篇文章带你全面回顾对象远程进程调用(ORPC)技术的历程,以帮助你理解SOAP技术的基础,以及它克服存在技术(如CORBA和DCOM)的许多缺陷的方法.随后讲述详细的SOAP编码规则,并把焦点放在SOAP是怎样映射到存在的ORPC概念上的. 引言: 当我

SOAP协议初级指南 (三)

独立元素 在SOAP中,一个独立元素表示至少被一个多引用存取元素引用的类型的实例.所有的独立元素用soap:id属性作标记,而且这个属性的值在整个SOAP envelope中必须是唯一的.独立的元素被编码就好象是它们被一个存取元素打包,这个存取元素的标记名是实例的名域限制的类型名.在上面的例子中,实例的名域限制的类型名是t:adjustment. SOAP限制独立元素能被编码的场所.SOAP定义了一个能适用于任何元素的属性:(soap:Package).这个属性被用于控制独立元素能在哪里被解码.

简单对象访问协议(SOAP)初级指南

对象|访问 总结:(本文假设读者对COM和XML技术已经很熟悉.)SOAP(Simple Object Access Protocal) 技术有助于实现大量异构程序和平台之间的互操作性,从而使存在的应用能够被广泛的用户所访问.SOAP是把成熟的基于HTTP的WEB技术与XML的灵活性和可扩展性组合在了一起.这篇文章带你全面回顾对象远程进程调用(ORPC)技术的历程,以帮助你理解SOAP技术的基础,以及它克服存在技术(如CORBA和DCOM)的许多缺陷的方法.随后讲述详细的SOAP编码规则,并把焦

基于J2ME平台下SOAP协议的应用

J2ME作为嵌入式系统应用平台得到了迅速的发展,JAVA语言固有的平台无关 性使得基于J2ME平台的嵌入式应用系统具有广阔的前景.受限于嵌入式设备及消 费类电器硬件条件的限制,J2ME平台提供的功能有限,如何能够在有限的资源下 拓展J2ME的功能,使得J2ME平台能够处理SOAP协议是本文研究的重点. 目前企业应用正在向面向WEB服务的SOA架构转变,嵌入式系统与企业应用系 统的连接目前还处于TCP/IP协议.HTTP协议等比较初级的阶段.随着企业应用系 统提供的WEB服务日益广泛和成熟,需要J

php soap-PHP的soap协议下的接口封装

问题描述 PHP的soap协议下的接口封装 PHP soap 接口类封装,作为服务器端,需要进行封装吗?该如何封装? 解决方案 参考 终于解决了PHP调用SOAP过程中的种种问题. 根据业务需要决定是否需要进行封装 解决方案二: 上面的答案有帮助吗?如果还有问题,请提出来,如果对答案满意,请顶一下,并标记为采纳答案,谢谢! 解决方案三: 恩!有帮助,我已经弄懂了,谢谢

android上使用Soap协议

package XXX; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import org.xmlpull.v1.XmlPullParserException; import java

互联网协议入门(二)

上一篇文章分析了互联网的总体构思,从下至上,每一层协议的设计思想. 这是从设计者的角度看问题,今天我想切换到用户的角度,看看用户是如何从上至下,与这些协议互动的. ============================================================== 互联网协议入门(二) 作者:阮一峰 (接上文) 七.一个小结 先对前面的内容,做一个小结. 我们已经知道,网络通信就是交换数据包.电脑A向电脑B发送一个数据包,后者收到了,回复一个数据包,从而实现两台电脑之间的

soap 安卓-安卓soap协议,修改标签命名空间

问题描述 安卓soap协议,修改标签命名空间 安卓使用ksoap2访问接口,但是发出去的请求标签头 都是 v:开头.头位件是否需要修改, 我的都文件 都是 xmlns:d, xmlns:c ,然后对方给出的规范似乎不一样. 是我用错了工具? xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http: