`

用axis2尝试发布与调用webservice

阅读更多

项目中用到了webservice去调用另外一个公司提供的功能插件,看了下原始代码,是用axis2去调用的,以前学过点cxf,不明白他们的区别,但是想用cxf重新来写。于是有了下面的痛苦过程。

首先,是走通axis2的流程,从Google上找到很多,下面copy一份咱javaeyes论坛中deltaj的连载内容,加上点自己的心得。

第一步,准备工作。

1.下载axis2 的2进制的包和war,现在的最新版本是1.4.1 发布时间是2008-8-25

地址分别是:http://apache.mirror.phpchina.com/ws/axis2/1_4_1/axis2-1.4.1-bin.zip

                  http://apache.mirror.phpchina.com/ws/axis2/1_4_1/axis2-1.4.1-war.zip

当时忘了下载/axis2-1.4.1-bin.zip这个包,如果不用命令行去执行的话应该问题不大。

 

2.把下载后的war放入tomcat的webapps目录里,然后启动tomcat,这样war包就会自动解压为目录axis2

在浏览器中输入http://localhost:8080/axis2/  ,如果一切正常你会看到下面的画面

 




 
 3,就开始准备一下axis2的eclispe的插件了。axis2的eclispe插件分为2个,一个是帮助我们生成aar文件的,另一个是帮我们用wsdl文件生成stub代码的。

下载地址是

http://www.apache.org/dyn/mirrors/mirrors.cgi/ws/axis2/tools/1_4_1/axis2-eclipse-service-archiver-wizard.zip

 

http://www.apache.org/dyn/mirrors/mirrors.cgi/ws/axis2/tools/1_4_1/axis2-eclipse-codegen-wizard.zip

下载完2个压缩文件后,可以直接把解压后的文件拷贝到plugins目录中,也可以在links目录中写文件路径的方式来安装插件,安装完插件后,打开eclipse,在package explorer 中点击右键--->选择new---->other

如果安装正确你会看到


然后开始第二步,先来发布一个webservice。

  1. package  com.deltaj.server;  
  2.   
  3. public   class  SimpleServer {  
  4.   
  5.     /**  
  6.      * 简单的测试方法  
  7.      *   
  8.      */   
  9.     public  String simpleMethod(String name) {  
  10.         return  name +  "Say this is a Simple method ^-^" ;  
  11.     }  
  12.   
  13. }  
package com.deltaj.server;

public class SimpleServer {

	/**
	 * 简单的测试方法
	 * 
	 */
	public String simpleMethod(String name) {
		return name + "Say this is a Simple method ^-^";
	}

}

 

主要的过程就是如何利用axis2的eclispe插件来发布这个服务啦。

 

1。在eclispe 的package Explorer 中点击右键,在菜单中选择新建--->other...----->Axis2 Service Archiver

 

2.然后点击next进入了类选择页面,在这个页面中的Class File Location选择框中选择类所在的文件夹。 (这里要更正一下,其实这个路径是classes根目录,既不是java目录也不是其一个class文件的子目录)


 3.点击next之后进入了选择 wsdl文件,这里我们选择skip wsdl。

 

 

4. 点击next之后,进入的是选择jar文件的页面,这里我们没有外部的jar,所以点击next直接跳过这个页面。


 4.点击next之后,进入的是选择xml页面,这里我们选择的是自动生成xml,也就是勾选

Generate the service xml automatically这一项


 5.点击next之后,进入的是生成xml文件的页面,在service name 里填写这个服务所起的名字,这里我起名为simpleServer,然后在class name 中填写要发布的类,这里一定要写全路径,写好后就可以点击load 按钮,

如果一切ok的话,你会看到如下画面(这里路径一定要包含所在的包的路径,唉,我吃亏吃大了。


 6 点击next 后,进入的是输出artiver文件的页面,先要在output File location 中选择要输出的路径,

   在output  File Name中输入artiver文件的名称。我起的名字是simpleServer


 7.点击finish ,如果看到如下的画面,恭喜你,服务发布成功啦。

 

8.接下来,我们就可以把这个aar文件放入tomcat中发布,首先把生成的aar文件拷贝到tomcat目录中的axis2项目的service目录中位置如图。


 

9.接下来启动tomcat,在地址栏中输入http://localhost:8080/axis2  ,你会看到axis2的欢迎画面

 

10.点击Service连接,你会看到发布的服务列表。这里面就能看到我们发布的simpleService


 11.点击我们的服务simpleServer的连接,我们会看到。至此,服务发布成功。

我们看到自己的发布了一个webservice,那么下一步,自然是想测试下如何来调用它。

第三步,调用。

首先给出deltaj的方法,很幸运,他一次性就成功了。

1.在eclispe 的package Explorer 中点击右键,在菜单中选择新建--->other...----->Axis2 Code Generator



2.点击next,进入下一个页面,选择从wsdl文件来产生java文件。

3. 点击next,然后选择wsdl文件,注意此处要填写上一节我们

 4.点击next,进入设置页面,这里我们就用默认的设置。

5. 点击next,选择输出文件的路径。

6.点击next,如果看到这个页面,恭喜你已经生成代码成功。

7.在package Explorer中刷新一下项目,然后你发现出现2个新的文件SimpleServerStub和SimpleServerCallbackHandler 。打开SimpleServerStub你会惊喜的发现。著名的小红叉一个接一个的

这是因为没有axis2的类包。我们可以在下载的axis2-1.4.1-bin中找到lib包,把其中的jar都加入我们的工程中。

然后重新编译一下工程,这时我们发现SimpleServerStub还是有几个小红叉。这个是因为这个插件有个小bug。

生成的代码没有实现序列化方法。我们可以自己来加上,在小红叉上点一下,弹出一个小菜单,选择

Add unimplemented methods .


8.

Java代码 <embed type="application/x-shockwave-flash" width="14" height="15" src="http://deltaj.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=%2F**%0A%26nbsp%3B*%20%E8%B0%83%E7%94%A8%E5%8F%91%E5%B8%83%E7%9A%84%E6%9C%8D%E5%8A%A1%E3%80%82%0A%26nbsp%3B*%20%0A%26nbsp%3B*%2F%0Apublic%20class%20SimpleClient%20%7B%0A%26nbsp%3B%0A%26nbsp%3Bpublic%20static%20void%20main(String%5B%5D%20args)%20throws%20Exception%7B%0A%26nbsp%3B%26nbsp%3B%0A%26nbsp%3B%26nbsp%3B%2F%2F%E5%88%9D%E5%A7%8B%E5%8C%96%E6%A1%A9%E6%96%87%E4%BB%B6%0A%26nbsp%3B%26nbsp%3BSimpleServerStub%20stub%20%3D%20new%20SimpleServerStub()%3B%0A%26nbsp%3B%26nbsp%3B%2F%2F%E5%88%9D%E5%A7%8B%E5%8C%96SimpleMethod%E6%96%B9%E6%B3%95%E3%80%82%0A%26nbsp%3B%26nbsp%3BSimpleServerStub.SimpleMethod%20request%20%3D%20new%26nbsp%3B%20SimpleServerStub.SimpleMethod()%3B%0A%26nbsp%3B%26nbsp%3B%2F%2F%E8%B0%83%E7%94%A8simpleMethod%E7%9A%84setName%E6%96%B9%E6%B3%95%E3%80%82%0A%26nbsp%3B%26nbsp%3Brequest.setName(%22zt%22)%3B%0A%26nbsp%3B%26nbsp%3B%2F%2F%0A%26nbsp%3B%26nbsp%3BSystem.out.println(stub.simpleMethod(request).get_return())%3B%0A%26nbsp%3B%26nbsp%3B%0A%26nbsp%3B%26nbsp%3B%0A%26nbsp%3B%7D%0A%7D" quality="high" allowscriptaccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
  1. /**  
  2.  * 调用发布的服务。  
  3.  *   
  4.  */   
  5. public   class  SimpleClient {  
  6.    
  7.  public   static   void  main(String[] args)  throws  Exception{  
  8.     
  9.   //初始化桩文件   
  10.   SimpleServerStub stub = new  SimpleServerStub();  
  11.   //初始化SimpleMethod方法。   
  12.   SimpleServerStub.SimpleMethod request = new   SimpleServerStub.SimpleMethod();  
  13.   //调用simpleMethod的setName方法。   
  14.   request.setName("zt" );  
  15.   //   
  16.   System.out.println(stub.simpleMethod(request).get_return());  
  17.     
  18.     
  19.  }  
  20. }  
/**
 * 调用发布的服务。
 * 
 */
public class SimpleClient {
 
 public static void main(String[] args) throws Exception{
  
  //初始化桩文件
  SimpleServerStub stub = new SimpleServerStub();
  //初始化SimpleMethod方法。
  SimpleServerStub.SimpleMethod request = new  SimpleServerStub.SimpleMethod();
  //调用simpleMethod的setName方法。
  request.setName("zt");
  //
  System.out.println(stub.simpleMethod(request).get_return());
  
  
 }
}

   如果一切正常,你就会看到结果

log4j:WARN No appenders could be found for logger (org.apache.axis2.description.AxisService).
log4j:WARN Please initialize the log4j system properly.
ztSay this is a Simple method ^-^。

 

可惜我没有那么幸运,通过这种向导的方式, 我遇到了不少人都遇到的一个异常,An error ocurred while completing process    -java.lang.reflect.InvocationTargetException。看到一些人的解决方案,我试着做了,依然不行。 关闭 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

很无奈,总不能功亏一篑,再去问同事,他说他没有用插件向导的方式,用的是窗口方式,此时我才发现我缺少了一个包,就是上面提到的axis2的一个包。里面有bin目录,于是下载后使用命令行,C:\soa\axis2\bin>WSDL2java -uri http://219.237.203.117/cws/cws.asmx?WSDL -o D:\w
orkspace\WSjava
Using AXIS2_HOME:   C:\soa\axis2
Using JAVA_HOME:    E:\Program Files\Java\jdk1.5.0_05
Retrieving document at 'http://219.237.203.117/cws/cws.asmx?WSDL'.,出现这三行后,在指定的目录中找到生成的两个java文件,终于长舒一口气。剩下的就是写main函数测试,这个没有问题。按同样的方法去调用项目中的webservice,竟出现了错误,无奈,但至少这个axis2的使用时没有问题的。下面,我会用cxf来在走一遍。

 

 

 

 

分享到:
评论

相关推荐

    axis2发布webservice和调用axis2服务接口

    本文将详细讲解如何使用Axis2来发布Web服务以及如何生成客户端代码来调用这些服务。 首先,让我们了解发布Web服务的过程: 1. **创建WebService**:在Axis2中,可以通过编写一个简单的Java类并暴露其方法作为Web...

    Axis2发布和调用webservice

    描述了axis2如何调用webservice,jar齐全,首先保证webservice的url能正常访问,下载资源后直接运 行com.axis2.test.TestAxis2的main方法即可。 axis2功能十分强大,可接受方法中返回任何类型,比如List, Set,...

    Axis2教程和java调用webservice的各种方法总结

    标题“Axis2教程和java调用webservice的各种方法总结”表明了本文档主要聚焦于两个核心内容:一是Axis2框架的使用教程,二是Java语言调用Web服务的不同方法的综合概述。 描述中的“Axis2教程”暗示了会详细讲解Axis...

    axis2客户端调用webService接口,精简jar包

    本文将深入探讨如何使用Axis2客户端调用WebService接口,并且会特别关注如何精简所需的jar包。 首先,了解Axis2客户端的基本概念是至关重要的。Axis2客户端是用于与远程Web服务交互的工具,它允许开发者通过SOAP...

    Android axis调用Webservice

    - 服务发布后,可以通过Axis2的wsdl2java工具,根据服务的WSDL(Web Service Description Language)文件生成客户端所需的Java类(stubs)。 - 这些类将封装调用Web Service的具体方法,简化了调用流程。 4. **...

    AXIS2远程调用WebService示例(Eclipse+AXIS2)工具和所用包.rar

    AXIS2远程调用WebService是Java开发者在进行分布式服务交互时常用的一种技术。本文将详细介绍如何使用Eclipse集成开发环境和AXIS2框架创建并调用WebService。首先,我们需要准备以下基础工具: 1. Eclipse IDE:这...

    java webservice axis2 通过 js javascript 调用webservice

    webseservice 客户端调用,java发布的axis2 webservice,通过 js调用调用webservice,普通ajax实现,里面有详细注释,代码简单明了,我自己做过测试。希望对大家有所帮助。

    java客户端调用webservice所调用的axis1.4包和方法调用

    本方法是用axis1.4技术,实现java客户端调用webservice。已经可实现过可行的,如果不行可加我QQ号302633进行详细解析。

    axis2 调用webservice 例子

    &lt;groupId&gt;org.apache.axis2 &lt;artifactId&gt;axis2 &lt;version&gt;1.6.2 &lt;groupId&gt;org.apache.axis2 &lt;artifactId&gt;axis2-adb &lt;version&gt;1.6.2 &lt;groupId&gt;org.apache.axis2 ...

    axis2客户端调用webService的DEMO

    用AXIS2作为客户端调用webService的demo:亲测可用,eclipse工程java项目包含完整代码和完整jar包, 只要用eclipse导入项目即可,运行控制台显示success或者false字符串,说明OK。

    Java+Axis2调用Web Services 网络接口

    Java和Axis2是开发Web服务客户端的重要工具,用于调用基于SOAP协议的Web服务。本文将深入探讨如何利用Java和Axis2库来实现这一功能,同时结合提供的代码示例进行详细解析。 首先,Web服务是一种通过网络进行通信的...

    axis2调用WebService详细说明

    在本文档中,我们将详细介绍如何使用Axis2来发布和调用WebService服务。 对于Axis2程序包的下载,可以访问其官方网站:[http://ws.apache.org/axis2/](http://ws.apache.org/axis2/) 进行下载。需要注意的是,由于...

    axis2例子 webservice axis2 示例

    axis2例子 webservice axis2 示例axis2例子 webservice axis2 示例axis2例子 webservice axis2 示例axis2例子 webservice axis2 示例axis2例子 webservice axis2 示例

    java调用webservice的axis2.jar包

    总结,Java调用WebService使用Axis2.jar包时,需理解其组件功能,按照规范流程操作,结合最佳实践,可以有效地与Web服务进行交互。同时,随着技术的发展,也应关注新的Web服务框架和标准,如JAX-RS(Java API for ...

    Axis2发布以及调用webservice具体实例

    ### Axis2 发布及调用 WebService 具体实例详解 #### 一、概述 本文将详细介绍如何使用 Apache Axis2 在 Tomcat 6.0 上发布 WebService 服务端,并实现客户端的调用。通过本教程,您将学会一种简单易行的方法来...

    Java Axis 直接调用webservice 接口工具类

    Java Axis 直接调用webservice 接口工具类, 无需根据wsdl编译客户端,需要axis相关包,测试使用axis 1.4, 附demo引入axis包后直接可以测试;

    axis2调用webservice接口jar包

    本文将详细介绍如何使用Axis2调用WebService接口,并基于提供的jar包"axis2-1.7.6"进行说明。 **一、Axis2简介** Axis2是Apache软件基金会开发的一个Web服务引擎,它基于SOAP(Simple Object Access Protocol)和WS...

    Java动态调用webService,axis2动态调用webService

    本文将深入探讨如何使用Axis2来动态地调用Web Service,并通过分析`WebServiceInvoker.java`这个文件来理解其实现原理。 1. **Java动态调用Web Service**: 在Java中,动态调用Web Service主要涉及到JAX-WS(Java ...

    axis客户端调用webservice

    java axis客户端调用webservice,可应用于ofbiz框架。 解决网络上共享代码两次调用后会出现timeout的BUG

Global site tag (gtag.js) - Google Analytics