以前一直没留意这个问题,今天再次复习了下,摘录了BLOGJAVA上一位兄弟的文章,总结的不错,现收藏之。
就是所谓RPC与Document或者Wrapped,Literal与Encoding
先说Literal与Encoding
-
Literal就是不在SOAP消息中表明数据类型,而通过其它方式获知数据类型,这种方式是开发包相关的,没有什么标准;如<x>50</x>,单从SOAP消息,你无法判断50是数字还是字符串,而具体的类型可以在开发包将SOAP请求映射到具体的Service类时来确定并完成转换,对于返回值也一样,客户端可已通过SetReturnValueType(...)之类的方法告知开发包自己期待什么类型
-
Encoding就是在SOAP消息中携带类型信息,并且依据某种规则将数据编码传递,接收端可以根据类型信息和编码规则完成解码,获得原始数据;如<x xsi:type="xsd:string">50</x>
再看看RPC与Document
<envelope><body><myMethod><x>5</x><y>8</y></myMethod></body></envelope> (RPC/Literal)
<envelope><body><myMethod><x type=string>5</x><y type=int>8</y></myMethod></body></envelope> (RPC/Encoded)
|
<types> <schema> <element name="xElement" type="xsd:int"/> </schema> </types>
<message name="myMethodRequest"> <part name="x" element="xElement"/> </message> <message name="empty"/>
<portType name="PT"> <operation name="myMethod"> <input message="myMethodRequest"/> <output message="empty"/> </operation> </portType>
则对应的SOAP消息如下:
<soap:envelope> <soap:body> <xElement>5</xElement> </soap:body> </soap:envelope>
然而这种方式没有在SOAP消息中包含操作名,所以如果两个不同的操作具有相同的输入,开发包有可能无法决定把请求转发到哪个函数,为避免这种情况,开发包一般为每个操作的输入输出都产生具有唯一名称的Element,不管它们是否内容相同;或者作为开发者,你可以选择 Wrapped 风格
|
<types> <schema> <element name="myMethod"/> <complexType> <sequence> <element name="x" type="xsd:int"/> </sequence> </complexType> </element> </schema> </types> <message name="myMethodRequest"> <part name="parameters" element="myMethod"/> </message> <message name="empty"/>
<portType name="PT"> <operation name="myMethod"> <input message="myMethodRequest"/> <output message="empty"/> </operation> </portType>
对应的SOAP消息:
<soap:envelope> <soap:body> <myMethod> <x>5</x> </myMethod> </soap:body> </soap:envelope>
这种方式也具有明显的弱点:无法方便的处理重载,因为XML Schema不允许定义相同名称的元素;这样,即使你的后台编程语言支持函数重载,你也应该尽量避免使用
|
分享到:
相关推荐
对wsdl的格式进行分析,主要讲解soap服务中rpc和doucumnet的不同之处。
4.1.1 SOAP encodingStyle属性 6 4.1.2 封装版本模型 7 4.2 SOAP头 7 4.2.1 使用头属性 7 4.2.2 SOAP actor属性 7 4.2.3 SOAP mustUnderstand属性 8 4.3 SOAP体 8 4.3.1 SOAP头和体的关系 8 4.4 SOAP错误 9 4.4.1 ...
soap资料soap资料soap资料soap资料soap资料
基于REST的软件体系结构风格(Software Architecture Style)称之...按照REST原则设计的软件、体系结构,通常被称为“REST式的”(RESTful),在本文中以下称之为 RESTful Web服务,以便于和基于SOAP的Web服务区别。
thinkphp内使用soap 把下载的soap解压放到ThinkPHP\Extend\Vendor目录下 名字是soap 调用方法: function test($url,$method,$data){ vendor('soap.class#nusoap'); //从soap目录导class.nusoap.php类文件 $...
在Web-service 调用SOAP 新增加SOAP的配置信息。用于验证用户信息。
SOAP 1.2为在一个松散的、分布的环境中使用XML对等地交换结构化的和类型化的信息提供了一个简单且轻量级的机制。这是一个基于XML的协议,同时它由四部分组成: 一个作为描述在消息中的内容以及如何处理消息的信息框架...
MFC下实现SOAP服务端和SOAP客户端
SOAP资料,介绍SOAP协议,想对Soap协议研究了就下了看看
SOAP以XML形式提供了一个简单、轻量的用于在分散或分布环境中交换结构化和类型信息的机制。SOAP本身并没有定义任何应用程序语义,如编程模型或特定语义的实现;实际上它通过提供一个有标准组件的包模型和在模块中...
soap的框架介绍,部门中文也有英文。希望对你们有帮助
soap版本1.2的帮助手册
Soap WebService 调试工具
Laravel开发-laravel-soap Soap 协议客户端 肥皂协议客户端
SOAP以XML形式提供了一个简单、轻量的用于在分散或分布环境中交换结构化和类型信息的机制。SOAP本身并没有定义任何应用程序语 义 ,如编程模型或特定语义的实现;实际上它通过提供一个有标准组件的包模型和在模块中...
1,利用java调用soap接口获取天气的信息;2,利用java调用soap一个特定的案例,可按自己的要求修改。
POST /WSShakespeare.asmx HTTP/1.1 SOAP 1.1 request: 报头和 xmlns:soap12不一样
本人在网上看了很多都不能很好的解析报文,就算解析也很难使用,我上传的这个里面将可以拼接soap,判断soap是否连接成功,返回接口的信息,再将报文解析,再转成java实体使用
调用pb开发的webserver(SOAP 1.2) /* POST /webservice/n_webservice.asmx HTTP/1.1 Host: localhost Content-Type: application/soap+xml; charset=utf-8 Content-Length: length <soap12:Envelope xmlns:xsi=...