1. SOAP是一个基于XML的用于应用程序之间通信数据编码的传输协议。最初由微软和Userland Software提出,随着不断地完善和改进,SOAP很快被业界广泛应用,目前完全发布版本是1.1。在其发展过程中,W3C XML标准工作小组积极促成SOAP成为一个真正的开放标准。在写作此文档之时,SOAP1.2草案已经发布,1.2对1.1中相对混乱的部分做了改进。 SOAP被广泛作为新一代跨平台、跨语言分布计算Web Services的重要部分。 2. 什么是Axis
Axis是Apache组织推出的SOAP引擎,Axis项目是Apache组织著名的SOAP项目的后继项目,目前最新版本是采用Java开发的1.1版本,C++的版本正在开发之中。Axis v1.1软件包可以从下载得到。 但是Axis不仅仅是一个SOAP引擎,它还包括: 一个独立运行的SOAP服务器 一个servlet引擎的插件,这个servlet引擎可以是Tomcat 对WSDL的扩展支持 一个将WSDL的描述生成JAVA类的工具 一些示例代码 还有一个监控TCP/IP包的工具 二、Axis的安装
应用Axis开发Web Services,你需要安装如下软件: 1.JDK1.4.2 2.一个支持Servlet的服务器引擎,比如广为人知的Tomcat。
当安装好Tomcat之后,只需将下载的Axis软件包解压缩,将其中的“webapps”目录下的“axis”目录整个拷贝到Tomcat安装目录下的“webapps”目录下即可。
三、Axis的配置
Axis基于Java开发,可以部署于多种操作系统,使用前需要配置一系列的系统变量,在此假定你已经在本机上装好了Tomcat 4.0以上的版本,需要配置的系统变量如下表所示:
CATALINA_HOME C:/Tomcat_4_1
(此处应为Tomcat的安装位置,注意路径名中不要有空格)
AXIS_HOME %CATALINA_HOME%/webapps/axis
AXIS_LIB %AXIS_HOME%/lib
AXISCLASSPATH %AXIS_LIB%/axis.jar;%AXIS_LIB%/commons-discovery.jar; %AXIS_LIB%/commons-logging.jar;%AXIS_LIB%/jaxrpc.jar; %AXIS_LIB%/saaj.jar;%AXIS_LIB%/log4j-1.2.8.jar; %AXIS_LIB%/xml-apis.jar;%AXIS_LIB%/xercesImpl.jar
CLASSPATH 中加入: %AXIS_LIB%/axis.jar;%AXIS_LIB%/commons-discovery.jar; %AXIS_LIB%/commons-logging.jar;%AXIS_LIB%/jaxrpc.jar; %AXIS_LIB%/saaj.jar;%AXIS_LIB%/log4j-1.2.8.jar; %AXIS_LIB%/xml-apis.jar;%AXIS_LIB%/xercesImpl.jar
四、Axis的测试
安装配置完毕后,应测试一下是否Axis可以正确运行了。
启动Tomcat服务器,在浏览器中访问,如果页面显示有错误,则需要回头检查一下相关配置是否正确,如果浏览页面能正确显示出系统组件、属性等参数配置信息,则表示安装成功。现在可以开始开发你的Web Services应用了。
五、服务的发布 Axis提供了两种服务发布方式,一种是即时发布(Instant Deployment),一种是定制发布(Custom Deployment)。
1. 使用即时发布 Java Web Service(JWS)
对即时发布的支持是Axis的特色之一,使用即时发布使用户只需有提供服务的Java类的源代码,即可将其迅速发布成Web服务。每当用户调用这类服务的时候,Axis会自动进行编译,即使服务器重启了也不必对其做任何处理,使用非常简单快捷。
使用即时发布首先需要一个实现服务功能的Java源文件,将其扩展名改为.jws(Java Web Service的缩写),然后将该文件放到“……/webapps/axis”目录下即可。 在此给出一个从英里到公里的长度单位转换的服务,其源码如下:
文件Distance.jws
public class Distance { public double convertMile2Kilometre( double mile ) { return mile * 1.609; //实现英里到公里的距离转换 } }
将其放到“……/webapps/axis”目录,通过访问可以看到这个服务的WSDL描述文件,这说明Distance服务被成功发布了。描述的WDSL代码如下: <?xml version="1.0" encoding="UTF-8" ?> - <wsdl:definitions targetNamespace="" xmlns="" xmlns:apachesoap="" xmlns:impl="" xmlns:intf="" xmlns:soapenc="" xmlns:wsdl="" xmlns:wsdlsoap="" xmlns:xsd=""> - <wsdl:message name="convertMile2KilometreRequest"> <wsdl:part name="mile" type="xsd:double" /> </wsdl:message> - <wsdl:message name="convertMile2KilometreResponse"> <wsdl:part name="convertMile2KilometreReturn" type="xsd:double" /> </wsdl:message> - <wsdl:portType name="Distance"> - <wsdl:operation name="convertMile2Kilometre" parameterOrder="mile"> <wsdl:input message="impl:convertMile2KilometreRequest" name="convertMile2KilometreRequest" /> <wsdl:output message="impl:convertMile2KilometreResponse" name="convertMile2KilometreResponse" /> </wsdl:operation> </wsdl:portType> - <wsdl:binding name="DistanceSoapBinding" type="impl:Distance"> <wsdlsoap:binding style="rpc" transport="" /> - <wsdl:operation name="convertMile2Kilometre"> <wsdlsoap:operation soapAction="" /> - <wsdl:input name="convertMile2KilometreRequest"> <wsdlsoap:body encodingStyle="" namespace="" use="encoded" /> </wsdl:input> - <wsdl:output name="convertMile2KilometreResponse"> <wsdlsoap:body encodingStyle="" namespace="" use="encoded" /> </wsdl:output> </wsdl:operation> </wsdl:binding> - <wsdl:service name="DistanceService"> - <wsdl:port binding="impl:DistanceSoapBinding" name="Distance"> <wsdlsoap:address location="" /> </wsdl:port> </wsdl:service> </wsdl:definitions>
需要注意的是:JWS的web服务发布是一个很简单的Web服务发布方式,在页面中你不能使用包,而且由于代码是在运行期被编译的,所以在部署之后,你也很难找到错误所在。