soap - 使用 WSDL 指示 WS-A header

标签 soap wsdl ws-addressing

我正在实现一个基于 SOAP 的网络服务,并且已经让 WS-Addressing 正常工作。但是,我看不出如何让 WSDL 发布客户端应该用作 wsa:To 元素值的内容。

我在我的 WSDL 中使用了下面的代码片段,并使用 SOAP-UI 生成请求。 SOAP-UI 似乎认识到 wsa:action 应该设置为“http://myco.com/myOperation”,尽管它不会自动添加此 header 。我必须选择“添加 WS-A header ”菜单选项。

我的问题是它没有添加 wsa:To header 。谁能告诉我如何修改我的 WSDL 以告诉客户需要 wsa:To 并且它的值应该是“http://myco.com/cap/services/v1”?

谢谢

<wsdl:portType name="MyPortType">
    <wsdl:operation name="MyOperation">
        <wsdl:input message="tns:MyRequestMessage" name="Request"
                    wsaw:Action="http://myco.com/myOperation"/>
        <wsdl:output message="tns:MyResponseMessage" name="Response"/>
    </wsdl:operation>
</wsdl:portType>

<wsdl:binding name="MyBinding" type="tns:MyPortType">

    <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsaw:UsingAddressing wsdl:required="true"/>
    <wsdl:operation name="MyOperation">
        <soap:operation soapAction="" style="document"/>
        <wsdl:input>
            <soap:body use="literal"/>
        </wsdl:input>
        <wsdl:output>
            <soap:body use="literal"/>
        </wsdl:output>
    </wsdl:operation>
</wsdl:binding>


<wsdl:service name="MyService">
    <wsdl:port binding="tns:MyBinding" name="MyPort">
        <soap:address location="http://myco.com/services"/>
        <wsa:Address>http://myco.com/cap/services/v1</wsa:Address>
    </wsdl:port>
</wsdl:service>

最佳答案

为了实现这一点,我为 ws 寻址 2005 版本定义了命名空间

<xs:schema ... xmlns:wsa5="http://www.w3.org/2005/08/addressing">
 ....
</xs:schema>

消息类型

<wsdl:message name="wsaHeader">
        <wsdl:part name="MessageID" element="wsa5:MessageID" />
        <wsdl:part name="RelatesTo" element="wsa5:RelatesTo" />
        <wsdl:part name="From" element="wsa5:From" />
        <wsdl:part name="ReplyTo" element="wsa5:ReplyTo" />
        <wsdl:part name="FaultTo" element="wsa5:FaultTo" />
        <wsdl:part name="To" element="wsa5:To" />
        <wsdl:part name="Action" element="wsa5:Action" />
</wsdl:message>

然后在我的输入和输出中放置了以下标签。

<wsdl:input>
    <soap:header use="literal" message="tns:wsaHeader" part="Action"/>
    <soap:header use="literal" message="tns:wsaHeader" part="To"/>
    <soap:header use="literal" message="tns:wsaHeader" part="FaultTo"/>
    <soap:header use="literal" message="tns:wsaHeader" part="ReplyTo"/>
    <soap:header use="literal" message="tns:wsaHeader" part="From"/>
    <soap:header use="literal" message="tns:wsaHeader" part="RelatesTo"/>
    <soap:header use="literal" message="tns:wsaHeader" part="MessageID"/>
    <soap:body use="literal" />
  </wsdl:input>
  <wsdl:output>
    <soap:header use="literal" message="tns:wsaHeader" part="Action"/>
    <soap:header use="literal" message="tns:wsaHeader" part="To"/>
    <soap:header use="literal" message="tns:wsaHeader" part="FaultTo"/>
    <soap:header use="literal" message="tns:wsaHeader" part="ReplyTo"/>
    <soap:header use="literal" message="tns:wsaHeader" part="From"/>
    <soap:header use="literal" message="tns:wsaHeader" part="RelatesTo"/>
    <soap:header use="literal" message="tns:wsaHeader" part="MessageID"/>
    <soap:body use="literal" />
  </wsdl:output> 

您可能只需要为您的目的添加 To 标签。

关于soap - 使用 WSDL 指示 WS-A header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14969253/

相关文章:

node.js - 使用node-soap在soap请求中创建重复的 namespace

soap - 您是否在 WSDL 端口绑定(bind)中使用 'address' 元素的 'location' 属性?

java - 在 session 中存储 Axis 原始 XML 请求/响应(用于 JSP)

java - 如何从基于 WSDL 的 Web 服务中提取详细的架构信息?

java - Spring-WS 中的@PayloadRoot vs @Action vs @SoapAction

java - 如何在 SoapUI JAX-WS 生成的代码中添加 ws-security

java - 从 Java 中的 Web 服务 Oracle SOA Suite 获取信息

java - XFire SOAP 服务器可以向客户端发送 HTTP 301 REDIRECT 吗?

web-services - Delphi WSDL Import 不解析扩展派生的类型

java - 如何在 Axis2 客户端中正确使用 WS-Addressing?