在我们的项目成功应用了Hessian作为远程函数调用的技术方案之后,我又产生了新的疑问,它是除EJB和RMI-OP之外的唯一RPC选择吗?据说AXIS才是Web Service的正选,不管是否应用它,都应该去试试和了解它。那今天就上第一课吧,先做一个HelloWorld程序吧!
1)在http://ws.apache.org/axis/index.html下载AXIS的BIN版本,并将其解压后将其中的webapps\axis目录拷贝到你的tomcat目录下的webapps目录之下。
2)将以下jar拷贝至你的axis/WEB-INF/lib目录下:
activation.jar 、mail.jar 、xalan-2.4.0.jar 、xerces-2.4.0.jar 、 xercesImpl.jar
3)在axis目录下建立以下文件Hello.jws,内容如下:
public class Hello{
public String hello(String name){
if(name==null)
name = "";
return "hello,"+name+"!";
}
}
4)创建JAVA接口程序,在命令行下进入到axis\WEB-INF目录下,在DOS提示符下输入:
Java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/Hello.jws?wsdl
该命令执行的结果是在当前所在目录下产生一个子目录 localhost/axis/Hello_jws,该目录下有四个JAVA源文件,它们分别是:
Hello.java 定义了Web服务接口,此例中只有一个hello方法。
HelloService.java 定义了用于获取Web服务接口的方法。
HelloServiceLocator.java 接口HelloService的具体实现。
HelloSoapBindingStub.java Web服务客户端桩,通过该类与服务器交互。
5)编写调用示例程序Main.java如下:
package localhost.axis.Hello_jws;
public class Main {
public static void main(String[] args) throws Exception {
HelloService service = new HelloServiceLocator();
Hello hello = service.getHello();
System.out.println(hello.hello("sunbeam"));
}
}
6)编译后运行,如果输出以下结果,恭喜你已经成功的完成了你的第一个AXIS WEB Serive程序啦。
> hello,sunbeam
附注:
1)建议使用Eclipse进行开发,将axis目录设为tomcat project工程位置,将WEB-INF下的localhost目录设为源文件目录。并将生成接口程序的命令行程序定为Extend Tool外部程序。这样的生产效率最高也最方便。具体做法今天就懒得写了,以后再补好啦。
2)我顺便写个程序测试一下它所能承载的数据量和运行速度,感觉速度明显低于Hessian(估计接近一个数量级),传输的对象大小也大约是Hessian的1/5-1/10左右,究其原因我推论是Hessian是二进制方式传输数据,Axis的WEB服务是文本型的SOAP协议传输,而且再加上XML标签所占用的大量数据而已。下次再评估一下其它的RPC方法。