【问题标题】:How to ignore TargetNamespace in soap如何忽略肥皂中的 TargetNamespace
【发布时间】:2020-10-27 19:05:29
【问题描述】:

我有一个由 wsdl 文件生成的 Soap 服务,它需要特定的 TargetNamespace

@WebResult(name = "getResponse", targetNamespace = "http://targetNameSpace1.com", partName = "result")

但我们有多个客户端调用此 api,每个客户端使用不同的 TargetNamespace:

客户一:

<soap:Envelope
    xmlns:loc="http://targetNameSpace1.com">
    <soap:Header>
        <ns3:RequestSOAPHeader>
           ...
        </ns3:RequestSOAPHeader>
    </soap:Header>
    <soap:Body>
        <loc:getResponse>
            <loc:value>url/</loc:value>
        </loc:getResponse>
    </soap:Body>
</soap:Envelope>

客户端二:

<soap:Envelope
    xmlns:loc="http://targetNameSpace2.com">
    <soap:Header>
        <ns3:RequestSOAPHeader>
           ...
        </ns3:RequestSOAPHeader>
    </soap:Header>
    <soap:Body>
        <loc:getResponse>
            <loc:value>url/</loc:value>
        </loc:getResponse>
    </soap:Body>
</soap:Envelope>

这是我得到的错误:

<soap:Envelope>
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Client</faultcode>
         <faultstring>Message part {http://targetNameSpace2.com}getResponse was not recognized.  (Does it exist in service WSDL?)</faultstring>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

我只能让它一次使用一个更改 webResult 中的 targetNameSpace 标签,但我的最终目标是忽略这个标签,因为我不知道每个客户端会使用女巫命名空间。

目前我正在尝试使用扩展此功能的拦截器 AbstractSoapInterceptor 我得到一个 SoapMessage 对象,我可以在发出请求之前访问它,但我似乎无法更改请求,不确定它是否是最好的方法。

有人对此有解决方案吗?

谢谢!

【问题讨论】:

    标签: java xml web-services soap


    【解决方案1】:

    wsdl 和(嵌入式)xsd 是您指定的合同。服务器和客户端需要遵守该合同。单面更改合同将导致无效消息。与其寻找接受无效消息的解决方案,不如更新客户端,让他们遵守合同。

    【讨论】:

    • 你是对的,但问题暗示客户不在提问者的控制之下。
    • 是的,VGR 是对的,我无法控制客户的请求
    【解决方案2】:

    我最终关注了这篇文章https://www.javatips.net/blog/cxf-interceptor-example

    我拦截每个请求,并替换这个:

    xmlns:loc="http://targetNameSpace2.com"

    使用我想要的 url,我使用正则表达式替换 loc 标记内的内容

    【讨论】:

      猜你喜欢
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多