1. 部署环境,下载对应的文件:
下载url:http://axis.apache.org/axis2/java/core/download.html
只需下载war 文件,可以选择最新的版本,也可以选择以前的版本。
将下载后的zip文件解压缩,把axis2.war文件拷贝到tomcat的webapps 目录下,在tomcat 的 bin目录下启动tomcat服务,打开tomcat的页面 http://localhost:8080/axis2/ 能正常打开,说明Axis2 已部署成功。
2. 通过记事本,编写一个简单的java类,内容如下:注意不要加package关键字
public class HelloAxis2 {
public String sayHello(){
return "hello My name is Axis2 .";
}
public String sayHelloToPerson(String name){
if(name==null){
name = "nobody";
}
return "hello,My name is "+name;
}
}
编写完成后,可通过java命令进行编译,如果是eclipse中写的一个单独类,并且勾选了Project--Build Automatically,那么在文件保存的同时,会自动生成对应的class文件。
将此class文件拷贝只webapps下的axis2/pojo 目录下,一般情况下axis2 目录是不包含pojo目录的,可以手动创建一个。
然后启动tomcat,打开IE,输入http://localhost:8080/axis2/services/HelloAxis2/sayHello,就能看到结果返回
输入字符串http://localhost:8080/axis2/services/HelloAxis2/sayHelloToPerson?name=linux,返回结果为:
如果想看到入参出参的结构,在浏览器中输入http://localhost:8080/axis2/services/HelloAxis2?wsdl 回车即可看到,
注意,这里的HelloAxis2是你创建的项目的名称。同时测试的时候,该url是对大小写敏感的,测试的时候,必须与你定义的方法名大小写相同,否则会调用失败。
3. 上面是最简单的一种模式,只是通过IE进行的测试,我们需要编写客户端进行测试。
先创建一个java project ,创建一个class ,只有main方法,需要引入的jar文件有
main方法代码如下,注意有抛出异常。
public static void main(String[] args) throws AxisFault {
// 使用RPC方式调用WebService
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
// 指定调用WebService的URL
EndpointReference er = new EndpointReference("http://localhost:8080/axis2/services/SimpleService");
options.setTo(er);
// 指定sayHelloToPerson方法的参数值
Object[] opAddArgs = new Object[]{"Linux"};
//指定getGreeting方法返回值的数据类型的class对象
Class[] classs = new Class[]{String.class};
//指定要调用的sayHelloToPerson方法及wsdl文件的命名空间,第一个参数表示WSDL文件的命名空间
//通过访问http://localhost:8080/axis2/services/HelloAxis2?wsdl 就可以看见 元素的targetNamespace属性值
QName qname = new QName("http://ws.apache.org/axis2","sayHelloToPerson");
//调用sayHelloToPerson方法并输出该方法的返回值
//这里有三个参数的意思:1,是QName对象,表示要调用的方法名;2,webservice的参数值,参数类型是Object[];3,返回值class对象,参数类型是Class[],
System.out.println(serviceClient.invokeBlocking(qname, opAddArgs,classs)[0]);
//下面是调用sayHello方法的代码,这些代码与调用sayHelloToPerson方法的代码类似
classs = new Class[]{int.class};
qname = new QName("http://ws.apache.org/axis2","sayHello");
//如果没有参数,参数不能为null,应该为new Object[]{},没有返回值,就应该调用invokeRobust
System.out.println(serviceClient.invokeBlocking(qname, new Object[]{},classs)[0]);
}
运行main方法,即可看到结果:
hello,My name is Linux
hello My name is Axis2 .
4. 上面是自己编写的测试类,其实挺麻烦的,通过Axis2提供的工具,还可以自动生成测试类。
先在前面给出的url下载网址中,下载axis2-1.7.5-bin,解压后,有一个bin目录,下面有一个 wsdl2java.bat 文件,通过这个命令,可以自动生成测试类:
打开windows dos窗口,指向bin目录,运行命令 wsdl2java -uri http://localhost:8080/axis2/services/HelloAxis2?wsdl -o test,就会在bin目录下生成一个test目录,在这个目录下,找到HelloAxis2Stub.java 和 HelloAxis2CallbackHandler.java 文件。
注意:这个命令生成的文件并没有package,生成的文件自带了package为 org.apache.ws.axis2 而且生成的HelloAxis2Stub.java文件也是在这个目录下bin\test\src\org\apache\ws\axis2,你将此文件拷贝至你的项目,需要删除相应的package定义。你也可以通过在生成的时候,命令中增加参数 -p 指定package。推荐指定package比较好。
编写main测试类
public static void main(String[] args) throws RemoteException {
// TODO Auto-generated method stub
HelloAxis2Stub sss = new HelloAxis2Stub();
HelloAxis2Stub.SayHello say = new HelloAxis2Stub.SayHello();
System.out.println(sss.sayHello(say).get_return());
HelloAxis2Stub.SayHelloToPerson saytoperson = new HelloAxis2Stub.SayHelloToPerson();
saytoperson.setName("Unix");
System.out.println(sss.sayHelloToPerson(saytoperson).get_return());
}
运行结果为:
hello My name is Axis2 .
hello,My name is Unix
以上就是初步测试Axis2 的全部内容,个人感觉,C# 也提供了一个WSDL 的命令生成工具,生成出来的结果比 Asix2 简单而且好用,有兴趣的朋友可以稍微了解一下,这里我就不多说了,因为实际工作中,SOA接口是非常多的,很少会用这种方式去进行测试,用SOAPUI即可。
主要参考博客url为:http://clq9761.iteye.com/blog/976029/
http://blog.sina.com.cn/s/blog_6d187d270101cd3c.html