最近接口提供方升级接口,导致我调用出错,在此记录下本次解决问题后的弄懂的一些知识点。
最初是cxf调用提供方接口报错:Could not send Message.
1.首先排查接口能否访问,接口提供方webservice地址:http://59.2.1.18:6901/services/MyServices?wsdl 能正常访问
2.检查wsdl文档
wsdl:service部分内容如下
<wsdl:service name="MyServices">
<wsdl:port name="MyServicesHttpSoap11Endpoint" binding="ns:MyServicesSoap11Binding">
<soap:address location="http://10.0.70.199:6900/services/MyServices.MyServicesHttpSoap11Endpoint/"/>
</wsdl:port>
<wsdl:port name="MyServicesHttpSoap12Endpoint" binding="ns:MyServicesSoap12Binding">
<soap12:address location="http://10.0.70.199:6900/services/MyServices.MyServicesHttpSoap12Endpoint/"/>
</wsdl:port>
<wsdl:port name="MyServicesHttpEndpoint" binding="ns:MyServicesHttpBinding">
<http:address location="http://10.0.70.199:6900/services/MyServices.MyServicesHttpEndpoint/"/>
</wsdl:port>
</wsdl:service>
3.定位原因。10.0.70.199:6900这个ip跟端口跟wsdl地址中的59.2.1.18:6901不一致,且网络不通。问题应该就是出在这里,提供方一开始不承认是这里导致的,wsdl文档service部分修改为如下报文后我再调用果然就没有问题了。
<wsdl:service name="MyServices">
<wsdl:port name="MyServicesHttpSoap11Endpoint" binding="ns:MyServicesSoap11Binding">
<soap:address location="http://59.2.1.18:6901/services/MyServices.MyServicesHttpSoap11Endpoint/"/>
</wsdl:port>
<wsdl:port name="MyServicesHttpSoap12Endpoint" binding="ns:MyServicesSoap12Binding">
<soap12:address location="http://59.2.1.18:6901/services/MyServices.MyServicesHttpSoap12Endpoint/"/>
</wsdl:port>
<wsdl:port name="MyServicesHttpEndpoint" binding="ns:MyServicesHttpBinding">
<http:address location="http://59.2.1.18:6901/services/MyServices.MyServicesHttpEndpoint/"/>
</wsdl:port>
</wsdl:service>
因为对方甩锅的时候,我对这三个标签的作用不很清楚,反驳不了。百度后查询到一段关于address localtion的介绍:"soap:address" is used to specify an address where the Web service can be accessed.
以及 ApacheCXFWebServiceDevelopment.pdf中的这段话
再仔细看wsdl文档中的localtion:http://59.2.1.18:6901/services/MyServices.MyServicesHttpSoap11Endpoint/,“http://59.2.1.18:6901/services/MyServices”拼接上?wsdl,就是webservice地址;MyServicesHttpSoap11Endpoint是port标签的name。所以推断这三个标签的作用就是“指定被访问的webservice地址”,也就是每个接口实际被调用的地址