Axis提供了两种服务发布方式,一种是即时发布(Instant Deployment),一种是定制发布(Custom Deployment)。
使用即时发布
对即时发布的支持是Axis的特色之一,使用即时发布使用户只需有提供服务的Java类的源代码,即可将其迅速发布成Web服务。每当用户调用这类服务的时候,Axis会自动进行编译,即使服务器重启了也不必对其做任何处理,使用非常简单快捷。
使用即时发布首先需要一个实现服务功能的Java源文件,将其扩展名改为.jws(Java Web Service的缩写),然后将该文件放到“……\webapps\axis”目录下即可。
使用定制发布
即时发布是一项令人激动的技术,它使Web服务的开发变得如此简单;然而即时发布并不总是最好的选择,比如有些应用系统是第三方提供的,我们没有购买源代码,只有.class文件,但我们又希望将这个应用系统的一些功能对外发布成Web服务,使其能够在更大范围内产生作用,这个时候即时发布技术就无能为力了。此外,即时发布技术并不灵活,无法进行更多的服务配置,这使得它并不能满足一些特定系统的需求。
因此,Axis提供了另一种服务发布方式,这就是定制发布。
在此给出一个从加仑到升的容积单位转换的服务,其源码如下:
文件Capacity.java
package samples.capacity;
public class Capacity{
public double convertGallon2Litre(double gallon){
// 实现加仑到升的容积转换
return gallon * 4.546;
}
}
将其编译成.class文件,放置到“……\webapps\axis\WEB-INF\classes\samples\capacity”目录下,即可着手进行发布。
定制发布不需要构建.jws文件,但必须创建服务发布描述文件deploy.wsdd(Web Service Deployment Descriptor的缩写),这个文件负责描述服务的名称、入口等信息,其内容如下:
文件deploy.wsdd
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="Capacity" provider="java:RPC">
<parameter name="className" value="samples.capacity.Capacity"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
将该文件也放到“……\webapps\axis\WEB-INF\classes\samples\capacity”目录下,然后可以采用Axis提供的一个客户端管理工具——AdminClient来完成服务的定制发布。
在“……\webapps\axis\WEB-INF\classes\samples\capacity”目录下,运行:
java org.apache.axis.client.AdminClient deploy.wsdd
执行该命令前需将 <AXIS_HOME>/lib目录下所有jar包 以及 mail.jar、activation.jar 加入classpath。
就是说创建一个环境变量classpath,将jar包的路径都加进去。
参考路径:
%AXIS_HOME%\lib\activation.jar;%AXIS_HOME%\lib\axis.jar;%AXIS_HOME%\lib\axis-ant.jar;%AXIS_HOME%\lib\bsf.jar;%AXIS_HOME%\lib\castor-0.9.5.2.jar;%AXIS_HOME%\lib\commons-codec-1.2.jar;%AXIS_HOME%\lib\commons-discovery-0.2.jar;%AXIS_HOME%\lib\commons-httpclient-3.0-rc2.jar;%AXIS_HOME%\lib\commons-logging-1.0.4.jar;%AXIS_HOME%\lib\commons-net-1.0.0-dev.jar;%AXIS_HOME%\lib\httpunit.jar;%AXIS_HOME%\lib\ibmjsse.jar;%AXIS_HOME%\lib\javax.jms.jar;%AXIS_HOME%\lib\jaxrpc.jar;%AXIS_HOME%\lib\JimiProClasses.jar;%AXIS_HOME%\lib\junit-3.8.1.jar;%AXIS_HOME%\lib\log4j-1.2.8.jar;%AXIS_HOME%\lib\mailapi_1_3_1.jar;%AXIS_HOME%\lib\saaj.jar;%AXIS_HOME%\lib\servlet.jar;%AXIS_HOME%\lib\wsdl4j-1.5.1.jar;
可以看到以下运行结果:
Processing file deploy.wsdd
<Admin>Doneprocessing</Admin>
这表明Capacity服务定制发布完成。
通过访问http://localhost:8080/axis/services/Capacity?wsdl可以看到这个服务的WSDL描述文件,这说明Capacity服务被成功发布了。如下图所示: