找不到[SajSoapMessage的终结点映射{http://schemas.xmlsoap.org/soap/env



我升级了一个旧应用程序,该应用程序使用不同的名称空间公开了6种不同的SOAP web服务。当我们使用通过其生成的wsdl获取的端点时,一切似乎都正常工作。

这是的样品请求

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:pres="http://MY_NAMESPACE.com">
<soapenv:Body>
<pres:UpdateXXXRequest>
</pres:UpdateXXXRequest>
</soapenv:Body>
<soapenv:Envelope>

但也有一些客户端以以下格式发送请求

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:pres="http://MY_NAMESPACE.com">
<soapenv:Body>
<q0:UpdateXXXRequest xmlns:q0="http://schemas.xmlsoap.org/soap/envelope/">
</q0:UpdateXXXRequest>
</soapenv:Body>
<soapenv:Envelope

由于命名空间xmlns:q0=",该请求导致错误No Endpoint Found;http://schemas.xmlsoap.org/soap/envelope/">与有效负载UpdateXXXRequest一起使用。

根据我的分析,Spring框架使用EndpointMapping来识别相应的方法,然后根据命名空间(要么用body payloadq0:UpdateXXXRequest xmlns:q0=";http://schemas.xmlsoap.org/soap/envelope/">或来自soapenv:Envelop(

的情况下{http://schemas.xmlsoap.org/soap/envelope/}UpdateRxFillRequest它失败了,因为方法是用自己的命名空间定义的,而spring只通过@Payload注释查找用方法定义的命名空间。

如果它从UpdateXXXRequest中删除q0或使用实际的命名空间,它可以正常工作,但客户端使用发送请求http://schemas.xmlsoap.org/soap/envelope/

支持的方法有哪些http://schemas.xmlsoap.org/soap/envelope/&http://MY_NAMESPACE.com用于每种方法。

尽管我有100多个端点。

我可以通过将SOAP方法上的@Payload注释替换为允许添加多个@Payload批注的@Payloads来解决这个问题。我添加了两个一,服务名称空间为http://MY_NAMESPACE.com,第二名为http://schemas.xmlsoap.org/soap/envelope/。spring框架通过这两个注释识别了SOAP端点。

相关内容

最新更新