Axis2.xAxis2.xAxis2.xAxis2.xWebServiceWebServiceWebServiceWebService上次介绍了axis1.x的用法,这次继续上次的,将叙述axis2的用法。Axis1.x在线博文:一、准备工作1、开发准备首先需要下载axis2的相关jar包,到axis的官方网站即可获得开发的依赖包。下载地址:现在最高的版本是1.5.4的然后你需要下载官方提供的axis的eclipse插件工具,可以帮助我们打包(aar)及其生产客户端调用代码。下载页面:、安装eclipse插件如果你的eclipse插件安装成功后,会看到如下效果:3、分析axis2-bin文件目录结构下载下来的axis2的依赖库,其中有一个axis2-1.5.3-bin.zip的库文件,目录结构如下:bin文件夹是axis2的常用工具,其中有将wsdl文件转换成客户端调用的wsdl2java工具及将java转换成wsdl文件的工具conf是axis2的配置文件lib运行所要的依赖库repository是发布过的axis服务和文件sample是示例1AxisAxisAxisAxisWebServiceWebServiceWebServiceWebService技术指南欢迎转载请保留原文作者信息不得未经作者允许用于商业用途webapp是web文件和jsp页面等4、我们需要将下载下来的axis2-1.5.3-war.zip中的axis2.war这个文件放在我们的tomcat目录下,启动tomcat就会把war文件转成一个可以跑起来的axis2的项目。Tomcat启动后,在浏览器中输入:你可以看到二、Axis2的简单WebService示例1、编写一个简单的WebService的服务器端代码,代码如下:importimportimportimportjava.util.Random;/***bfunction:/bWebServiceHelloWorld服务示例*@author@author@author@authorhoojo*@createDate@createDate@createDate@createDate2011-1-5下午03:35:06*@file@file@file@fileHelloWorldService.java*@package@package@package@packagecom.hoo.service*@project@project@project@projectAxis2WebService*@blog@blog@blog@blog*@email@email@email@emailhoojo_@126.com*@version@version@version@version1.0*/publicpublicpublicpublicclassclassclassclassHelloWorldService{publicpublicpublicpublicStringsayHello(Stringname){returnreturnreturnreturnname+say:hello[axis2];}publicpublicpublicpublicintintintintgetAge(intintintinti){returnreturnreturnreturni+newnewnewnewRandom().nextInt(100);}}注意,上面的HelloWorldService是没有package的。Copy这个类的class文件,放到tomcat目录下的webapps的axis2的WEB-INF目录的pojo文件夹下。如果没有pojo这个目录就手动创建一个一个文件夹。然后在浏览器输入:点击Services的链接就可以看到我们手动发布的HelloWorldService了,或者是浏览器地址栏输入:你就可以看到你刚才粘贴过去的这个WebService了。2AxisAxisAxisAxisWebServiceWebServiceWebServiceWebService技术指南欢迎转载请保留原文作者信息不得未经作者允许用于商业用途点击链接就可以看到wsdl文件的内容了。内容很多,如果你看过axis1.x的介绍就知道wsdl文件的大致结构了。下面讲解下为什么要将class放在pojo文件夹下。首先我们看看[tomcat_home]/webapps/axis2/WEB-INF/conf/axis2.xml该文件中有这样一行代码:deployerextension=.classdirectory=pojoclass=org.apache.axis2.deployment.POJODeployer/.class的后缀文件放在目录pojo目录下。2、测试这个WebService的方法复制上面的HelloWorldService的链接地址,然后带上方法名称和参数值即可测试调用是否成功。如下:=jack这个是WebService的地址/sayHello是方法名称,?name=jack是参数名称和值在浏览器中输入上面的地址后,可以看到如下效果:可以看到返回值,和方法名称。ns:sayHelloResponse是方法名称,所有的方法名称后都会带上Response,后面的ns当然是当前方法所在的类的包名了,这里没有package就是默认的axis2的域名。同样,getAge方法,也是一样的调用方法。3AxisAxisAxisAxisWebServiceWebServiceWebServiceWebService技术指南欢迎转载请保留原文作者信息不得未经作者允许用于商业用途=22结果如下:3、下面我们看下客户端调用代码的编写,代码如下:packagepackagepackagepackagecom.hoo.service;importimportimportimportjavax.xml.namespace.QName;importimportimportimportorg.apache.axis2.AxisFault;importimportimportimportorg.apache.axis2.addressing.EndpointReference;importimportimportimportorg.apache.axis2.client.Options;importimportimportimportorg.apache.axis2.rpc.client.RPCServiceClient;/***bfunction:/bHelloWorldService客户端调用代码*@author@author@author@authorhoojo*@createDate@createDate@createDate@createDate2011-1-7下午03:55:05*@file@file@file@fileHelloWorldClient.java*@package@package@package@packagecom.hoo.service*@project@project@project@projectAxis2WebService*@blog@blog@blog@blog*@email@email@email@emailhoojo_@126.com*@version@version@version@version1.0*/publicpublicpublicpublicclassclassclassclassHelloWorldClient{publicpublicpublicpublicstaticstaticstaticstaticvoidvoidvoidvoidmain(String[]args)throwsthrowsthrowsthrowsAxisFault{//RPCServiceClient是RPC方式调用RPCServiceClientclient=newnewnewnewRPCServiceClient();Optionsoptions=client.getOptions();//设置调用WebService的URLStringaddress==newnewnewnewEndpointReference(address);options.setTo(epf);/***设置将调用的方法,是方法*默认(没有package)命名空间,如果有包名*就是包名倒过来即可*sayHello就是方法名称了*/4AxisAxisAxisAxisWebServiceWebServiceWebServiceWebService技术指南欢迎转载请保留原文作者信息不得未经作者允许用于商业用途QNameqname=newnewnewnewQName();//指定调用的方法和传递参数数据,及设置返回值的类型Object[]result=client.invokeBlocking(qname,newnewnewnewObject[]{jack},newnewnewnewClass[]{String.classclassclassclass});System.out.println(result[0]);qname=newnewnewnewQName();result=client.invokeBlocking(qname,newnewnewnewObject[]{newnewnewnewInteger(22)},newnewnewnewClass[]{intintintint.classclassclassclass});System.out.println(result[0]);}}如果你了解或是看过axis1.x的WebService,这里的客户端调用代码比较简单,有部分关键注释,这里就不多加赘述。值得注意的是axis2的WebService客户端调用的返回对象是一个Object的数组,这点和axis1.x有很大不同。我们一般拿数组的第一个值,转换强转即可。三、复杂