使用axis2实现web service(三)

来源:互联网 发布:网络电视能看电视台吗 编辑:程序博客网 时间:2024/05/22 10:29



上一篇记录了不使用stub方式实现对web service接口的调用,今天记录通过stub方式实现对web service 接口的调用,具体如下:

前提:有一个web service接口,wsdl:http://localhost:8080/axis2/services/Hello?wsdl ,方法声明是:

 public String sayHello(String user)

 

创建客户端的步骤:

1、建一个java project

2、选中1中project,右键-->new-->other....-->Axis2 Code Generator

3、点next,进入下一个页面,选择:Generate Java source code from a WSDL file

4、点next,在WSDL file location 中输入:http://localhost:8080/axis2/services/Hello?wsdl

5、点击next,进入设置页面,不熟悉的话,暂用默认设置

6、点击next,选择输出文件的路径:

     这里选择 Browse and select location on local file system,Output path 通过Browse 选择1中建立的java project,注:只选择到src文件即可,下面的不用再选,axis2会自动帮你生成package,下面两个Add选项可根据情况选择

7、点击next,如果弹出successfully提示框,则说明ok了,否则需要找问题原因,并解决,我在使用的时候,遇到了如下问题:

弹出提示框:Axis2 Eclipse plugin: Code Generator Exception: java.lang.reflect.InvocationTargetException

网上查得原因及解决方法(http://blog.163.com/gym_1119/blog/static/34559867200910159245578/):


[问题原因]
主要的问题在于 Code Generator plugin 内缺少了 backport-util-concurrent-3.1.jar 包

[解决方案]
- 关闭 Eclipse
- copy %AXIS2_HOME%/lib/backport-util-concurrent-3.1.jar 到下列 folder
%ECLIPSE_HOME%/plugins/Axis2_Codegen_Wizard_1.3.0/lib

- 注册此 jar 包: 編輯 %ECLIPSE_HOME%/plugins/Axis2_Codegen_Wizard_1.3.0/plugin.xml , 在 <runtime> 內加入下面的字串
<library name="lib/backport-util-concurrent-3.1.jar">
<export name="*"/>
</library>

- 执行 Eclipse 即可

- 若问题仍存在, 尝试改变Eclipse 使用的 JRE, 换成 JAVA 6
- 使用 JRE 1.6 启动 Eclipse 后, 若仍有问题, 试着加入 -clean 参数启动 Eclipse, 清除 osig cache:
eclipse.exe -vm "c:/java/jre1.6.0_05/bin/java.exe" -clean -console -consoleLog -debug -vmargs -Xmx384M

- 关闭 Eclipse 后, 再以一般方式启动 Eclipse, 应可解决问题

 

我是添加jar包后,执行了eclipse.exe -vm "c:/java/jre1.6.0_05/bin/java.exe" -clean -console -consoleLog -debug -vmargs -Xmx384M  命令,后解决了问题的

8、完成步骤7后,刷新步骤1中的project,发现project的src下多了一个briup包,包下有2个java文件:HelloCallbackHander.java 、HelloStub.java   (我的web service服务名字叫Hello)

9、步骤8中刷新后,会出现却包提示的错误,将对应的包导入即可,较方便的办法是将axis2 lib目录下所有的包到到一个user library中,然后将该user library导入工程中。

10、新建一个package,在该package下建你调用服务的类,这里我见了一个类,然后调用接口。写了一个简单的例子,其他的可以依葫芦画瓢:

[java] view plaincopy
  1. package client;  
  2.   
  3. import java.rmi.RemoteException;  
  4.   
  5. import briup.HelloStub;  
  6.   
  7. public class HelloClient {  
  8.   
  9.     /** 
  10.      * @param args 
  11.      * @throws RemoteException  
  12.      */  
  13.     public static void main(String[] args) throws RemoteException {  
  14.         HelloStub stub=new HelloStub();  
  15.         HelloStub.SayHello request=new HelloStub.SayHello();  
  16.         request.setUser("karen ");  
  17.           
  18.         System.out.println(stub.sayHello(request).get_return());  
  19.     }  
  20.   
  21. }  

 

11、运行,控制台上打印出如下内容:

log4j:WARN No appenders could be found for logger (org.apache.axis2.description.AxisService).
log4j:WARN Please initialize the log4j system properly.
Hello,karen

 

12、ok,over了!

原创粉丝点击