一、简介ApacheAxis2是下一代ApacheAxis。Axis2虽然由Axis1.x处理程序模型提供支持,但它具有更强的灵活性并可扩展到新的体系结构。Axis2基于新的体系结构进行了全新编写,而且没有采用Axis1.x的常用代码。支持开发Axis2的动力是探寻模块化更强、灵活性更高和更有效的体系结构,这种体系结构可以很容易地插入到其他相关Web服务标准和协议(如WS-Security、WS-ReliableMessaging等)的实现中。ApacheAxis2是Axis的后续版本,是新一代的SOAP引擎。官方网站:二、下载ApacheAxis2下载页面:(当前最新版本1.6.2)ApacheAxis2BinaryDistribution(1.6.2)::插件:ServiceArchiveWizard-EclipsePlug-in(用来将服务代码打包成后缀名为.aar文件的插件):(用来将服务代码生成wsdl文件以及解析将wsdl文件生成客户端代码的插件):安装插件:我用的是MyEclipse10,以我的环境为例:将两个插件解压后放到D:\sdk\MyEclipse\MyEclipse10\dropins目录下面,启动MyEclipseFile-New-Other可以找到:三、部署axis2war解压下载的axis2-1.6.2-war.zip得到一个axis2.war文件,将这个文件丢到tomcat\webapps目录,启动tomcat访问看到如下界面,部署成功。四、编写服务代码[java]viewplaincopyprint?1.packagecom.xcy;2.3./**4.*@author肖纯勇(Siuon)5.*@version1.06.*@create2012-7-19下午8:23:497.*/8.publicclassAxis2WB{9./**10.*提供了一个说Hello的服务11.*@return12.*/13.publicStringsayHello(Stringname){14.returnHello+name;15.}16.17./**18.*提供了一个做加法的服务19.*@parama20.*@paramb21.*@return22.*/23.publicintadd(inta,intb){24.returna+b;25.}26.27.}五、将服务代码打包成arr文件:Eclipse菜单-New-File-Other-Axis2ServiceArchiverclassfilelocation:为刚刚写的Axis2WB类所在工程的bin目录选择skipwsdl如果你的Axis2WB有引用jar包,则在这里选择。我写的没有,所以next由于我们没有编写service.xml,所以勾选让它自动生成,next输入服务名称(随意)、类全名、load、next设置aar文件名以及存放目录(我是放在桌面)--Finish:完成后,可以看到桌面上多了一个axis2wb.aar文件,我们用winrar打开:有没有感觉很眼熟?很像一个jar包、我们点击META-INF目录进去,可以看到插件给我们生成的一个service.xml,打开看看(是不是明白插件做了些啥了):六、发布将axis2wb.aar文件丢到之前部署的axis2应用的WEB-INF\services\目录下面,重启tomcat再访问点击Service看到上图,说明发布成功七、生成客户端代码你可以用jdk6自带的wsimport工具生成客户端代码:Java6开发WebService也可以通过axis2的Eclipse插件生成客户端代码:Eclipse菜单-File-New-Other-Axis2CodeGeneratorGenerateJavasourcecodefromaWSDLfile:根据WSDL生成webservice客户端的java代码。(在这里,我们选择这个)GenerateaWSDLfromaJavasourcefile:根据一个java源文件生成wsdl文件(这个源文件是打算发布成Web服务的java源文件,例如本demo中的Axis2WB.java)。生成完代码后,你会发现报错,原因是因为缺少相关的jar包。解压在第一步中下载的axis2binary.zip将解压后的目录中的lib下面的所有jar包,拷进来,添加到classpath中:8、调用Web服务[java]viewplaincopyprint?1.packagetest;2.3.importjava.rmi.RemoteException;4.5.importcom.xcy.Add;6.importcom.xcy.AddResponse;7.importcom.xcy.Axis2WB;8.importcom.xcy.Axis2WBStub;9.importcom.xcy.SayHello;10.importcom.xcy.SayHelloResponse;11.12./**13.*@author肖纯勇(Siuon)14.*@version1.015.*@create2012-7-19下午9:18:2316.*/17.publicclassTest{18.publicstaticvoidmain(String[]args)throwsRemoteException{19.//创建客户端对象20.Axis2WBaxis2wb=newAxis2WBStub();21.22.//new一个调用sayHello方法需要的参数SayHello,并且设置name23.SayHellosayHello=newSayHello();24.sayHello.setName(Siuon);25.//调用web服务26.SayHelloResponsesayHelloResponse=axis2wb.sayHello(sayHello);27.//拿到返回结果28.System.out.println(sayHelloResponse.get_return());29.30.31.Addadd=newAdd();32.add.setA(5);33.add.setB(3);34.AddResponseaddResponse=axis2wb.add(add);35.System.out.println(addResponse.get_return());36.}37.}结果: