wsdl文档 中soap:address location、soap12:address location、http:address location的作用

最近接口提供方升级接口,导致我调用出错,在此记录下本次解决问题后的弄懂的一些知识点。

最初是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地址”,也就是每个接口实际被调用的地址

这是一个WSDL文档,用于描述一个Web服务。其: - xmlns:xsd、xmlns:wsdl、xmlns:tns、xmlns:soap、xmlns:ns2、xmlns:ns1是命名空间定义。 - name属性指定了这个Web服务的名称为"CXFofTanJYService",targetNamespace属性指定了这个Web服务的命名空间为"http://dao.service.com/"。 - <wsdl:import>元素用于导入其他命名空间下的WSDL文档location属性指定了这个WSDL文档的位置,namespace属性指定了这个WSDL文档的命名空间。 - <wsdl:binding>元素用于定义这个Web服务的具体绑定信息,name属性指定了绑定的名称为"CXFofTanJYServiceSoapBinding",type属性指定了这个绑定的类型为"ns1:UserService"。 - <soap:binding>元素用于定义SOAP协议的绑定信息,style属性指定了消息的格式为"document",transport属性指定了传输协议为"http://schemas.xmlsoap.org/soap/http"。 - <wsdl:operation>元素用于定义Web服务的操作,name属性指定了操作的名称为"CXFHelloTanJY"。 - <soap:operation>元素用于定义SOAP协议的操作信息,soapAction属性指定了SOAP操作的命名空间。 - <wsdl:input>元素用于定义Web服务的输入参数,name属性指定了参数的名称为"CXFHelloTanJY",<soap:body>元素用于指定参数的数据格式。 - <wsdl:output>元素用于定义Web服务的输出参数,name属性指定了参数的名称为"CXFHelloTanJYResponse",<soap:body>元素用于指定参数的数据格式。 - <wsdl:service>元素用于定义Web服务的服务信息,name属性指定了服务的名称为"CXFofTanJYService"。 - <wsdl:port>元素用于定义Web服务的端口信息,binding属性指定了端口绑定的名称为"tns:CXFofTanJYServiceSoapBinding",name属性指定了端口的名称为"CXFofTanJYPort",<soap:address>元素用于指定端口的访问地址。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值