使用 Eclipse+Axis2 構建 Web Service 應用(用戶端無需產生 Stub 方式)

來源:互聯網
上載者:User

 一、開發環境和軟體下載

  開發環境是:Eclipse3.4 + JDK1.6 + Tomcat6.0 + Axis2 1.3。這些軟體都是各個軟體最新版本,下載方式由於軟體網站的更新,地址也會更新,這裡就不再貼出來了,就請讀者到相應網站下載。
  軟體下載和安裝:
    (1) JDK1.6環境變數配置:
    JAVA_HOME: C:\Program Files\Java\jdk1.6.0_07,其中C:\Program Files\Java是我的JDK安裝目錄。
    Path: %JAVA_HOME%\bin
    Classpath: .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
   
    (2) tomcat6.0環境變數配置:
    CATALINA_HOME:C:\Program Files\Apache Software Foundation\Tomcat 6.0, 其中C:\Program Files\Apache Software Foundation是我的Tomcat 6.0安裝目錄。
    其實這裡tomcat6.0不需要配置環境變數,因為最新版本不需要配置。

    (3) Axis2 1.3下載:從[url]http://apache.justdn.org/ws/axis2/1_4_1/[/url]網站上下載axis2-1.3-war.zip 。將其解壓,把其中的axis2.war檔案複製到tomcat的webapps目錄下即可完成Axis2的安裝。
  安裝完成後,啟動tomcate,在地址欄內輸入[url]http://localhost:8080/axis2/[/url],開啟如介面,表明安裝正確:



    (4) Eclipse3.4下載:到[url]www.eclipse.org[/url]官方網站下載,直接解壓後配置Windows/Preference中的JDK即可。

    (5) 下載Eclipse Axis2外掛程式:axis2-eclipse-codegen-wizard-1.4.zip和axis2-eclipse-codegen-wizard-1.4.zip。是:[url]http://apache.justdn.org/ws/axis2/tools/1_4_1/      [/url] 這兩個外掛程式解壓到Eclipse安裝目錄下plugins中即可。開啟Eclipse,選擇File/New/Other功能表項目,看到如下介面表明安裝成功:



    安裝這兩個外掛程式的目的是:方便產生Axis2服務和產生Axis2用戶端,這裡我使用了無Stub方式的用戶端調用服務,因此就不示範產生Axis2用戶端的功能了。

二、構建服務
    

在開發環境及 Axis2 環境搭建好後,我們便可著手 Web Services 服務的開發:1.建立要發布的Web Service


    (1)在 Eclispse 中添加一個使用者庫命名為 axis2 ,將 axis2\lib 下的包均添加進來。這一步操作的目的是為了以後工程添加 axis2 所需的 jar 檔案方便。
    (2) 建立一個 JavaProject 命名為 ws ,將 axis2 使用者庫加入到 build
path 中。
    (3) 現在開始編寫要發布的 WebSevice ,在 src 中建包 briup ,建立 Hello 類如下:

package briup;public class Hello {  public String sayHello(String user) {    return "Hello, " + user;  }}

    2.發布Web Service

    打包要發布的 Service , Eclipse 中 New
--> File --> Other --> Axis2 wizards --> Axis2 Services Archiver ,按照嚮導選擇剛建立的類編譯後的 class 檔案。
    (1)選擇 class 檔案目錄,注意,不是 java 源檔案,而是 classes 目錄,這裡需要注意由於你的類是帶包briup的,因此不要選到包這個目錄。

(2)連按兩次 “Next>” ,選中 “Generate the service xml automatically”(3)按下一步,輸入 service 名稱和類名,我這裡輸入的服務名是:ws;類名是我們剛剛寫的類名:briup.Hello,這裡需要注意加入完整的包名。(4) 按下一步,輸入 service 檔案的儲存路徑和檔案名稱,完成。選擇組建目錄為:C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\axis2\WEB-INF\services,也可以選擇其他目錄,然後copy到這一目錄下。3.測試Web Service開啟[url]http://localhost:8080/axis2/services/listServices[/url]頁面,可以看到ws服務,點擊進到ws的wsdl頁面:[url]http://localhost:8080/axis2/services/ws?wsdl[/url],表明服務部署正確。 三、編寫用戶端代碼調用服務我的這個例子與其他例子最大的不同就在這裡,其他例子一般需要根據剛才的服務wsdl產生用戶端stub,然後通過stub來調用服務,這種方式顯得比較單一,用戶端必須需要stub存根才能夠訪問服務,很不方面。本例子的用戶端不採用stub方式,而是一種實現通用的調用方式,不需要任何用戶端存根即可訪問服務。只需要指定對於的web servce地址、操作名、參數和函數傳回型別即可。代碼如下:
package briup;import javax.xml.namespace.QName;import org.apache.axis2.AxisFault;import org.apache.axis2.addressing.EndpointReference;import org.apache.axis2.client.Options;import org.apache.axis2.rpc.client.RPCServiceClient;public class WsClient {  private RPCServiceClient serviceClient;  private Options options;  private EndpointReference targetEPR;    public WsClient(String endpoint) throws AxisFault {    serviceClient = new RPCServiceClient();    options = serviceClient.getOptions();    targetEPR = new EndpointReference(endpoint);    options.setTo(targetEPR);  }  public Object[] invokeOp(String targetNamespace, String opName,      Object[] opArgs, Class<?>[] opReturnType) throws AxisFault,      ClassNotFoundException {    // 設定操作的名稱    QName opQName = new QName(targetNamespace, opName);    // 設定傳回值        //Class<?>[] opReturn = new Class[] { opReturnType };    // 操作需要傳入的參數已經在參數中給定,這裡直接傳入方法中調用    return serviceClient.invokeBlocking(opQName, opArgs, opReturnType);  }  /**    * @param args    * @throws AxisFault     * @throws ClassNotFoundException     */  public static void main(String[] args) throws AxisFault, ClassNotFoundException {    // TODO Auto-generated method stub    final String endPointReference = "http://localhost:8080/axis2/services/ws";    final String targetNamespace = "http://briup";    WsClient client = new WsClient(endPointReference);        String opName = "sayHello";    Object[] opArgs = new Object[]{"Repace中心"};    Class<?>[] opReturnType = new Class[]{String[].class};        Object[] response = client.invokeOp(targetNamespace, opName, opArgs, opReturnType);    System.out.println(((String[])response[0])[0]);  }}

運行該程式,點擊Run As->Java application,可以看到控制台連接埠的輸出是:Hello, Repace中心  表明用戶端調用成功。該例子最大的不同和優勢表現在用戶端的調用方式,或者說是發起服務調用的方式,雖然比起用戶端stub存根的方式,代碼稍多,但是這種方式統一,不需要生產stub存根代碼,解決了用戶端有很多類的問題。如果讀者對這些代碼進一步封裝,我想調用方式很簡單,只需要傳遞相關參數,這更好地說明了服務調用的優勢。而且這種方式更加簡單明了,一看便知具體含義。而不需要弄得stub類的一些機制。

備忘:本文轉載自:http://panpan.blog.51cto.com/489034/119204/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.