在我們的項目成功應用了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方法。