在Eclipse中使用Axis2插件生成Web Service服务端/客户端

JDK版本:1.7update65

Eclipse版本:Juno Service Release 2(4.2.2)

插件安装过程及WSDL文件生成过程参见:http://blog.csdn.net/a19881029/article/details/40194787

1,下载Axis2的1.6.2版本二进制压缩包,下载路径为:http://axis.apache.org/axis2/java/core/download.cgi,下载完成后解压,以供之后使用

2,创建一个普通的Java工程,用来存放自动生成的Web Service服务端/客户端代码

3,选择Eclipse菜单栏中的File -> New -> Other...,在弹出的对话框中选择Axis2 Code Generator,然后选择Next

在Eclipse中使用Axis2插件生成Web Service服务端/客户端

4,选择通过WSDL文件生成Java源代码

在Eclipse中使用Axis2插件生成Web Service服务端/客户端

5,选择生成好的WSDL文件

在Eclipse中使用Axis2插件生成Web Service服务端/客户端

6,如果Codegen option选择default,则不可修改下面的配置项,默认生成Web Service客户端,如果Codegen option选择custom,则可以手动修改下面的配置项

在Eclipse中使用Axis2插件生成Web Service服务端/客户端

7,选择将自动生成的Java代码保存在Eclipse当前工作空间中的特定工程中

在Eclipse中使用Axis2插件生成Web Service服务端/客户端

8,虽然Axis2依赖的jar包加到了工程中,但是并没有添加到工程的Build Path中,需要手动添加一下

在Eclipse中使用Axis2插件生成Web Service服务端/客户端

9,客户端生成代码如下:

在Eclipse中使用Axis2插件生成Web Service服务端/客户端

生成的时候选择同时生成同步方法和异步方法,同步方法比较简单,就不多说了,这里看下MathStub类中异步方法是如何处理的

[java] view plain copy
 在Eclipse中使用Axis2插件生成Web Service服务端/客户端在Eclipse中使用Axis2插件生成Web Service服务端/客户端
  1. ......  
  2. public  void startadd(  
  3.     com.sean.Add add2,  
  4.     final com.sean.MathCallbackHandler callback)  
  5.     throws java.rmi.RemoteException{  
  6. ......  
  7. callback.receiveResultadd(  
  8.     (com.sean.AddResponse)object);                                      
  9. catch (org.apache.axis2.AxisFault e) {  
  10.     cllback.receiveErroradd(e);  
  11. }  
  12. ......  

MathCallbackHandler是个抽象方法

[java] view plain copy
 在Eclipse中使用Axis2插件生成Web Service服务端/客户端在Eclipse中使用Axis2插件生成Web Service服务端/客户端
  1. ......  
  2. /** 
  3.     * auto generated Axis2 call back method for add method override this method 
  4.     * for handling normal response from add operation 
  5.     */  
  6. public void receiveResultadd(com.sean.AddResponse result) {}  
  7.   
  8. /** 
  9.     * auto generated Axis2 Error handler override this method for handling 
  10.     * error response from add operation 
  11.     */  
  12. public void receiveErroradd(java.lang.Exception e) {}  
  13. ......  

综上,实现了自己的异常处理类

[java] view plain copy
 在Eclipse中使用Axis2插件生成Web Service服务端/客户端在Eclipse中使用Axis2插件生成Web Service服务端/客户端
  1. package com.sean;  
  2.   
  3. public class MyMathCallbackHandler extends MathCallbackHandler {  
  4.       
  5.     @Override  
  6.     public void receiveResultadd(AddResponse result) {  
  7.         super.clientData = result;  
  8.     }  
  9.   
  10.     @Override  
  11.     public void receiveErroradd(Exception e) {  
  12.         System.out.println(e.getMessage());  
  13.     }  
  14. }  

接口调用方式如下

[java] view plain copy
 在Eclipse中使用Axis2插件生成Web Service服务端/客户端在Eclipse中使用Axis2插件生成Web Service服务端/客户端
  1. package com.sean;  
  2.   
  3. public class Test {  
  4.     public static void main(String[] args) throws Exception {  
  5.         Math math = new MathStub("http://127.0.0.1:8888/mockMathSoap12Binding");  
  6.         //sync  
  7.         Add add1 = new Add();  
  8.         add1.setArgs0(1);  
  9.         add1.setArgs1(2);  
  10.         AddResponse resp1 = math.add(add1);  
  11.         System.out.println(resp1.get_return());  
  12.           
  13.         //async  
  14.         Add add2 = new Add();  
  15.         add2.setArgs0(5);  
  16.         add2.setArgs1(6);  
  17.         MathCallbackHandler callback = new MyMathCallbackHandler();  
  18.         math.startadd(add2, callback);  
  19.         //As the method is not sync, can't get result immediately.  
  20.         Thread.sleep(1000);  
  21.         AddResponse resp2 = (AddResponse)callback.getClientData();  
  22.         System.out.println(resp2.get_return());  
  23.     }  
  24. }  

10,服务端生成代码如下:

在Eclipse中使用Axis2插件生成Web Service服务端/客户端

是否选择生成Sleleton的接口类都可以,如果勾选,则会多生成一个MathSkeletonInterface类,MathSkeleton类变为该接口类的实现类,在MathMessageReceiverInOut中,由直接调用MathSkeleton类改为调用MathSkeletonInterface接口类,除此之外没有别的变化

MathSkeleton类中需要添加服务端的处理逻辑

[java] view plain copy
 在Eclipse中使用Axis2插件生成Web Service服务端/客户端在Eclipse中使用Axis2插件生成Web Service服务端/客户端
  1. /** 
  2.  * MathSkeleton.java 
  3.  * 
  4.  * This file was auto-generated from WSDL 
  5.  * by the Apache Axis2 version: 1.6.2  Built on : Apr 17, 2012 (05:33:49 IST) 
  6.  */  
  7. package com.sean;  
  8.   
  9. public class MathSkeleton implements MathSkeletonInterface {  
  10.     public com.sean.AddResponse add(com.sean.Add add0) {  
  11.         int a = add0.getArgs0();  
  12.         int b = add0.getArgs1();  
  13.         int result = a + b;  
  14.         AddResponse resp = new AddResponse();  
  15.         resp.set_return(result);  
  16.         return resp;  
  17.     }  
  18. }