虽然目前rest(json)风格成为当前主流的数据传输格式,但是项目中避免不了涉及到socket、webservice接口对接/调用的情况,本博客主要针对客户端调用webservice服务端的情况,写webservice服务端并发布不是此博客重点。
附:公网webservice地址:http://www.webxml.com.cn
以查询号码归属地为例:
点击上图信息时将跳转到手机号归属地webservice服务器地址。(主要以getMobileCodeInfo 为例)
一、阅读wsdl
wsdl就是接口api文档,只不过是使用xml编写而已。
所以遵循webservice标准的wsdl文档都是url+?wsdl访问,比如手机号归属地
http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
阅读wsdl文档
1、从下向上看 ->找到<wsdl:service> 这就是定义的服务端点,我们看到有四个<wsdl:port>标签,正常就为四个服务,此处提供四个服务是包含了soap,soap12,httpGet,httpPost,分别支持soap和soap1.2协议,http的get和post请求。
具体选择哪种方式请求,根据自己实际选择。
2、比如选择MobileCodeWSHttpGet,标签中定义了binding标签,binding="tns:MobileCodeWSHttpGet",继续往上看wsdl文档,根据binding找到对应<wsdl:binding>标签:
3、上图定义了请求方式,请求地址location为/getmobileCodeInfo, 标签内还定义type="tns:MobileCodeWSHttpGet",根据此名称继续向上找,找到<wsdl:portType>
4、上图内部有定义了<wsdl:input>和output,input中message就对应了参数,根据message="tns:getMobileCodeInfoHttpGetIn"继续向上找
可以看到需要两个参数,分别为mobileCode何userID
5、根据<wsdl:service中选择的port地址:<http:address location="http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx"/>
再根据2中得到的location:<http:operation location="/getMobileCodeInfo"/>
再根据5中定义的参数,综合接口请求路径就为:
http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=15612345678&userID=
以上就可以根据此地址获取到数据。
二、调取接口
get、post都可以通过httpClient访问,但是如果选择了soap协议,java也提供了不同种方式处理webservice接口,具体实现方式参见其他博客。
比如wsimport命令行形式;HttpUrlConnection形式;都可以实现接口对接。