关于SOAP客户端服务名称更改的向后兼容性

时间:2015-02-18 11:37:01

标签: java spring web-services soap wsdl

其中一个内部Web服务提供程序提供SOAP RPC API以连接到其系统。最近他们改变了他们的服务名称,这些名称从他们的wsdl反映出来。

例如 如果该服务以前是“MyService”,则它已更改为“MyService1”,但地址位置保持不变。

<wsdl:service name="MyService">
<wsdl:port binding="tns:MyServiceSoapBinding" name="APIImplPort">
<soap:address location="http://10.64.16.141:8080/cms/APIImpl"/>
</wsdl:port>
</wsdl:service>


<wsdl:service name="MyService1">
<wsdl:port binding="tns:MyService1SoapBinding" name="APIImplPort">
<soap:address location="http://10.64.16.141:8080/cms/APIImpl"/>
</wsdl:port>
</wsdl:service>

是否需要更改现有客户端,或者它们是否可以正常运行?

具体来说,我使用java和spring JaxWsPortProxyFactoryBean连接到上面的Web服务。我可以看到我必须更改服务名称以使其工作但我不确定这是否是由于底层机制(spring JaxWsPortProxyFactoryBean)我必须更改服务名称以使其工作或者可以使用任何其他技术没有任何变化(例如.NET)。

1 个答案:

答案 0 :(得分:0)

简而言之,如果您在客户端使用服务名称(当您希望在您的技术中使用某些框架将SOAP数据包发送到服务器时会发生这种情况),向后兼容性将不起作用。这是因为SOAP xml数据包不引用服务名称,它引用名称空间,操作等。 如果您直接发送SOAP xml数据包,则服务名称更改不会对任何技术产生任何影响。

此外,在.Net技术实现中,它由技术本身处理,但在java中它打破了向后兼容性,因为我们必须使用大多数技术(框架)指定服务名称以将SOAP数据包发送到服务器。其他技术也可能会向后兼容性中断。

Java :我没有更改服务名称时遇到以下错误: - javax.xml.ws.WebServiceException:{xx /} MyService不是有效的服务。有效的服务是:{xx /} MyService1

我认为这可能是由于我的Java技术的基础Spring框架,但后来我尝试了非常原始的实现(http://www.mkyong.com/webservices/jax-ws/jax-ws-hello-world-example/),我可以看到必须指定服务名称才能发送SOAP数据包到服务器。

.Net 基于假设底层机制处引用的wsdl。