在開發中,難免遇到兩個不一樣系統交互的問題,好比數據信息同步、數據信息獲取等,解決問題的途徑有多種,今天帶你們認識一下 WebService,看看它在實際應用中的處理。java
1、什麼是WebServiceweb
簡單的說:WebService即Web服務,它是一種跨編程語言和跨操做系統平臺的遠程調用技術。編程
2、WebService三要素app
SOAP (Simple Object Access Protocol):簡易對象訪問協議,soap用來描述傳遞信息的格式;eclipse
WSDL (WebServices Description Language):Web服務描述語言,用來描述如何訪問具體的接口;編程語言
UDDI (Universal Description Discovery and Integration):通用描述、發現及整合,用來管理、分發、查詢webService;ide
3、調用第三方提供的WebService服務操作系統
網上有不少免費的WebService服務,咱們經過調用這些免費的WebService服務,來獲取所需的數據信息,下面經過調用免費的WebService服務查詢手機號碼歸屬地的信息。.net
(1)根據提供的服務網址,執行命令,生成代碼code
提供服務的WebService網址:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl,經過wsimport命令(該命令是JDK/bin下自帶的),生成代碼:
wsimport -keep http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
打開cmd,在窗口輸入上面的命令,執行結果以下:
因爲不一樣的WebService使用的代碼類型,如 java、.net等,因此這裏注意一下,若出現報錯的狀況,看看是不是由於代碼編寫的類型不一樣致使,這時,就須要將wsdl下載下來進行修改了。執行完後,在目錄下咱們能夠看到生成了一些java和class文件,刪除class文件,保留java文件。
(2)新建java項目,導入生成的文件
打開eclipse,新建java project,將java文件複製到項目目錄下,注意路徑,以下:
分析一下java文件:MobileCodeWS.java、MobileCodeWSSoap.java是重要的服務類,從代碼中能夠看出,在下面使用中須要實例化。
(3)實例化類,編寫客戶端代碼,調用接口獲取數據
新建PhoneWsClient類,代碼以下:
public class PhoneWsClient{ public static void main(String[] args){ //實例化服務類 MobileCodeWS ws = new MobileCodeWS(); //調用服務類的方法獲取接口實例 MobileCodeWSSoap soap = ws.getMobileCodeWSSoap(); //經過接口獲取數據 String phoneInfo = soap.getMobileCodeInfo("1.......3(手機號)", null); System.out.println(phoneInfo); } }
項目結構以下:
運行結果以下:
4、開發本身的WebService服務
(1)新建java project項目,建立主要類
在項目中,主要類分爲:接口類、實現類、發佈類,以下所示結構:
接口interface:
/* * 使用@WebService註解標註WebServiceI接口 */ @WebService public interface WebServiceI{ //使用@WebMethod註解標註WebServiceI接口中的方法 @WebMethod String sayHello(String name); }
實現Implement:
/* * 使用@WebService註解標註實現類WebServiceImpl */ @WebService public class WebServiceImpl implements WebServiceI{ @Override public String sayHello(String name){ System.out.println("sayHello "+name); return "sayHello "+name; } }
發佈Publish:
/* * 發佈WebService */ public class WebServicePublish{ public static void main(String[] args){ //定義WebService的發佈地址,這個地址就是提供給外界訪問Webervice的URL地址 String address = "http://localhost:8889/My_Server/Webservice"; //使用Endpoint類提供的publish方法發佈WebService Endpoint.publish(address, new WebServiceImpl()); System.out.println("發佈webservice成功!"); } }
(2)運行WebServicePublish類,發佈WebService
若運行時報以下錯誤:
Exception in thread "main" com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class com.ws.jaxws.DoSomething is not found. Have you run APT to generate them?
解決辦法:
先用apt命令將主程序進行編譯,而後生成一些java文件;
升級JDK版本,好比1.7之後(推薦);
(3)訪問發佈WebService的URL地址
本地的話,直接用localhost,若給其餘人使用,則需改成實際地址:http://localhost:8889/My_Server/Webservice:
點擊WSDL進行查看:
從wsdl文件中能夠看到咱們提供的接口和類。
固然,發佈的方式也能夠不一樣,根據項目類型,可使用監聽器或者Servlet等方式。
同第三方服務同樣,咱們也能夠根據訪問的wsdl地址生成客戶端代碼進行接口調用,這裏就不作演示了,你們參照上面便可實現。