1. Style和use的组合
<o:p> </o:p>
use属性可以为literal,encoded;style可以为rpc,document,我们来对五种类型的style/use决定的binding作一比较,分别是rpc/literal, document/literal none-wrapper, document/literal with wrapper, rpc/encoded, 以及document/encoded。<o:p></o:p>
从生成soap消息的角度看,rpc和document的差别在于方法的操作名是否出现在生成的Soap消息中,encoded和literal编码方式的差别在于参数类型是否出现在生成的Soap消息中。
这样rpc/encoded能够完整地表示一个方法调用,但缺点是性能很差,而且不能校验Soap消息的有效性。
rpc/literal不对参数类型进行编码,但仍然无法对Soap消息进行校验。Document/encoded没有意义,因为没有方法名,对参数类型编码没有什么意义。
document/literal none-wrapper无法生成操作名,适用于完整的文档作为参数传递给方法的场景。
document/literal with wrapper应该是目前使用最多的方式,在xfire中也是默认配置。
2. 示例
<o:p> </o:p>
2.1. Java方法
<o:p> </o:p>
public void myMethod(int x);<o:p></o:p>
2.2. Rpc/encoded
<o:p> </o:p>
Rpc风格的特点是message元素的每一个part都必须用type属性定义。encoded用来指明一个类型编码模型,不依赖于XML Schema。
清单 2. 用于 myMethod 的 RPC/编码的 WSDL <o:p></o:p>
<message name="myMethodRequest"><o:p></o:p> <part name="x" type="xsd:int"/><o:p></o:p> </message><o:p></o:p> <message name="empty"/><o:p></o:p> <portType name="PT"><o:p></o:p> <operation name="myMethod"><o:p></o:p> <input message="myMethodRequest"/><o:p></o:p> <output message="empty"/><o:p></o:p> </operation><o:p></o:p> </portType><o:p></o:p> <binding .../> <o:p></o:p> <!-- I won't bother with the details, just assume it's RPC/encoded. --><o:p></o:p> |
<o:p> </o:p>
现在用“5”作为参数 x 的值来调用此方法。我们将发送一个与 清单3类似的 SOAP 消息。
清单 3. 用于 myMethod 的 RPC/编码的 SOAP 消息 <o:p></o:p>
<soap:envelope><o:p></o:p> <soap:body><o:p></o:p> <myMethod><o:p></o:p> <x xsi:type="xsd:int">5</x><o:p></o:p> </myMethod><o:p></o:p> </soap:body><o:p></o:p> </soap:envelope><o:p></o:p> |
<o:p> </o:p>
<o:p> </o:p>
用于我们的方法的 RPC/文字的 WSDL 看起来与 RPC/编码的 WSDL 几乎一样。只是绑定的用法由 编码改为 文字。仅此而已。
4. 用于 myMethod 的 RPC/文字的 WSDL<o:p></o:p>
<message name="myMethodRequest"><o:p></o:p> <part name="x" type="xsd:int"/><o:p></o:p> </message><o:p></o:p> <message name="empty"/><o:p></o:p> <portType name="PT"><o:p></o:p> <operation name="myMethod"><o:p></o:p> <input message="myMethodRequest"/><o:p></o:p> <output message="empty"/><o:p></o:p> </operation><o:p></o:p> </portType><o:p></o:p> <binding .../> <o:p></o:p> <!-- I won't bother with the details, just assume it's RPC/<o:p></o:p> literal. --><o:p></o:p> <o:p></o:p> |
<o:p> </o:p>
RPC/文字的 SOAP 消息去掉了类型编码。
清单 5. 用于 myMethod 的 RPC/文字的 SOAP 消息<o:p></o:p>
<soap:envelope><o:p></o:p> <soap:body><o:p></o:p> <myMethod><o:p></o:p> <x>5</x><o:p></o:p> </myMethod><o:p></o:p> </soap:body><o:p></o:p> </soap:envelope><o:p></o:p> |
<o:p> </o:p>
2.4. document/literal
<o:p> </o:p>
document/literal的主要特点是message元素的每一个part都使用element属性引用一个types下面定义的schema元素。<o:p></o:p>
清单6. 用于 myMethod 的文档/文字的 WSDL<o:p></o:p>
<types><o:p></o:p> <schema><o:p></o:p> <element name="xElement" type="xsd:int"/><o:p></o:p> </schema><o:p></o:p> </types><o:p></o:p> <message name="myMethodRequest"><o:p></o:p> <part name="x" element="xElement"/><o:p></o:p> </message><o:p></o:p> <message name="empty"/><o:p></o:p> <portType name="PT"><o:p></o:p> <operation name="myMethod"><o:p></o:p> <input message="myMethodRequest"/><o:p></o:p> <output message="empty"/><o:p></o:p> </operation><o:p></o:p> </portType><o:p></o:p> <binding .../> <o:p></o:p> <!-- I won't bother with the details, just assume it's <o:p></o:p> document/literal. --><o:p></o:p> <o:p></o:p> |
清单7. 用于 myMethod 的文档/文字的 SOAP 消息<o:p></o:p>
<soap:envelope><o:p></o:p> <soap:body><o:p></o:p> <xElement>5</xElement><o:p></o:p> |
分享到:
相关推荐
对wsdl的格式进行分析,主要讲解soap服务中rpc和doucumnet的不同之处。
wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子
wsdl4j 解析wsdl 文件wsdl4j 解析wsdl 文件wsdl4j 解析wsdl 文件
wsdl中文文档,详细介绍了wsdl文档的结构和用法。
WSDL-中文规范1.1
WSDL中文规范1.1版WSDL中文规范1.1版WSDL中文规范1.1版WSDL中文规范1.1版WSDL中文规范1.1版WSDL中文规范1.1版WSDL中文规范1.1版WSDL中文规范1.1版WSDL中文规范1.1版WSDL中文规范1.1版WSDL中文规范1.1版WSDL中文规范...
此版本是中文简体版本,和djx123456发布的繁体不同。简体的朋友欢迎下载。
Java2WSDL和WSDL2Java操作指南.doc
使用C#开发的一个WSDL解析器。可以从本地或网络获取WSDL文件进行分析。
JavaScript 调用wsdl示例,包含通过dot创建的ws示例
根据wsdl使用gsoap生成的服务器和客户端
而且WSDL1.1规范中笔误太多,笔者就发现了两处,都一一做了修正。 原文的地址在:http://www.w3.org/TR/wsdl,学习WSDL,需要有一定XML,XML Schema XSD,SOAP的相关知识,请在阅读时特别注意。 另外WSDL1.1是一个...
wsdl调用测试工具
简单WSDL实例简单WSDL实例简单WSDL实例简单WSDL实例
wsdl.exe-生成wsdl的代码。wsdl.exe-生成wsdl的代码。
onvif网站下载的原wsdl和xsd文件
赠送jar包:wsdl4j-1.6.3.jar; 赠送原API文档:wsdl4j-1.6.3-javadoc.jar; 赠送源代码:wsdl4j-1.6.3-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
一个用wsdl4j.jar,ws-commons-java5-1.0.1.jar,XmlSchema-1.3.2.jar完全解析wsdl的例子, 本例子原本是xcalia studio中的一个模块,拿来和初次接触的人参考,因为我走了很多弯路,希望别人能少走。
自动生成WSDL服务端描述文件时,泛型集合无法自动映射的解决方法
之前有人写过,但是有点错误,并且描述不是很清晰。这是我的完整解析wsdl的方法 wsdl wsdl wsdl wsdl wsdl wsdl wsdl wsdl wsdl wsdl wsdl