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; } }