Java 如何在soap中忽略TargetNamespace
我有一个由wsdl文件生成的Soap服务,它需要一个特定的TargetNamespaceJava 如何在soap中忽略TargetNamespace,java,xml,web-services,soap,Java,Xml,Web Services,Soap,我有一个由wsdl文件生成的Soap服务,它需要一个特定的TargetNamespace @WebResult(name=“getResponse”,targetNamespace=”http://targetNameSpace1.com“,partName=“result”) 但我们有多个客户端调用此api,每个客户端使用不同的TargetNamespace: 客户一: <soap:Envelope xmlns:loc="http://targetNameSpace1.
@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>
soap:客户端
消息部分{http://targetNameSpace2.com}getResponse未被识别。(它是否存在于服务WSDL中?)
我只能一次使用一个来更改webResult中的targetNameSpace标记,但我的最终目标是忽略这个标记,因为我不知道每个客户端将使用哪个名称空间
目前,我正试图使用一个拦截器来扩展这个功能
AbstractSoapInterceptor
我得到了一个SoapMessage对象,我可以在请求发出之前访问它,但我似乎无法更改请求,不确定这是否是最好的方法
有人能解决这个问题吗
谢谢 wsdl和(嵌入式)xsd是您指定的契约。服务器和客户端需要遵守该合同。单面更改合同将导致无效消息。您不应该寻找接受无效消息的解决方案,而应该更新客户端,使它们遵守约定。wsdl和(嵌入式)xsd是您指定的约定。服务器和客户端需要遵守该合同。单面更改合同将导致无效消息。与其寻找一种接受无效消息的解决方案,不如更新客户端,使其遵守合同。我最终阅读了这篇文章 我拦截每个请求,并替换此请求:
xmlns:loc=”http://targetNameSpace2.com“
使用我想要的url,我使用正则表达式替换loc标记中的内容 我拦截每个请求,并替换此请求:
xmlns:loc=”http://targetNameSpace2.com“
对于我想要的url,我使用正则表达式替换loc标记中的内容你是正确的,但问题意味着客户机不受询问者的控制。是的,VGR是正确的,我在客户机请求中没有控制权你是正确的,但是这个问题意味着客户不在询问者的控制之下。是的,VGR是对的,我对客户的请求没有控制权