在Eclipse中使用Axis2插件WSDL生成Web Service服務端/客戶端

JDK版本:1.7update65java

Eclipse版本:Juno Service Release 2(4.2.2)apache

插件安裝過程及WSDL文件生成過程參見:http://blog.csdn.net/a19881029/article/details/40194787異步

1,下載Axis2的1.6.2版本二進制壓縮包,下載路徑爲:http://axis.apache.org/axis2/java/core/download.cgi,下載完成後解壓,以供以後使用async

2,建立一個普通的Java工程,用來存放自動生成的Web Service服務端/客戶端代碼ide

3,選擇Eclipse菜單欄中的File -> New -> Other...,在彈出的對話框中選擇Axis2 Code Generator,而後選擇Nextui

 

4,選擇經過WSDL文件生成Java源代碼this

5,選擇生成好的WSDL文件.net

6,若是Codegen option選擇default,則不可修改下面的配置項,默認生成Web Service客戶端,若是Codegen option選擇custom,則能夠手動修改下面的配置項插件

7,選擇將自動生成的Java代碼保存在Eclipse當前工做空間中的特定工程中code

8,雖然Axis2依賴的jar包加到了工程中,可是並無添加到工程的Build Path中,須要手動添加一下

9,客戶端生成代碼以下:

生成的時候選擇同時生成同步方法和異步方法,同步方法比較簡單,就很少說了,這裏看下MathStub類中異步方法是如何處理的

......  
public  void startadd(  
    com.sean.Add add2,  
    final com.sean.MathCallbackHandler callback)  
    throws java.rmi.RemoteException{  
......  
callback.receiveResultadd(  
    (com.sean.AddResponse)object);                                      
} catch (org.apache.axis2.AxisFault e) {  
    cllback.receiveErroradd(e);  
}  
......

MathCallbackHandler是個抽象方法

......  
/** 
    * auto generated Axis2 call back method for add method override this method 
    * for handling normal response from add operation 
    */  
public void receiveResultadd(com.sean.AddResponse result) {}  
  
/** 
    * auto generated Axis2 Error handler override this method for handling 
    * error response from add operation 
    */  
public void receiveErroradd(java.lang.Exception e) {}  
......

綜上,實現了本身的異常處理類

package com.sean;  
  
public class MyMathCallbackHandler extends MathCallbackHandler {  
      
    @Override  
    public void receiveResultadd(AddResponse result) {  
        super.clientData = result;  
    }  
  
    @Override  
    public void receiveErroradd(Exception e) {  
        System.out.println(e.getMessage());  
    }  
}

接口調用方式以下

package com.sean;  
  
public class Test {  
    public static void main(String[] args) throws Exception {  
        Math math = new MathStub("http://127.0.0.1:8888/mockMathSoap12Binding");  
        //sync  
        Add add1 = new Add();  
        add1.setArgs0(1);  
        add1.setArgs1(2);  
        AddResponse resp1 = math.add(add1);  
        System.out.println(resp1.get_return());  
          
        //async  
        Add add2 = new Add();  
        add2.setArgs0(5);  
        add2.setArgs1(6);  
        MathCallbackHandler callback = new MyMathCallbackHandler();  
        math.startadd(add2, callback);  
        //As the method is not sync, can't get result immediately.  
        Thread.sleep(1000);  
        AddResponse resp2 = (AddResponse)callback.getClientData();  
        System.out.println(resp2.get_return());  
    }  
}

10,服務端生成代碼以下:

是否選擇生成Sleleton的接口類均可以,若是勾選,則會多生成一個MathSkeletonInterface類,MathSkeleton類變爲該接口類的實現類,在MathMessageReceiverInOut中,由直接調用MathSkeleton類改成調用MathSkeletonInterface接口類,除此以外沒有別的變化

MathSkeleton類中須要添加服務端的處理邏輯

/** 
 * MathSkeleton.java 
 * 
 * This file was auto-generated from WSDL 
 * by the Apache Axis2 version: 1.6.2  Built on : Apr 17, 2012 (05:33:49 IST) 
 */  
package com.sean;  
  
public class MathSkeleton implements MathSkeletonInterface {  
    public com.sean.AddResponse add(com.sean.Add add0) {  
        int a = add0.getArgs0();  
        int b = add0.getArgs1();  
        int result = a + b;  
        AddResponse resp = new AddResponse();  
        resp.set_return(result);  
        return resp;  
    }  
}
相關文章
相關標籤/搜索