用Axis开拓基于Java的Web处事
副标题#e#
概述
本文先容了一个较量简朴实用的基于Java的SOAP引擎——Apache组织推出的 Axis——的安装、设置和应用开拓要领,但愿对有乐趣做基于Java的Web Services应用开拓的伴侣有所辅佐。
Axis简介
Axis是Apache组织推出的SOAP引擎,Axis项目是Apache组织著名的SOAP项目 的后继项目,今朝最新版本是回收Java开拓的1.1版本,C++的版本正在开拓之中 。Axis v1.1软件包可以从http://ws.apache.org/axis/dist/1_1/下载获得。
Axis的安装
应用Axis开拓Web Services,你需要有一个支持Servlet的处事器引擎,好比 广为人知的Tomcat(Tomcat也是由Apache组织所提供的,今朝的最新版本为 4.1.24,下载地点为http://jakarta.apache.org/builds/jakarta-tomcat- 4.0/release/v4.1.24/)。在此之前虽然你呆板必需已经装好了JDK1.3以上的版 本,当安装好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
假如你不肯做这么繁琐的类路径配置,可以直接将axis软件包中“lib”目次 下的所有.jar文件插手到系统情况变量CLASSPATH中即可。
Axis的测试
安装设置完毕后,应测试一下是否Axis可以正确运行了。
启动Tomcat处事器,在欣赏器中会见 http://localhost:8080/axis/happyaxis.jsp,假如页面显示有错误,则需要回 头查抄一下相关设置是否正确,假如欣赏页面能正确显示出系统组件、属性等参 数设置信息,则暗示安装乐成,如下图所示:
此刻可以开始开拓你的Web Services应用了。
#p#副标题#e#
处事的宣布
Axis提供了两种处事宣布方法,一种是即时宣布(Instant Deployment), 一种是定制宣布(Custom Deployment)。
利用即时宣布
对即时宣布的支持是Axis的特色之一,利用即时宣布利用户只需有提供处事 的Java类的源代码,即可将其迅速宣布成Web处事。每当用户挪用这类处事的时 候,Axis会自动举办编译,纵然处事器重启了也不必对其做任那里理惩罚,利用很是 简朴快捷。
利用即时宣布首先需要一个实现处事成果的Java源文件,将其扩展名改 为.jws(Java Web Service的缩写),然后将该文件放到“……\webapps\axis” 目次下即可。
在此给出一个从英里到公里的长度单元转换的处事,其源码如下:
文件Distance.jws
/**
* @author 飞鹰
*/
public class Distance
{
public double convertMile2Kilometre( double mile )
{
//实现 英里到公里的间隔转换
return mile * 1.609;
}//convertMile2Kilometre()
}/* Distance */
将其放到“……\webapps\axis”目次,通过会见 http://localhost:8080/axis/Distance.jws?wsdl可以看到这个处事的WSDL描写 文件,这说明Distance处事被乐成宣布了。如下图所示:
利用定制宣布
即时宣布是一项令人感动的技能,它使Web处事 的开拓变得如此简朴;然而即时宣布并不老是最好的选择,好比有些应用系统是 第三方提供的,我们没有购置源代码,只有.class文件,但我们又但愿将这个应 用系统的一些成果对外宣布成Web处事,使其可以或许在更大范畴内发生浸染,这个 时候即时宣布技能就无能为力了。另外,即时宣布技能并不机动,无法举办更多 的处事设置,这使得它并不能满意一些特定系统的需求。
因此,Axis提 供了另一种处事宣布方法,这就是定制宣布。
在此给出一个从加仑到升 的容积单元转换的处事,其源码如下:
文件 Capacity.java
package samples.capacity;
/**
* @author 飞鹰
*/
public class Capacity
{
public double convertGallon2Litre( double gallon )
{
//实现加仑到升的容积转换
return gallon * 4.546;
}//convertGallon2Litre()
}/* Capacity */
将其编译成.class文件,安排到 “……\webapps\axis\samples\capacity”目次下,即可着 手举办宣布。
#p#分页标题#e#
定制宣布不需要构建.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"& gt;
<service name="Capacity" provider="java:RPC">
<parameter name="className" value="samples.capacity.Capacity"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
将该文件也放到 “……\webapps\axis\samples\capacity”目次下,然后可 以回收Axis提供的一个客户端打点东西——AdminClient来完成处事 的定制宣布。
在“……\webapps\axis\samples\capacity”目次下,运行:
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd
可以看到以下运行功效:
Processing file deploy.wsdd
<Admin>Doneprocessing</Admin>
这表白Capacity处事定制宣布完成。
通过会见http://localhost:8080/axis/services/Capacity?wsdl可以看到这 个处事的WSDL描写文件,这说明Capacity处事被乐成宣布了。如下图所示:
处事的会见
GET方法的处事会见
一般的SOAP动静都是回收POST方法实现通报,但也可以通过GET方法来会见。 好比以下给出的一个处事——“HelloWorld”,其源码如下:
文件HelloWorld.jws
/**
* @author 飞鹰
*/
public class HelloWorld
{
public String helloWorld()
{
//在处事器端打印输出
System.out.println( "Hello World!" );
//返回相应字符串
return "Hello World!";
}//helloWorld()
}/* HelloWorld */
这个处事给出一个名位“helloWorld”的无进口参数的操纵,返回一个内容 为“Hello World!的字符串”,同时在处事器端打印“Hello World!”,将该 文件放到“……\webapps\axis”目次下,即可通过GET要领直接会见该处事,会见 的地点为http://localhost:8080/axis/HelloWorld.jws?method=helloWorld, 可以看到返回的SOAP信封动静,同时处事器端给出了相应的显示信息“Hello World!”这表白HelloWorld处事被乐成会见了。如下图所示:
客户端处事会见编程
Axis提供了一套API来实现SOAP,从 http://localhost:8080/axis/docs/apiDocs/index.html可以看到Axis的API文 档。
个中,org.apache.axis.client.Call和 org.apache.axis.client.Service是两个较量常用的类,一般的客户端措施欲访 问一个Web Service时,都要生成一个客户端的Service工具和Call工具,在会见 处事之前,首先要对Call工具配置相应的参数,包罗处事的位置、操纵名、进口 参数、返回值范例等,最后挪用Call工具的invoke要了解见处事。
以下 给出了一个客户端会见Web处事的例程——AXISTest.java:
文件AXISTest.java
package axisexercise;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import javax.xml.rpc.ParameterMode;
/**
* @author 飞鹰
*/
public class AXISTest
{
public static void main( String[] args ) throws Exception
{
Service service = new Service();
Call call = ( Call ) service.createCall();
//////////会见即时宣布的Distance处事
//配置会见点
call.setTargetEndpointAddress( "http://localhost:8080/axis/Distance.jws" );
//配置 操纵名
call.setOperationName( "convertMile2Kilometre" );
//配置进口参数
call.addParameter( "op1", XMLType.XSD_DOUBLE, ParameterMode.IN );
call.setReturnType( XMLType.XSD_DOUBLE );
Double d1 = new Double( 190 );
//挪用处事
System.out.println( d1 + " 英里相当于 " +
call.invoke( new Object[] {d1} ) + " 公里!" );
//////////会见定制宣布的Capacity处事
call = ( Call ) service.createCall();
//配置会见点
call.setTargetEndpointAddress( "http://localhost:8080/axis/services/Capacity" );
//配置操纵名
call.setOperationName( "convertGallon2Litre" );
//配置进口参数
call.addParameter( "op1", XMLType.XSD_DOUBLE, ParameterMode.IN );
call.setReturnType( XMLType.XSD_DOUBLE );
d1 = new Double( 10.00 );
//挪用处事
System.out.println( d1 + " 加仑相当于 " +
call.invoke( new Object[] {d1} ) + " 升!" );
} //main()
}/* AXISTest */
编译运行后运行可以看到以下 的功效:
190.0英里相当于305.71公里!
10.0加仑相当于45.46升 !
#p#分页标题#e#
留意措施在会见即时宣布的Distance处事和定制宣布的Capacity处事 时的差异,前者的处事会见点地点为 http://localhost:8080/axis/HelloWorld.jws,尔后者的则为 http://localhost:8080/axis/services/Capacity。
总结
Web Services是将来网络应用的成长偏向,SOAP和WSDL是Web Services的焦点协议, Axis给出了一个很好的SOAP实现,它使得开拓Web Services应用变得轻松而有趣 。