Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在soap中忽略TargetNamespace_Java_Xml_Web Services_Soap - Fatal编程技术网

Java 如何在soap中忽略TargetNamespace

Java 如何在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.

我有一个由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>

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是对的,我对客户的请求没有控制权