如何使用 SOAP UI 创建有效的 WS-A 请求

Posted

技术标签:

【中文标题】如何使用 SOAP UI 创建有效的 WS-A 请求【英文标题】:How to create a valid WS-A request with SOAP UI 【发布时间】:2015-12-14 04:32:19 【问题描述】:

我的网络服务在其 WSDL 中定义了一个 WS 寻址策略,其中包含

<wsp:Policy wss:Id="WSAddressing_policy"
      xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
      xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
      xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata">
    <wsam:Addressing>
        <wsp:policy/>
    </wsam:Addressing>
</wsp:Policy>

...和

  <wsdl:binding name="OutboundBinding" type="tns:OutboundPortType">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsp:PolicyReference URI="#WSAddressing_policy"/>
       <!-- Verify Availability -->        
        <wsdl:operation name="VerifyAvailability">
            <soap:operation soapAction="" style="document"/>
            <wsdl:input name="VerifyAvailabilityRequest">
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output name="VerifyAvailabilityResponse">
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>

我使用 CXFs 自动拦截策略:

<cxf:bus>
    <cxf:features>
        <p:policies ignoreUnknownAssertions="true"/>
        <cxf:logging/>
    </cxf:features>
</cxf:bus>

现在我无法使用 SOAP UI 创建对此 Web 服务的有效请求 - 无论我尝试哪种 WS-A 设置,我总是得到以下响应:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <soap:Fault>
         <faultcode xmlns:ns1="http://www.w3.org/2005/08/addressing">ns1:MessageAddressingHeaderRequired</faultcode>
         <faultstring>A required header representing a Message Addressing Property is not present</faultstring>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

我做错了什么?

更新

我也无法使用 CXF 客户端本身创建有效请求。如果我从

更改 WSDL,我设法让它工作
<wsp:Policy wss:Id="WSAddressing_policy">
    <wsam:Addressing>
        <wsp:policy/>
    </wsam:Addressing>
</wsp:Policy>

    <wsp:Policy wss:Id="WSAddressing_policy">
        <wsaw:UsingAddressing xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" wsp:Optional="false" />
    </wsp:Policy>

【问题讨论】:

【参考方案1】:

目前看来寻址元数据命名空间是 CXF 的问题。 我提交了bugreport。 使用

xmlns:wsam="http://www.w3.org/2007/02/addressing/metadata" 代替 xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" 解决问题。

【讨论】:

以上是关于如何使用 SOAP UI 创建有效的 WS-A 请求的主要内容,如果未能解决你的问题,请参考以下文章

对 SOAP Web 服务的 JQuery AJAX 调用 - 访问被拒绝。在 SOAP UI 中工作

如何在SOAP UI中使用groovy从字符串中提取数字id

如何使用Karate验证给定XML的SOAP服务XML文件

使用node-soap发送正确的soap请求

soap ui 进行接口测试

在有效的 SOAP SAAJ 信封中使用默认命名空间