axis2之实现方式xmlbeans

来源:互联网 发布:战舰世界数据查询 编辑:程序博客网 时间:2024/06/06 04:35

axis2数据绑定有好多种方式,其中xmlbeans是一种方式。由于手写工作量太大,所以利用eclipse插件axis2 Wizards 生成客户端。

插件下载地址:

下载eclipse axis2插件
http://mirror.bjtu.edu.cn/apache/axis/axis2/java/core/1.6.2/

安装就不做说明了。

环境:eclipse

第一步、贴上代码

新建一个web工程server

创建类AyncService,代码如下

[java] view plaincopy
  1. package com.bing.service;  
  2. public class AyncService {  
  3.       public String sayHello(String name) {    
  4.             try {    
  5.                 Thread.sleep(3000);    
  6.             } catch (InterruptedException e) {    
  7.                 e.printStackTrace();    
  8.             }    
  9.             return  name+",你好";    
  10.         }    
  11. }  

利用自带的axis2 Wizards> Axis2 Service Archiver生成jar包或者aar包

可参考axis2-1.6.2-docs 文档中关于axis2 Wizards向导的使用(28 Tools/Plug-ins)

注意:1)注意class存放路径,我的是:C:\workspace\lu\server\build\classes

            2) AyncService 要全路径

            3)生成jar包或者aar包都可以

第二步、把生成的asyn.jar复制到你已经启动的%CATALINA_HOME%/webapps/axis2/WEB-INF/services/目录下。

               能够正常访问wsdl。

第三步、生成客户端

               新建web项目client

                利用axis2 Wizards >Axis2 Code Generator。具体使用参考docs文档吧!

注意:1)需要第二步发布出去的wsdl地址:比如我的地址是 http://localhost:8080/axis2/services/asynService?wsdl

            2)选择Codegen Option 为custom。不是默认的default。然后再选择Databinding Name 为xmlbeans

            3)选择生成路径为client项目

            4)导入axis2必要的jar包。(axis2-1.6.2-bin中lib下的jar包)

             生成后的client截图为

[java] view plaincopy
  1. package com.bing.service.impl;  
  2.   
  3. import com.bing.service.AsynServiceCallbackHandler;  
  4. import com.bing.service.SayHelloResponseDocument;  
  5.   
  6. public class MyCallBack extends AsynServiceCallbackHandler {  
  7.   
  8.     @Override  
  9.     public Object getClientData() {  
  10.         System.out.println("---获得数据---");  
  11.         return super.getClientData();  
  12.     }  
  13.   
  14.     @Override  
  15.     public void receiveResultsayHello(SayHelloResponseDocument result) {  
  16.         System.out.println("---接受数据成功---");  
  17.         System.out.println(result.getSayHelloResponse().getReturn());  
  18.     }  
  19.   
  20.     @Override  
  21.     public void receiveErrorsayHello(Exception e) {  
  22.         System.out.println("---获得数据失败---");  
  23.     }  
  24.       
  25. }  


特别注意,需要把一开始生成的resources中schemaorg_apache_xmlbeans文件夹复制到build/classes目录下。即加载类包

   

第四步、编写MyCallBack 实现AsynServiceCallbackHandler

[java] view plaincopy
  1. package com.bing.service.impl;  
  2.   
  3. import com.bing.service.AsynServiceCallbackHandler;  
  4. import com.bing.service.SayHelloResponseDocument;  
  5.   
  6. public class MyCallBack extends AsynServiceCallbackHandler {  
  7.   
  8.     @Override  
  9.     public Object getClientData() {  
  10.         System.out.println("---获得数据---");  
  11.         return super.getClientData();  
  12.     }  
  13.   
  14.     @Override  
  15.     public void receiveResultsayHello(SayHelloResponseDocument result) {  
  16.         System.out.println("---接受数据成功---");  
  17.         System.out.println(result.getSayHelloResponse().getReturn());  
  18.     }  
  19.   
  20.     @Override  
  21.     public void receiveErrorsayHello(Exception e) {  
  22.         System.out.println("---获得数据失败---");  
  23.     }  
  24.       
  25. }  

第五步、客户端测试代码

TestClient.java

[java] view plaincopy
  1. import java.rmi.RemoteException;  
  2.   
  3. import org.apache.axis2.AxisFault;  
  4.   
  5. import com.bing.service.AsynServiceStub;  
  6. import com.bing.service.SayHelloDocument;  
  7. import com.bing.service.SayHelloResponseDocument;  
  8. import com.bing.service.impl.MyCallBack;  
  9.   
  10.   
  11. public class TestClient {  
  12.   
  13.     /** 
  14.      * @param args 
  15.      */  
  16.     public static void main(String[] args) {  
  17.         try {  
  18.             AsynServiceStub stub=new AsynServiceStub(null,"http://localhost:8080/axis2/services/asynService?wsdl");  
  19.             SayHelloDocument reqDoc=SayHelloDocument.Factory.newInstance();  
  20.             reqDoc.addNewSayHello();  
  21.             reqDoc.getSayHello().setName("大兵哥");  
  22.             SayHelloResponseDocument resDoc=stub.sayHello(reqDoc);  
  23.             MyCallBack callback=new MyCallBack();  
  24.             stub.startsayHello(reqDoc,callback);  
  25.             synchronized(callback){    
  26.                     while(!callback.isFinished){    
  27.                         callback.wait(100l);    
  28.                     }    
  29.                     System.out.println("End");    
  30.                 }    
  31.         } catch (AxisFault e) {  
  32.             e.printStackTrace();  
  33.         } catch (RemoteException e) {  
  34.             e.printStackTrace();  
  35.         }catch (InterruptedException e) {  
  36.             e.printStackTrace();  
  37.         }  
  38.     }  
  39.   
  40. }  

控制台:
[plain] view plaincopy
  1. ---接受数据成功---  
  2. 大兵哥,你好  
  3. End  

0 0
原创粉丝点击