開發第一個 SOAP 的服務以及 client
This document is provided as is. You are welcomed to use it for non-commercial purpose.Written by: 國立中興大學資管系呂瑞麟
請勿轉貼
開始開發 web service 的程式,一般的步驟都是先開發 service 的程式 (也就是伺服器端的程式),然後才開發客戶端的程式。我們進行第一個程式,由 service 提供當地端的時間。提醒大家,這個方式雖然簡單,但是在真正的開發上, 卻很少用,所以看看即可!
- service 的程式很簡單,基本上只是使用 java.util.Date 把時間抓出來,
然後回傳時間的字串。Axis 的寫法很簡單,完成下列的 Java 程式,並把程式碼命名為
TimeService.jws(jws 稱之為 Java Web Service)並把這個程式碼放置於
d:\tomcat\webapps\axis 目錄內即完成 service 的佈置。
這個程式提供了一個名稱為 getTime() 的服務。
import java.util.*; public class TimeService { public String getTime() { Date d = new Date(); return "Local time is " + d.toString(); } }
- 在客戶端設定適當的 CLASSPATH 環境變數。我把它寫成一個批次檔
以便於每一次執行的時候,我不必重新輸入一次。請把下列的 set CLASSPATH 指令
串成一行。
@echo off set CLASSPATH=.;d:\axis-1_4\lib\axis.jar;d:\axis-1_4\lib\saaj.jar; d:\axis-1_4\lib\commons-logging-1.0.4.jar; d:\axis-1_4\lib\commons-discovery-0.2.jar; d:\axis-1_4\lib\wsdl4j-1.5.1.jar; d:\tomcat\common\lib\servlet-api.jar; d:\axis-1_4\lib\jaxrpc.jar; d:\tomcat\common\lib\activation.jar; d:\tomcat\common\lib\mail.jar; d:\tomcat\common\lib\xmlsec.jar;
- 開發客戶端程式 Query.java。(請注意,這種的客戶端程式不常用,常用的
客戶端程式開發方式,將於下節討論)
import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; import javax.xml.rpc.ParameterMode; public class Query { public static void main(String[] args) throws Exception { // 我們必須知道要連結的端點程式為何,在這個範例中, // URL: http://localhost:8080/axis/TimeService.jws 這個程式 String host = "http://localhost:8080"; String servicepath = "/axis/TimeService.jws"; String endpoint = host + servicepath; String ret = null; // Service 物件代表一個遠端的服務,即 web service Service service = new Service(); // 遠端服務的呼叫是經由一個 Call 的物件,物件的形成方式 // 就是由 service 物件來產生 Call call = (Call) service.createCall(); // 開始呼叫以前,先設定連結的服務訊息 call.setTargetEndpointAddress(new java.net.URL (endpoint)); // 再設定 TimeService.jws 中,我們所需要呼叫的 API,在這個 // 範例中,就是 getTime() 這個方法 call.setOperationName("getTime"); // 定義回傳的資料型態。型態的定義為 XML Schema,在 // 這個範例,回傳的資料型態為字串 call.setReturnType(XMLType.XSD_STRING); // 真正的呼叫遠端的服務。由於並沒有傳遞參數到遠端, // 因此為 null。回傳的結果,會放到 ret 中。 ret = (String) call.invoke((Object[])null); System.out.println("Got result : " + ret); } }
- 你可以 compile Query.java 並執行它來確定你的 web service 確定執行了。
執行的畫面如下:
- 你也可以直接利用 browser 來測試。測試的方式就是直接輸入 http://localhost:8080/axis/TimeService.jws?method=getTime,執行後,你就可以在 browser 上看到 service 回傳的 SOAP 訊息,如下圖所示。
Written by: 國立中興大學資管系呂瑞麟
沒有留言:
張貼留言