用Axis开发基于Java的Web服务_第1页
用Axis开发基于Java的Web服务_第2页
用Axis开发基于Java的Web服务_第3页
用Axis开发基于Java的Web服务_第4页
用Axis开发基于Java的Web服务_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、用Axis开发基于Java的Web服务概述本文介绍了一个比较简单实用的基于Java的SOAP引擎Apache组织推出的Axis的安装、配置和应用开发方法,希望对有兴趣做基于Java的Web Services应用开发的朋友有所帮助。Axis简介Axis是Apache组织推出的SOAP引擎,Axis项目是Apache组织著名的SOAP项目的后继项目,目前最新版本是采用Java开发的1.1版本,C+的版本正在开发之中。Axis v1.1软件包可以从/axis/dist/1_1/下载得到。Axis的安装应用Axis开发Web Services,你需要有一个支持Se

2、rvlet的服务器引擎,比如广为人知的Tomcat(Tomcat也是由Apache组织所提供的,目前的最新版本为4.1.24,下载地址为/builds/jakarta-tomcat-4.0/release/v4.1.24/)。在此之前当然你机器必须已经装好了JDK1.3以上的版本,当安装好Tomcat之后,只需将下载的Axis软件包解压缩,将其中的“webapps”目录下的“axis”目录整个拷贝到Tomcat安装目录下的“webapps”目录下即可。Axis的配置Axis基于Java开发,可以部署于多种操作系统,使用前需要配置一系列的系统变量,

3、在此假定你已经在本机上装好了Tomcat 4.0以上的版本,需要配置的系统变量如下表所示:CATALINA_HOMEC:Tomcat_4_1(此处应为Tomcat的安装位置,注意路径名中不要有空格)AXIS_HOME%CATALINA_HOME%webappsaxisAXIS_LIB%AXIS_HOME%libAXISCLASSPATH%AXIS_LIB%axis.jar;%AXIS_LIB%commons-discovery.jar; %AXIS_LIB%commons-logging.jar;%AXIS_LIB%jaxrpc.jar; %AXIS_LIB%saaj.jar;%AXIS_LI

4、B%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,如果页面显示有错误,则需要回头检查一下相关配置是否正确,如果浏览页面能正确显示出系统组件、属性等参数配置信息,则表示安装成功,如下图所示:现在可

5、以开始开发你的Web Services应用了。服务的发布Axis提供了两种服务发布方式,一种是即时发布(Instant Deployment),一种是定制发布(Custom Deployment)。 使用即时发布对即时发布的支持是Axis的特色之一,使用即时发布使用户只需有提供服务的Java类的源代码,即可将其迅速发布成Web服务。每当用户调用这类服务的时候,Axis会自动进行编译,即使服务器重启了也不必对其做任何处理,使用非常简单快捷。使用即时发布首先需要一个实现服务功能的Java源文件,将其扩展名改为.jws(Java Web Service的缩写),然后将该文件放到“webappsaxi

6、s”目录下即可。在此给出一个从英里到公里的长度单位转换的服务,其源码如下:文件Distance.jws/* author 飞鹰*/public class Distancepublic double convertMile2Kilometre( double mile )/实现英里到公里的距离转换return mile * 1.609;/convertMile2Kilometre()/* Distance */将其放到“webappsaxis”目录,通过访问http:/localhost:8080/axis/Distance.jws?wsdl可以看到这个服务的WSDL描述文件,这说明Dista

7、nce服务被成功发布了。如下图所示:使用定制发布即时发布是一项令人激动的技术,它使Web服务的开发变得如此简单;然而即时发布并不总是最好的选择,比如有些应用系统是第三方提供的,我们没有购买源代码,只有.class文件,但我们又希望将这个应用系统的一些功能对外发布成Web服务,使其能够在更大范围内产生作用,这个时候即时发布技术就无能为力了。此外,即时发布技术并不灵活,无法进行更多的服务配置,这使得它并不能满足一些特定系统的需求。因此,Axis提供了另一种服务发布方式,这就是定制发布。在此给出一个从加仑到升的容积单位转换的服务,其源码如下:文件Capacity.javapackage sample

8、s.capacity;/* author 飞鹰*/public class Capacitypublic double convertGallon2Litre( double gallon )/实现加仑到升的容积转换return gallon * 4.546;/convertGallon2Litre()/* Capacity */将其编译成.class文件,放置到“webappsaxissamplescapacity”目录下,即可着手进行发布。定制发布不需要构建.jws文件,但必须创建服务发布描述文件deploy.wsdd(Web Service Deployment Descriptor的缩

9、写),这个文件负责描述服务的名称、入口等信息,其内容如下:文件deploy.wsdd<deployment xmlns="/axis/wsdd/"xmlns:java="/axis/wsdd/providers/java"><service name="Capacity" provider="java:RPC"><parameter name="className" value=&quo

10、t;samples.capacity.Capacity"/><parameter name="allowedMethods" value="*"/></service></deployment>将该文件也放到“webappsaxissamplescapacity”目录下,然后可以采用Axis提供的一个客户端管理工具AdminClient来完成服务的定制发布。在“webappsaxissamplescapacity”目录下,运行:java -cp %AXISCLASSPATH% org.apache.ax

11、is.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方式来访问。比如以下给出的一个服务“HelloW

12、orld”,其源码如下: 文件HelloWorld.jws/* author 飞鹰*/public class HelloWorldpublic String helloWorld()/在服务器端打印输出System.out.println( "Hello World!" );/返回相应字符串return "Hello World!"/helloWorld()/* HelloWorld */这个服务给出一个名位“helloWorld”的无入口参数的操作,返回一个内容为“Hello World!的字符串”,同时在服务器端打印“Hello World!”,将

13、该文件放到“webappsaxis”目录下,即可通过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.Ca

14、ll和org.apache.axis.client.Service是两个比较常用的类,一般的客户端程序欲访问一个Web Service时,都要生成一个客户端的Service对象和Call对象,在访问服务之前,首先要对Call对象设置相应的参数,包括服务的位置、操作名、入口参数、返回值类型等,最后调用Call对象的invoke方法访问服务。以下给出了一个客户端访问Web服务的例程AXISTest.java:文件AXISTest.javapackage axisexercise;import org.apache.axis.client.Call;import org.apache.axis.cl

15、ient.Service;import org.apache.axis.encoding.XMLType;import javax.xml.rpc.ParameterMode;/* author 飞鹰*/public class AXISTestpublic static void main( String args ) throws ExceptionService service = new Service();Call call = ( Call ) service.createCall();/访问即时发布的Distance服务/设置访问点call.setTargetEndpointAd

16、dress( "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.printl

17、n( 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 */编译运行后运行可以看到以下的结果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论