一.
介紹
本文并不是想介紹
Web
服務的原理、系統架構等,我們假設您已經了解了關于
Web
服務的一些基本的概念、原理等知識。本文主要是針對那些已經了解
Web
服務概念,但是還沒有親身體會
Web
服務所帶來令人歡欣鼓舞的特征的開發人員。在此我們認為你已經具備了
Java
、
XML
等基礎知識,如果你還有其他開發環境的經驗例如
VB
、
VC
那是再好不過的了。
1
.
Web
服務
雖然我們并不想詳細講述
Web
服務的體系結構,但是大概的介紹一下還是有必要的。
Web
服務是一種新型的
Web
應用程序。不同于其他
Web
應用程序,它是自適應、自我描述、模塊化的應用程序,并可以跨越
Web
進行發布、定位以及調用。簡單的
Web
服務可以提供例如天氣預報或者航班信息的服務。一旦部署了
Web
服務,其他的應用程序就可以發現和調用所部署的服務。
2
.
AXIS
項目
Axis
框架來自
Apache
開放源代碼組織,它是基于
Java
語言的最新的
SOAP
規范(
SOAP 1.2
)和
SOAP with Attachments
規范(來自
Apache Group
)的開放源代碼實現。有很多流行的開發工具都使用
AXIS
作為其實現支持
Web
服務的功能,例如
JBuilder
以及著名的
Eclipse J2EE
插件
Lomboz
。
AXIS
的最新版本是
1.1
,可以從
http://ws.apache.org/axis/index.html
下載。
整個
AXIS
項目包括以下幾個部分:
-
消息流子系統
消息流子系統提供了靈活的消息傳遞框架,這個消息傳遞框架包括處理程序、鏈、序列化程序和反序列化程序。處理程序是一個處理請求、響應和故障流的對象。處理程序可被組合在一起成為鏈,而且可以使用一個靈活的部署描述符來配置這些處理程序的順序。 -
傳輸框架子系統
提供了一個傳輸框架,這個傳輸框架可以幫助您創建自己的可插式傳輸發送器和傳輸偵聽器。 -
數據編碼子系統
AXIS 完全按照 XML Schema 規范提供各種數據類型的自動序列化,并且提供功能擴展接口來使用您自己定制的序列化器和反序列化器。 -
其他
AXIS 完全支持 WSDL 以及日志記錄、出錯以及故障處理機制。它同時提供一些工具用來講 WSDL 文檔轉換成客戶端的調用框架以及根據類來產生 WSDL 定義文檔。
AXIS
目前版本支持的標準是:
W3C SOAP 1.1
和
1.2
;
WSDL 1.1
;
SAAJ 1.1
(
SUN
公司:
SOAP with Attachments API for Java
);
JAX-RPC
(
SUN
公司:
Java API for XML-Based RPC
)
1.0
。
二
.
環境搭建
由于
AXIS
本身是基于
Java
語言開發的項目,并且是以
Web
應用形式發布的,因此它運行時需要一個應用服務器作為支撐。為了方便我們這里選用的是
Tomcat
。由于
AXIS
本身需要用到處理
XML
信息的包,所以我們建議使用
JDK1.4
并安裝
Tomcat 4.1.24
。下面是環境搭建步驟,讀取根據自身情況進行安裝。
-
安裝
JDK1.4.1
-
安裝
Tomcat 4.1.24
到
C:\Tomcat
并驗證安裝是否成功
-
下載
AXIS
項目打包文件
axis-1_1.zip
解壓縮后將目錄中的
webapps
目錄下的
axis
子目錄拷貝到
C:\Tomcat\webapps
下。
點擊超鏈接Validate后,AXIS會自動檢查所需的每一個Java組件,這協組件分為:必需組件以及可選組件,必須保證所有必需組件都存在。
三. Web Service服務端開發
經過了前兩步之后我們就可以開始Web服務之旅了!大多數人在學習一種編程語言的第一步都是從Hello world程序開始的,我們也不例外。我們將提供這樣一個Web服務,通過給它傳入姓名,服務返回:你好[姓名],歡迎來到Web服務的世界。這就是我們的需求。我們將馬上根據AXIS的要求完成我們的需求,你就會發現原來Web服務可以這么簡單!
編寫Java類Hello.java,內容如下:
|
僅此而已,無需編譯,將該文件改名為Hello.jws并拷貝到AXIS應用目錄C:\Tomcat\webapps\axis下。
下面我們就可以測試該Web服務了,打開瀏覽器并輸入剛剛創建的文件名對應的URL地址http://localhost:8080/axis/Hello.jws瀏覽器顯示如下結果:
|
點擊頁面上的鏈接查看該Web服務對應的WSDL信息如下所示(我們將在下一小節簡單介紹WSDL)
|
四. Web Service客戶端開發
在這一節中我們將使用三種不同的語言來訪問剛剛創建的Web服務,分別是Java、VB、VC。為了使用VB和VC訪問Web服務,我們需要安裝微軟公司的Soap Toolkit 開發工具包,這個工具包可以從微軟公司的主頁
http://download.microsoft.com/download/xml/soap/2.0/W98NT42KMe/EN-US/SoapToolkit20.exe
下載,下載該軟件包并使用默認方式安裝即可。
在開始客戶端開發之前有兩個概念我們必須先粗略的介紹一下。
SOAP:簡單對象訪問協議。這是一種在松散的、分布的環境中使用XML對等地交換結構化的和類型化的信息提供了一個簡單且輕量級的機制,它是一個基于XML的協議。它包括四個部分:SOAP封裝(envelop),封裝定義了一個描述消息中的內容是什么,是誰發送的,誰應當接受并處理它以及如何處理它們的框架;SOAP編碼規則(encoding rules),用于表示應用程序需要使用的數據類型的實例; SOAP RPC表示(RPC representation),表示遠程過程調用和應答的協定;SOAP綁定(binding),使用底層協議交換信息。
雖然這四個部分都作為SOAP的一部分,作為一個整體定義的,但他們在功能上是相交的、彼此獨立的。特別的,信封和編碼規則是被定義在不同的XML命名空間(namespace)中,這樣使得定義更加簡單。
SOAP的主要設計目標是簡明性和可擴展性。這就意味著有一些傳統消息系統或分布式對象系統中的特性將不包含在SOAP的核心規范中。這些特性包括:分布式垃圾收集;批量消息傳輸/處理;對象引用;對象激活。
WSDL:Web Service描述語言。使用了WSDL,我們就可以通過這種跨平臺和跨語言的方法使Web Service代理的產生自動化。就像COM和CORBA的IDL文件,WSDL文件由客戶和服務器約定。由于WSDL設計成可以綁定除SOAP以外的其他協議,這里我們主要關注WSDL在HTTP上和SOAP的關系。同樣,由于SOAP目前主要用來調用遠程的過程和函數,WSDL支持SOAP傳輸的文檔規范。
WSDL文檔可以分為兩部分。頂部分由抽象定義組成,而底部分則由具體描述組成。抽象部分以獨立于平臺和語言的方式定義SOAP消息,它們并不包含任何隨機器或語言而變的元素。這就定義了一系列服務,截然不同的網站都可以實現。
1. Java客戶端
使用AXIS的工具將使Web服務的訪問和我們之前介紹的創建一個Web服務一樣的簡單。我們前面安裝的AXIS環境中已經包含著這樣的工具,它是一個Java類,類名為:org.apache.axis.wsdl.WSDL2Java。打開命令行窗口,轉到AXIS目錄下的WEB-INF子目錄。確保Tomcat服務已經處于啟動狀態,鍵入命令:
|
該命令執行的結果是在當前所在目錄下產生一個子目錄 localhost/axis/Hello_jws,該目錄下有四個Java源文件,它們分別是:
Hello.java 定義了Web服務接口,此例中只有一個hello方法。
HelloService.java 定義了用于獲取Web服務接口的方法。
HelloServiceLocator.java 接口HelloService的具體實現。
HelloSoapBindingStub.java Web服務客戶端樁,通過該類與服務器交互。
這四個Java類幫我們處理了大部分的邏輯,我們需要的僅僅是把這些類加到我們的項目然后創建一個我們自己的類來調用它們即可。為此我們新加一個類Main.java,為了方便,讓這個類與剛產生的四個類都在同一個包下。內容如下:
|
使用以下命令進行編譯:
|
如果編譯沒有問題的話執行該測試程序:
|