在我们的项目成功应用了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方法。