Web Service 介紹及實現方式
隨著企業之間聯絡的不斷緊密,企業之間的系統服務也不斷接受新的挑戰。例如一個金融公司與一家大資料公司展開了合作,金融公司需要呼叫大資料公司的資料來完成自身業務的開展。那麼服務之間的呼叫是怎麼實現呢?Http可以實現,但我覺得web service 是討論這類問題時不能避開的一個答案。
Web Service我的理解是更接近一種規範了,實現了這套規範的系統,可以互相之間互動資料已完成業務上的呼叫。它的特點有跨語言、跨平臺,能夠實現不同語言之間的互聯互通。歸結一句話:Web Service就是一種跨程式語言和跨作業系統平臺的遠端呼叫技術。
Web Service遵從的協議叫做SOAP協議,全稱叫做 Simple Object Access Protocol,簡單物件訪問協議。Web Service服務傳輸的資料格式是XML形式組織的,通過HTTP協議傳送和接收結果。因此我們可以簡便的理解為:SOAP協議=HTTP協議+XML資料格式。
還有一個重要概念要提,就是WSDL( Web Services Description Language ),釋出好一個web service 服務後怎麼檢查服務是否正常,答案就是檢視WSDL檔案。檢視方式通常是在瀏覽器中開啟服務的釋出地址,然後後面加上 .wsdl即可。
下面我們釋出個簡單的服務。
服務端程式碼如下:
import javax.jws.WebMethod; import javax.jws.WebService; import javax.xml.ws.Endpoint; @WebService public class HelloService { private String sayHello(String name) { System.out.println("hello " + name); return "Hello " + name; } @WebMethod public String sayHi(String name) { return this.sayHello(name); } public static void main(String[] args) { Endpoint.publish("http://localhost:8081/sayhi", new HelloService()); } }
程式碼和明晰,HelloService 是一個Web Service服務類,它對外提供了一個呼叫方法:sayHi。main函式中,我們用Endpoint來發布這個服務,釋出方法的引數是地址、服務例項。
話不多述,啟動main函式。在瀏覽器中輸入地址:http://localhost:8081/sayhi?wsdl,我們看瀏覽器返回結果:
說明我們的服務釋出成功,可以供外部呼叫了。
下來我們看外部系統如何呼叫這個服務。
在建立一個客戶端工程。然後開啟cmd命令列工具,使用jdk自帶的客戶端程式碼生成工具wsimport,生成客戶端程式碼。生成方式如下:
我當前目錄在e盤,-s表示生成原始碼即java檔案,-p用來指定包結構。執行命令即可生成程式碼了。
執行後我的E盤下生成情況如圖:
我們把java檔案拷貝到客戶端工程中去。
編寫呼叫類ServiceClient:
public class ServiceClient {
public static void main(String[] args) {
HelloServiceService service = new HelloServiceService();
HelloService service2 = service.getHelloServicePort();
String result = service2.sayHi("Wrold");
System.out.println(result);
}
}
執行檢視結果:。
需要特別注意的是wsimport那個定義包結構的引數,一定要輸入正