2012年9月26日 星期三

開發第一個 SOAP 的服務以及 client


開發第一個 SOAP 的服務以及 client

This document is provided as is. You are welcomed to use it for non-commercial purpose.
Written by: 國立中興大學資管系呂瑞麟

請勿轉貼


開始開發 web service 的程式,一般的步驟都是先開發 service 的程式 (也就是伺服器端的程式),然後才開發客戶端的程式。我們進行第一個程式,由 service 提供當地端的時間。提醒大家,這個方式雖然簡單,但是在真正的開發上, 卻很少用,所以看看即可!
  1. 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();
      }
    }
      
  2. 在客戶端設定適當的 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;
      
  3. 開發客戶端程式 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);
      }
    }
      
  4. 你可以 compile Query.java 並執行它來確定你的 web service 確定執行了。 執行的畫面如下:
    請注意,畫面中的錯誤訊息是沒有關係的。想要清除錯誤訊息,你需要安裝 activation.jar 和 mail.jar。
  5. 你也可以直接利用 browser 來測試。測試的方式就是直接輸入 http://localhost:8080/axis/TimeService.jws?method=getTime,執行後,你就可以在 browser 上看到 service 回傳的 SOAP 訊息,如下圖所示。





Written by: 國立中興大學資管系呂瑞麟


沒有留言:

張貼留言