`

literal和encoded

 
阅读更多
   <binding name="MathSoapHttpBinding" type="y:MathInterface">
      <soap:binding style="document"
             transport="http://schemas.xmlsoap.org/soap/http"/>
      <operation name="Add">
         <soap:operation
                   soapAction="http://example.org/math/#Add"/>
         <input>
            <soap:body use="literal"/>
         </input>
         <output>
            <soap:body use="literal"/>
         </output>
      </operation>
          ...
   </binding>

    The soap:binding element indicates that this is a SOAP 1.1 binding. It also indicates the default style of service (possible values include document or rpc)
along with the required transport protocol (HTTP in this case). The soap:operation element defines the SOAPAction HTTP header value for each operation. And
the soap:body element defines how the message parts appear inside of the SOAP Body element (possible values include literal or encoded). There are other binding-specific details that can be specified this way.

     Using document style in SOAP indicates that the body will contain an XML document, and that the message parts specify the XML elements that will be placed
there. Using rpc style in SOAP indicates that the body will contain an XML representation of a method call and that the message parts represent the parameters to the method.

     The use attribute specifies the encoding that should be used to translate the abstract message parts into a concrete representation. In the case of
'encoded', the abstract definitions are translated into a concrete format by applying the SOAP encoding rules. In the case of 'literal', the abstract type
definitions become the concrete definitions themselves (they're 'literal' definitions). In this case, you can simply inspect the XML Schema type definitions
to determine the concrete message format.


RPC/encoded

WSDL片段:
<message name="myMethodRequest">
    <part name="x" type="xsd:int"/>
    <part name="y" type="xsd:float"/>
</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 xsi:type="xsd:int">5</x>
            <y xsi:type="xsd:float">5.0</y>
        </myMethod>
    </soap:body>
</soap:envelope>
RPC/literal

WSDL片段:
<message name="myMethodRequest">
    <part name="x" type="xsd:int"/>
    <part name="y" type="xsd:float"/>
</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>
            <y>5.0</y>
        </myMethod>
    </soap:body>
</soap:envelope>


RPC/literal

WSDL片段:
<message name="myMethodRequest">
    <part name="x" type="xsd:int"/>
    <part name="y" type="xsd:float"/>
</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>
            <y>5.0</y>
        </myMethod>
    </soap:body>
</soap:envelope>
Document/literal

WSDL片段:
<types>
    <schema>
        <element name="xElement" type="xsd:int"/>
        <element name="yElement" type="xsd:float"/>
    </schema>
</types>

<message name="myMethodRequest">
    <part name="x" element="xElement"/>
    <part name="y" element="yElement"/>
</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>
        <yElement>5.0</yElement>
    </soap:body>
</soap:envelope>


从上面的比较可以看出,literal优于encoded的地方在于可以避免将具体的类型描述(如xsi:type="xsd:int")放在SOAP中,这可以节省不少数据流量;
Document优于RPC的地方在于它将使用Shema确定数据类型便于SOAP格式的验证,但是它却在SOAP消息中丢去了具体的方法标签,不利于服务分发层定位具体的服务实现。
鉴于上面的讨论,我们给出了一种更好的解决办法,即使用
Document/literal wrapped 模式

参考:http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/
分享到:
评论

相关推荐

    axis1.4 + document/literal 实例

    在SOAP消息交换中,有两种主要的绑定风格:RPC(远程过程调用)/encoded和document/literal。RPC/encoded风格更像传统的远程方法调用,而document/literal风格则更加关注数据,与具体的编程模型解耦。document/...

    不同wsdl样式对应的soap消息格式

    通过示例说明document/literal、document/literal(wrapped)、rpc/encoded、rpc/literal样式的web服务对应的soap消息格式,对于理解webservice有很大好处,尤其是根据wsdl构造soap消息,非常有价值。

    WSDL样式详解,soap中Rpc和Document的区别

    - **RPC/Literal**:与Encoded不同,Literal风格不编码类型信息,而是直接使用XML schema定义的数据类型。这样使得消息更易读,更符合XML标准,但可能需要客户端和服务端有共同的类型理解。 2. Document样式: - ...

    自定义SOAP消息详细解释

    例如,可以通过设置不同的属性来改变参数在SOAP Body中的表示方式,以适应不同的编码风格,如Encoded和Literal。 Encoded风格是SOAP规范第5节中定义的,它使用了一套特殊的编码规则来表示复杂的数据类型,允许处理...

    WSDL 文件及其属性

    四种组合分别是`rpc/encoded`、`rpc/literal`、`document/encoded`和`document/literal`。`document/encoded`由于复杂性和互操作性问题,通常不被推荐使用。`rpc/encoded`虽然可以表示复杂的对象图和多态数据,但也...

    SoapUI经典教程

    * SOAP编码(soap-encoded/literal):SOAP支持两种编码方式:soap-encoded和literal。Soap-encoded是一种基于XML schema的编码方式,而literal是一种基于文本的编码方式。 * 消息类型(document/rpc):SOAP支持两...

    WSDL绑定样式各种组合优劣势比较

    综上所述,虽然所有这些绑定模型都有其适用场景,但在现代Web服务开发实践中,`Document/Literal`和`Document/Literal Wrapped`模型因其更好的性能、灵活性及可扩展性而被广泛推荐和采用。这两种模型不仅减少了服务...

    Approaches and Best Practices in Web Service Style, Data Binding and Validation.pdf

    - **RPC绑定风格**:RPC风格支持两种编码方式,即`encoded`和`literal`。 - RPC/Encoded:参数被编码成一组键值对,适合简单的调用场景。 - RPC/Literal:参数以XML元素的形式传递,提供更好的类型信息和可读性。 ...

    SOAP协议规范——SOAP详解

    SOAP支持两种编码规则,即SOAP 1.1的RPC/Literal和SOAP 1.2的Encoded。RPC/Literal直接将方法调用和参数映射到SOAP消息,而Encoded则允许更复杂的类型编码,但其复杂性也导致了使用上的困难。 5. **WSDL(Web ...

    关于webservice的一些细节注意

    6. **SOAP消息编码**:SOAP有两种编码方式:Simple Object Access Protocol (SOAP) 1.1默认的RPC/Encoded风格和Document/Literal风格。RPC/Encoded风格更适合远程过程调用,而Document/Literal风格更接近XML文档,...

    Axis中文技术文档

    Axis支持多种SOAP消息编码风格,包括RPC/encoded、RPC/literal和Document/literal。理解这些编码方式有助于优化服务性能和互操作性。 7. **WSDL描述** WSDL(Web服务描述语言)是定义Web服务接口的标准。Axis可以...

    java webService 中文与英文教程

    3. 消息处理:介绍消息模式,如RPC/encoded、RPC/literal和Document/literal。 4. 异常处理:讲解如何处理Web服务中的异常,以及如何定义和抛出自定义异常。 5. 安全性:探讨如何使用WS-Security和其他安全标准保护...

    axis1.4 发布doc/lit格式Web Service

    特别地,`&lt;parameter name="style"&gt;document&lt;/parameter&gt;`和`&lt;parameter name="use"&gt;literal&lt;/parameter&gt;`这两行设置了doc/literal模式。 然后,我们可以通过运行Axis的`wsadmin`工具或者在代码中调用`AxisServer`...

    web service

    这包括基础协议绑定(如SOAP over HTTP)、消息模式(如RPC/encoded和Document/Literal)以及各种安全模型。 在实际项目中,开发人员可能会遇到一些挑战,例如数据类型的映射、错误处理、安全性配置等。Axis提供了...

    axis2传送list资源包

    在处理List数据时,Axis2支持多种消息交换模式,包括RPC/encoded和RPC/literal。RPC/literal模式尤其适合传递Java List对象,因为它是基于WSDL的直接映射,能保持原始数据类型。 压缩包中的其他库文件扮演着关键...

    Componente-IndySoap1.0.7z

    - 支持各种编码风格,如RPC/Encoded和Document/Literal。 - 自动处理XML到Delphi对象和 vice versa 的转换。 总之,Componente-IndySoap1.0.7z 提供了一整套用于在Delphi环境中开发SOAP应用程序的工具和组件,帮助...

    webservice cxf 开发实战

    此外,理解数据绑定和消息交换模式(如RPC/Encoded、Document/Literal等)也是重要的一步。 在RESTful服务的实现中,CXF支持JAX-RS标准,使得创建RESTful服务如同编写普通的Java方法一样简单。开发者会学习如何使用...

    soap-2_3_1

    6. **消息编码**:SOAP支持多种编码规则,如RPC/encoded和Document/Literal。这些编码规则影响如何将函数调用和参数转化为XML消息。开发者需要理解这些编码以便正确地使用SOAP API。 7. **兼容性和互操作性**:SOAP...

    开源技术讲座Sun 济南地区开源大使田贯升

    JAX-WS 2.0 Web服务允许POJO类通过注解发布为Web服务,支持SOAP绑定,包括RPC/Document和Encoded/Literal模式。EJB 3.0也引入了POJO作为核心概念,简化了Bean的定义和实现。 ### GlassFish:Sun的企业级开源应用...

    jboss-5.1.0.GA配置指南

    - **RPC/Encoded**:一种传统的Web服务调用方式,数据以编码形式传输。 - **端点和服务实现**: - **POJO作为端点**(Plain Old Java Object as Endpoint):简单介绍了如何使用普通的Java对象作为Web服务的端点。...

Global site tag (gtag.js) - Google Analytics