相關歷史文章(閱讀本文以前,您可能須要先看下以前的系列)java
Spring boot webservice怎麼玩? - 第277篇apache
Spring boot cxf構建webservice服務 - 第278篇數組
Spring boot cxf調用webservice服務 - 第279篇瀏覽器
1、前言app
在前面的小節中已經成功發佈了web service服務,這一節看看怎麼調用。url
2、WebService調用方式spa
對於WebService的調用,有以下幾種方式:3d
(1)使用CXF.JaxWsDynamicClientFactory的client動態調用。
(2)利用axis2的RPC方式調用webservice。
(3)利用HttpClient調用webservice。
(4)經過javax.xml.ws.Service的方式調用WebService
在這裏咱們使用方式一進行講解說明。
2、調用Hello CXF服務
這裏能夠在新建一個項目,也能夠在原有的項目直接調用:
import java.lang.reflect.Method; import org.apache.cxf.endpoint.Client; import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; public class CXFClientTest { //動態調用 public static void main(String[] args) throws Exception { JaxWsDynamicClientFactory dcflient = JaxWsDynamicClientFactory.newInstance(); Client client=dcflient.createClient("http://127.0.0.1:8080/cxf/helloService?wsdl"); // 須要密碼的狀況須要加上用戶名和密碼 Object[] objects=client.invoke("sayHello","悟纖"); for(Object obj:objects) { System.out.println(obj); } }
調用成功,控制檯打印:hello , 悟纖
BTW:調用的核心就是地址、方法、參數,調用自己是很簡單的一個事情。
3、調用查詢手機號歸屬地服務
要調用服務,要知道WSDL文檔的地址:
http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
訪問WSDL文檔地址,能夠獲得以下的格式:
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://WebXml.com.cn/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://WebXml.com.cn/"> <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <a href="http://www.webxml.com.cn/" target="_blank">WebXml.com.cn</a> <strong>國內手機號碼歸屬地查詢WEB服務</strong> ,提供最新的國內手機號碼段歸屬地數據,每個月更新。 <br /> 使用本站 WEB 服務請註明或連接本站: <a href="http://www.webxml.com.cn/" target="_blank">http://www.webxml.com.cn/</a> 感謝你們的支持! <br /> </wsdl:documentation> <wsdl:types> <s:schema elementFormDefault="qualified" targetNamespace="http://WebXml.com.cn/"> <s:element name="getMobileCodeInfo"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="mobileCode" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="userID" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="getMobileCodeInfoResponse"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="getMobileCodeInfoResult" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="getDatabaseInfo"> <s:complexType /> </s:element> <s:element name="getDatabaseInfoResponse"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="getDatabaseInfoResult" type="tns:ArrayOfString" /> </s:sequence> </s:complexType> </s:element> <s:complexType name="ArrayOfString"> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="s:string" /> </s:sequence> </s:complexType> <s:element name="string" nillable="true" type="s:string" /> <s:element name="ArrayOfString" nillable="true" type="tns:ArrayOfString" /> </s:schema> </wsdl:types> <wsdl:message name="getMobileCodeInfoSoapIn"> <wsdl:part name="parameters" element="tns:getMobileCodeInfo" /> </wsdl:message> <wsdl:message name="getMobileCodeInfoSoapOut"> <wsdl:part name="parameters" element="tns:getMobileCodeInfoResponse" /> </wsdl:message> <wsdl:message name="getDatabaseInfoSoapIn"> <wsdl:part name="parameters" element="tns:getDatabaseInfo" /> </wsdl:message> <wsdl:message name="getDatabaseInfoSoapOut"> <wsdl:part name="parameters" element="tns:getDatabaseInfoResponse" /> </wsdl:message> <wsdl:message name="getMobileCodeInfoHttpGetIn"> <wsdl:part name="mobileCode" type="s:string" /> <wsdl:part name="userID" type="s:string" /> </wsdl:message> <wsdl:message name="getMobileCodeInfoHttpGetOut"> <wsdl:part name="Body" element="tns:string" /> </wsdl:message> <wsdl:message name="getDatabaseInfoHttpGetIn" /> <wsdl:message name="getDatabaseInfoHttpGetOut"> <wsdl:part name="Body" element="tns:ArrayOfString" /> </wsdl:message> <wsdl:message name="getMobileCodeInfoHttpPostIn"> <wsdl:part name="mobileCode" type="s:string" /> <wsdl:part name="userID" type="s:string" /> </wsdl:message> <wsdl:message name="getMobileCodeInfoHttpPostOut"> <wsdl:part name="Body" element="tns:string" /> </wsdl:message> <wsdl:message name="getDatabaseInfoHttpPostIn" /> <wsdl:message name="getDatabaseInfoHttpPostOut"> <wsdl:part name="Body" element="tns:ArrayOfString" /> </wsdl:message> <wsdl:portType name="MobileCodeWSSoap"> <wsdl:operation name="getMobileCodeInfo"> <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <br /> <h3>得到國內手機號碼歸屬地省份、地區和手機卡類型信息</h3> <p>輸入參數:mobileCode = 字符串(手機號碼,最少前7位數字),userID = 字符串(商業用戶ID) 免費用戶爲空字符串;返回數據:字符串(手機號碼:省份 城市 手機卡類型)。</p> <br /> </wsdl:documentation> <wsdl:input message="tns:getMobileCodeInfoSoapIn" /> <wsdl:output message="tns:getMobileCodeInfoSoapOut" /> </wsdl:operation> <wsdl:operation name="getDatabaseInfo"> <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <br /> <h3>得到國內手機號碼歸屬地數據庫信息</h3> <p>輸入參數:無;返回數據:一維字符串數組(省份 城市 記錄數量)。</p> <br /> </wsdl:documentation> <wsdl:input message="tns:getDatabaseInfoSoapIn" /> <wsdl:output message="tns:getDatabaseInfoSoapOut" /> </wsdl:operation> </wsdl:portType> <wsdl:portType name="MobileCodeWSHttpGet"> <wsdl:operation name="getMobileCodeInfo"> <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <br /> <h3>得到國內手機號碼歸屬地省份、地區和手機卡類型信息</h3> <p>輸入參數:mobileCode = 字符串(手機號碼,最少前7位數字),userID = 字符串(商業用戶ID) 免費用戶爲空字符串;返回數據:字符串(手機號碼:省份 城市 手機卡類型)。</p> <br /> </wsdl:documentation> <wsdl:input message="tns:getMobileCodeInfoHttpGetIn" /> <wsdl:output message="tns:getMobileCodeInfoHttpGetOut" /> </wsdl:operation> <wsdl:operation name="getDatabaseInfo"> <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <br /> <h3>得到國內手機號碼歸屬地數據庫信息</h3> <p>輸入參數:無;返回數據:一維字符串數組(省份 城市 記錄數量)。</p> <br /> </wsdl:documentation> <wsdl:input message="tns:getDatabaseInfoHttpGetIn" /> <wsdl:output message="tns:getDatabaseInfoHttpGetOut" /> </wsdl:operation> </wsdl:portType> <wsdl:portType name="MobileCodeWSHttpPost"> <wsdl:operation name="getMobileCodeInfo"> <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <br /> <h3>得到國內手機號碼歸屬地省份、地區和手機卡類型信息</h3> <p>輸入參數:mobileCode = 字符串(手機號碼,最少前7位數字),userID = 字符串(商業用戶ID) 免費用戶爲空字符串;返回數據:字符串(手機號碼:省份 城市 手機卡類型)。</p> <br /> </wsdl:documentation> <wsdl:input message="tns:getMobileCodeInfoHttpPostIn" /> <wsdl:output message="tns:getMobileCodeInfoHttpPostOut" /> </wsdl:operation> <wsdl:operation name="getDatabaseInfo"> <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <br /> <h3>得到國內手機號碼歸屬地數據庫信息</h3> <p>輸入參數:無;返回數據:一維字符串數組(省份 城市 記錄數量)。</p> <br /> </wsdl:documentation> <wsdl:input message="tns:getDatabaseInfoHttpPostIn" /> <wsdl:output message="tns:getDatabaseInfoHttpPostOut" /> </wsdl:operation> </wsdl:portType> <wsdl:binding name="MobileCodeWSSoap" type="tns:MobileCodeWSSoap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="getMobileCodeInfo"> <soap:operation soapAction="http://WebXml.com.cn/getMobileCodeInfo" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="getDatabaseInfo"> <soap:operation soapAction="http://WebXml.com.cn/getDatabaseInfo" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:binding name="MobileCodeWSSoap12" type="tns:MobileCodeWSSoap"> <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="getMobileCodeInfo"> <soap12:operation soapAction="http://WebXml.com.cn/getMobileCodeInfo" style="document" /> <wsdl:input> <soap12:body use="literal" /> </wsdl:input> <wsdl:output> <soap12:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="getDatabaseInfo"> <soap12:operation soapAction="http://WebXml.com.cn/getDatabaseInfo" style="document" /> <wsdl:input> <soap12:body use="literal" /> </wsdl:input> <wsdl:output> <soap12:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:binding name="MobileCodeWSHttpGet" type="tns:MobileCodeWSHttpGet"> <http:binding verb="GET" /> <wsdl:operation name="getMobileCodeInfo"> <http:operation location="/getMobileCodeInfo" /> <wsdl:input> <http:urlEncoded /> </wsdl:input> <wsdl:output> <mime:mimeXml part="Body" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="getDatabaseInfo"> <http:operation location="/getDatabaseInfo" /> <wsdl:input> <http:urlEncoded /> </wsdl:input> <wsdl:output> <mime:mimeXml part="Body" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:binding name="MobileCodeWSHttpPost" type="tns:MobileCodeWSHttpPost"> <http:binding verb="POST" /> <wsdl:operation name="getMobileCodeInfo"> <http:operation location="/getMobileCodeInfo" /> <wsdl:input> <mime:content type="application/x-www-form-urlencoded" /> </wsdl:input> <wsdl:output> <mime:mimeXml part="Body" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="getDatabaseInfo"> <http:operation location="/getDatabaseInfo" /> <wsdl:input> <mime:content type="application/x-www-form-urlencoded" /> </wsdl:input> <wsdl:output> <mime:mimeXml part="Body" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="MobileCodeWS"> <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <a href="http://www.webxml.com.cn/" target="_blank">WebXml.com.cn</a> <strong>國內手機號碼歸屬地查詢WEB服務</strong> ,提供最新的國內手機號碼段歸屬地數據,每個月更新。 <br /> 使用本站 WEB 服務請註明或連接本站: <a href="http://www.webxml.com.cn/" target="_blank">http://www.webxml.com.cn/</a> 感謝你們的支持! <br /> </wsdl:documentation> <wsdl:port name="MobileCodeWSSoap" binding="tns:MobileCodeWSSoap"> <soap:address location="http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx" /> </wsdl:port> <wsdl:port name="MobileCodeWSSoap12" binding="tns:MobileCodeWSSoap12"> <soap12:address location="http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx" /> </wsdl:port> <wsdl:port name="MobileCodeWSHttpGet" binding="tns:MobileCodeWSHttpGet"> <http:address location="http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx" /> </wsdl:port> <wsdl:port name="MobileCodeWSHttpPost" binding="tns:MobileCodeWSHttpPost"> <http:address location="http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx" /> </wsdl:port> </wsdl:service> </wsdl:definitions>
能夠本身用瀏覽器打開訪問一下;
一眼望去,可能接口看起來很複雜,較爲繁瑣。 可是做爲開發人員,使用的時候, 咱們能夠查看關注點信息,就能實現接口的調用了。
那麼咱們須要瞭解哪些信息呢?
從上面的文檔裏面,咱們須要從頭部(最上面一行)瞭解到:
targetNamespace="http://WebXml.com.cn/"
經過wsdl:portType能夠該文檔提供了以下方法:
getMobileCodeInfo:得到國內手機號碼歸屬地省份、地區和手機卡類型信息。
getDatabaseInfo:得到國內手機號碼歸屬地數據庫信息。
經過types就能找到getMobileCodeInfo須要傳遞的參數:
<s:sequence> <s:element minOccurs="0" maxOccurs="1" name="mobileCode" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="userID" type="s:string" /> </s:sequence>
須要兩個參數:
mobileCode:手機號碼,最少前7位數字
userID:商業用戶ID) 免費用戶爲空字符串
經過service找到請求地址:
http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx
綜上分析就能夠得出,發起SOAP請求所須要的數據了:
WebService的URL:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx
Namespace:http://WebXml.com.cn/
method:getMobileCodeInfo/getDatabaseInfo
params:mobileCode(必須)、userId(非必須)
這時候獲得這些信息以後,就能夠編寫代碼進行調用了:
package com.kfit.demo; import org.apache.cxf.endpoint.Client; import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; public class CXFClientForMobileCodeTest { //動態調用 public static void main(String[] args) throws Exception { JaxWsDynamicClientFactory dcflient = JaxWsDynamicClientFactory.newInstance(); Client client=dcflient.createClient("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl"); Object[] objects=client.invoke("getMobileCodeInfo","1593258xxxx",""); for(Object obj:objects) { System.out.println(obj); } } }
調用成功以後,控制檯返回:1593258xxxx:河北 唐山 河北移動全球通卡
我就是我,是顏色不同的煙火。
我就是我,是不同凡響的小蘋果。
à悟空學院:http://t.cn/Rg3fKJD
學院中有Spring Boot相關的課程!點擊「閱讀原文」進行查看!
SpringBoot視頻:http://t.cn/R3QepWG
Spring Cloud視頻:http://t.cn/R3QeRZc
SpringBoot Shiro視頻:http://t.cn/R3QDMbh
SpringBoot交流平臺:http://t.cn/R3QDhU0
SpringData和JPA視頻:http://t.cn/R1pSojf
SpringSecurity5.0視頻:http://t.cn/EwlLjHh
Sharding-JDBC分庫分表實戰:http://t.cn/E4lpD6e