寫代碼容易,但是理解其中的原理和過程。
web service 本質就是XML的應用, 中間的傳送的訊息格式都是XML格式,這就屏蔽各種程式設計語言的差別。
就是說,只要支援XML解析的語言,就支援web service。
web service 的調用本質:
1) 用戶端把調用的參數,轉換為XML文檔片段(SOAP訊息, input)
2) 用戶端通過網路把文檔片段傳給遠程伺服器。
3) 伺服器接收XML文檔片段。
4)伺服器解析XML文檔片段,提取其中的資料,並把資料轉換為調用所需的參數。
5)伺服器執行方法
6)得到方法的傳回值,並將其轉換為XML 文檔片段(SOAP訊息,ouput)
8)用戶端接收文檔片段,並解析,得到調用的資料。
Web service 的三個技術基礎:
1、 WSDL
1) Web service 介面
1. types (標準的schema)
2. 有N個方法(操作),就有2N的訊息(Message),一個input和一個output
2)Web Service 實現
1. binding元素 -- N個更詳細的operation
2. service -- 指定 web service 的伺服器位址
2、
下面說用戶端的調用:
上次我們產生的XML描述資訊在這個地址:
http://10.5.82.195/hellows?wsdl
1、使用CXF的工具產生用戶端代碼。
在CXF的bin目錄下有我們的產生工具 wsdl2java。 為了方便,可以把bin目錄放在path環境變數下。
在eclipse中建立一個用戶端工程。
開啟CMD,進入到改工程的src目錄下。
使用命令: wsdl2java http://10.5.82.195/hellows?wsdl
代碼已產生。 重新整理項目。
2、調用
自動產生的程式碼,包名和伺服器的一致。 按理說,服務端用什麼包名用戶端是不會知道的。
但是別忘了,WSDL的描述檔案裡,命令空間是根據包名來命名的。 而用戶端的又是根據描述檔案產生的程式碼。
當然,就什麼包名是無所謂的。
建立一個ClientTest類測試,調用也很簡單。
public class ClientTest {/** * @param args */public static void main(String[] args) {HelloWS factory = new HelloWS();Hello hello = factory.getHelloImplPort();System.out.println(hello.sayHello("dedede"));}}