`

soap中的bingding style

阅读更多
以前一直没留意这个问题,今天再次复习了下,摘录了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

  • RPC就是按照类似函数调用时所需的信息来组装SOAP消息:操作名作为根元素,参数组成子元素,如:

<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)

 

  • Document就是将SOAP请求和响应,或者说输入输出定义为XML元素,有严格的Schema("document" style means the messages in and out of the service are exactly as they are describe by the XML Schema in the WSDL).如某个Web Service的WSDL片断:

<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 风格

 

  • Wrapped 风格就是定义与操作同名的Element,将参数作为 Child Element;这样操作名又重新回到了SOAP消息中,如WSDL片断:

<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和Document的区别

    - **RPC/Encoded**:此样式将方法名映射为SOAP消息中的根元素,同时在SOAP消息中编码参数类型信息。WSDL示例中展示了`&lt;soap:body use="encoded" ...&gt;`,表示使用编码方式。这意味着服务调用看起来像远程过程调用,...

    soap1.1和soap1.2区别

    而在 SOAP 1.2 中,这个信息被移到了 SOAP 消息的体中去了。 第三,SOAP 1.1 和 SOAP 1.2 的命名空间(Namespace)不同。SOAP 1.1 使用 "http://schemas.xmlsoap.org/soap/envelope/" 作为命名空间,而 SOAP 1.2 ...

    SOAP示例,轻松学SOAP

    2. **SOAP Encoding Style**: `soap:encodingStyle`属性指定了SOAP消息中数据类型的编码方式。在这个例子中,它引用了W3C的SOAP编码风格规范。 3. **SOAP Body**: `&lt;soap:Body&gt;`元素包含SOAP消息的主要内容,即实际...

    soap-build生成Soap接口请求报文

    在IT行业中,SOAP(Simple Object Access Protocol)是一种用于交换结构化信息的标准协议,常用于Web服务。它基于XML,提供了一种在不同应用程序之间交换数据的统一方式。本篇文章将详细探讨如何使用“soap-build”...

    SOAP协议规范 中文的

    SOAP设计的主要目的是在分散或分布式环境中提供一种轻量级、结构化的信息交换机制。SOAP协议不涉及具体的编程模型或特定语义的实现,而是通过定义标准组件的包模型和数据编码规则,使得它能应用于多种系统,从消息...

    拼接soap,判断soap是否连接成功,返回接口的信息,解析soap报文,解析后的soap转成实体

    在IT行业中,尤其是在Web服务开发领域,SOAP(Simple Object Access Protocol)是一种常见的用于交换结构化信息的协议。它基于XML,常用于实现分布式系统之间的通信。本教程将围绕标题和描述中的关键知识点展开,...

    Web Service SOAP Client set SOAP Header

    当涉及到Web Service客户端与服务器之间的交互时,有时需要在SOAP消息中添加额外的信息,例如身份验证或安全凭证,这就是SOAP Header的作用。SOAP Header是SOAP Envelope的一部分,它允许扩展和自定义消息处理。 在...

    soap框架中文介绍

    SOAP(Simple Object Access Protocol)是一种轻量级协议,用于在分布式环境中交换结构化信息。 SOAP 利用 XML 技术定义了一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。 SOAP 的...

    java调用soap接口案例

    Java调用SOAP(Simple Object Access Protocol)接口是Web服务交互中的常见操作,SOAP是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息。本案例主要关注如何使用Java来实现SOAP请求并获取响应,具体我们...

    SOAP 的简要 描述

    &lt;SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"&gt; &lt;SOAP-ENV:Header&gt; ... &lt;/SOAP-ENV:Header&gt; &lt;SOAP-ENV:Body&gt; ...

    thinkphp下使用soap

    thinkphp内使用soap 把下载的soap解压放到ThinkPHP\Extend\Vendor目录下 名字是soap 调用方法: function test($url,$method,$data){ vendor('soap.class#nusoap'); //从soap目录导class.nusoap.php类文件 $...

    MFC下实现SOAP服务端和SOAP客户端

    SOAP是一种基于XML的协议,用于在分布式环境中交换结构化和类型化的信息。在本场景中,我们将探讨如何使用MFC结合gSoap库来完成这一过程。 首先,我们来看SOAP服务端的实现。在MFC中,可以使用CInternetServer类...

    SOAP资料,介绍SOAP协议

    **SOAP(Simple Object Access Protocol)协议**是一种基于XML(Extensible Markup Language)的协议,用于在Web服务中传递结构化和类型化的信息。SOAP允许应用程序通过HTTP、SMTP等传输协议进行通信,使得不同系统...

    Laravel开发-laravel-soap Soap 协议客户端

    总结来说,`laravel-soap`为Laravel开发者提供了便捷的SOAP协议客户端支持,使得在Laravel项目中集成和调用SOAP服务变得更加简单。通过理解SOAP协议的基本概念和`laravel-soap`的使用方式,开发者可以更好地实现跨...

    SOAP Version 1.2中文手冊.doc

    SOAP(Simple Object Access Protocol)是一种基于XML的协议,主要用于在分布式环境中进行结构化和类型化信息的对等交换。SOAP 1.2是其一个重要版本,由W3C(World Wide Web Consortium)发布,旨在提供一种简单且轻...

    SoapToolkit30 安装包

    2. **SOAP动作**:SOAP动作是SOAP消息中的一个可选元素,它提供了关于请求操作的信息,帮助服务端识别客户端所请求的具体操作。 3. **WSDL(Web Services Description Language)**:SOAP Toolkit 3.0支持WSDL,这...

    SOAP webserivce 和 RESTful webservice 对比及区别

    相比之下,SOAP服务的安全控制通常涉及更复杂的XML消息验证和处理,因为所有的业务逻辑和安全信息都封装在SOAP消息中。这可能导致在现有的HTTP代理服务器上实现安全策略时遇到困难,因为代理可能无法直接解析和处理...

    iOS中的Soap请求

    在iOS开发中,SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于交换结构化信息。它被广泛用于Web服务,允许应用程序通过HTTP发送和接收数据。本篇将深入探讨如何在iOS应用中实现SOAP请求。 一、...

    soap请求的工具

    SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于在Web服务中交换结构化和类型化的信息。SOAP请求是Web服务交互的核心,它允许客户端发送数据到服务端,并接收响应。本工具专为测试SOAP请求及查看其...

Global site tag (gtag.js) - Google Analytics