【发布时间】: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