1.编写服务代码
首先创建一个web项目Axis2Service,我是用maven创建的,
创建完项目后,编写服务代码,创建Service,起名Axis2ServiceTest.java
代码如下
package com.lei.axis2; public class Axis2ServiceTest { /** * 提供了一个说Hello的服务 * @return */ public String sayHello(String name){ return "Hello "+name; } /** * 提供了一个做加法的服务 * @param a * @param b * @return */ public int add(int a,int b){ return a + b; } }
2.将服务代码打包成arr文件
Eclipse菜单- New - File - Other -Axis2 Service Archiver,见下图
填写刚才的class的路径后,这个路径为刚才写的Service的bin目录,next,见下图
选择跳过 WSDL文件,见下图
如果你的Service有引用jar包,则在这里选择。我写的没有,所以next,见下图
由于我们没有编写service.xml,所以勾选让它自动生成,next
输入Service name(随意)、Class name、点击Load后,会加载Service中的Method,勾选要发布的Method后、next
最后一步,设置aar文件输出目录Output file location为E:\Axis2,和输出的文件名Output File Name为lei_service,然后点Finish:
完成后,找到E:\Axis2目录下的lei_service.aar文件,可以用rar打开后,看到目录结构如下,
进入META-INF目录后,可以看到插件给我们生成的一个service.xml,你可以自己研究下这个自动生成的service.xml了。
3.发布webservice
首先要部署一个axis2服务,将之前下载的axis2-1.6.3-war.zip文件解压后,得到一个axis2.war文件,将这个文件放到tomcat下的webapps文件夹下,然后启动tomcat,
会生自动部署一个axis2项目,可以访问http://localhost:8080/axis2/,看到以下欢迎界面后,证明axis2部署成功,
然后将上一步生成的lei_service.aar文件放到axis2项目下的 WEB-INF\services目录下,然后点击上图中的Services后,进入webservice列表,
在列表中即可找到你要发布的webservice,见下图
从上图中,可以看到刚才的两个方法add和sayHello,证明webservice发布成功。
4.客户端测试
测试代码如下,需要引用axis2-1.6.3-bin\lib下的相应jar包。
package client; import javax.xml.namespace.QName; import org.apache.axis2.AxisFault; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClient; public class Test { public static void main(String[] args) throws AxisFault { // TODO Auto-generated method stub // 使用RPC方式调用WebService RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); //指定调用WebService的URL EndpointReference targetEPR = new EndpointReference( "http://localhost:8080/axis2/services/LeiService"); options.setTo(targetEPR); //指定sayHello方法的参数值 Object[] opAddEntryArgs = new Object[] {"第一个Axis2"}; //指定sayHello方法返回值的数据类型的Class对象 Class[] classes = new Class[]{String.class}; //指定要调用的sayHello方法及WSDL文件的命名空间,其中命名空间为wsdl中的targetNamespace值 QName opAddEntry = new QName("http://axis2.lei.com", "sayHello"); System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0]); } }
测试另一个方法,只要改一下方法名以及传入的参数即可,类似于如下,
//指定sayHello方法的参数值 Object[] opAddEntryArgs = new Object[] {100,201}; //指定sayHello方法返回值的数据类型的Class对象 Class[] classes = new Class[]{int.class,int.class}; //指定要调用的sayHello方法及WSDL文件的命名空间,其中命名空间为wsdl中的targetNamespace值 QName opAddEntry = new QName("http://axis2.lei.com", "add"); System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0]);