用Axis开发Web Services

?

Axis简介
  AxisApache组织推出的SOAP引擎,Axis项目是Apache组织著名的SOAP项目的后继项目,目前最新版本是采用Java开发的1.1版本Axis v1.1软件包可以从http://ws.apache.org/axis/dist/1_1/下载得到。

??? 下面以一个具体的实例介绍AXIS开发Web Service。

目的 ?

?? 了解WebService的工作原理,实现一个Web Service。这个service提供以下服务:增加存款、减少存款和返回存款余额

平台

? ??? j2sdk1.4Tomcat5.0AXIS

步骤

1.???????? 安装J2SDK

?????? D:/j2sdk1.4

2.???????? 安装 Jakarta-Tomcat-5.0

?????? D:/Tomcat

3.???????? 安装AXIS

?????? 只需将下载的Axis软件包解压缩,将其中的“webapps”目录下的“axis”目录整个拷贝到Tomcat安装目录下的“webapps”目录下

?????? D:/Tomcat/webapps/axis

Axis的配置

?????? 需要配置的系统变量如下表所示:

?????? CATALINA_HOME
?????? D:/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中即可。D:/Tomcat/webapps/axis/WEB-INF/lib/axis.jar;D:/Tomcat/webapps/axis/WEB-INF/lib/axis-ant.jar;D:/Tomcat/webapps/axis/WEB-INF/lib/commons-discovery.jar;D:/Tomcat/webapps/axis/WEB-INF/lib/commons-logging.jar;D:/Tomcat/webapps/axis/WEB-INF/lib/jaxrpc.jar;D:/Tomcat/webapps/axis/WEB-INF/lib/log4j- 1.2.8 .jar;D:/Tomcat/webapps/axis/WEB-INF/lib/saaj.jar;D:/Tomcat/webapps/axis/WEB-INF/lib/wsdl4j.jar

4.???? 访问http://hostname:8080/axis/并测试网页上的链接是否工作正常

5.???????? 服务的发布

?


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

??? 即时发布是一项令人激动的技术,它使Web服务的开发变得如此简单;然而即时发布并不总是最好的选择,比?如有些应用系统是第三方提供的,我们没有购买源代码,只有.class文件,但我们又希望将这个应用系统的一些功能对外发布成Web服务,使其能够在更大范围内产生作用,这个时候即时发布技术就无能为力了。此外,即时发布技术并不灵活,无法进行更多的服务配置,这使得它并不能满足一些特定系统的需求。

  因此,Axis提供了另一种服务发布方式,这就是定制发布,下面以此方法为主做以详细介绍。

?

创建自己的WebService服务类

//bank.java

package webservice.bank;

/**

* @author Ray

*/

?

public class Bank{

?????? public static double balance = 100;

??????

?????? public synchronized double balance() {

????????????? ?return balance;

?????? }

??????

?????? public synchronized double deposit ( double amount){

????????????? //实现存款

????????????? balance = balance + amount;

????????????? return balance;

?????? }//deposit()

??????

?????? public synchronized double withdraw( double amount){

????????????? //实现取款

????????????? if (balance >= amount)

???????????????????? balance = balance - amount;

????????????? else

???????????????????? System.out.println("caught");

????????????? return balance;

?????? }//withdraw()

??????

??????

}

将其编译成.class文件,放置到“……/webapps/axis/WEB-INF/classes/webservice/bank”目录下

6.???????? 创建WSDD文件设置对外提供的服务信息

这个文件负责描述服务的名称、入口等信息,其内容如下:deploy.wsdd

7.???????? 部署(发布)你的WebService

“……/webapps/axis/WEB-INF/classes/webservice/bank”目录下

java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd

8.???????? 访问http://127.0.0.1:8080/axis/services/Bank?wsdl的链接,查看你的WebService是否发布成功

?

9.???????? 编写客户端代码(可以使用AXIS附带的API)

?????? 代码略详见NewTest.java

?????? 其中,org.apache.axis.client.Callorg.apache.axis.client.Service是两个比较常用的类,一般的客户端程序欲访问一个Web Service时,都要生成一个客户端的Service对象和Call对象,在访问服务之前,首先要对Call对象设置相应的参数,包括服务的位置、操作名、入口参数、返回值类型等,最后调用Call对象的invoke方法访问服务。

????????????? …………

????????????? Service service = new Service();

????????????? Call calld = ( Call ) service.createCall();

????????????? Double d1,d2;

????????????? //设置访问点

????????????? calld.setTargetEndpointAddress( "http://localhost:8080/axis/services/Bank" );

????????????? //设置操作名????????

????????????? callresult.setOperationName( "balance" );

????????????? callresult.setReturnType( XMLType.XSD_DOUBLE );

????????????? System.out.println("Welcome to Bank");

????????????? System.out.println( "您的余款: " + callresult.invoke( new Object[] {} ) + " " );

????????????? …………

?

10.???????? 运行客户端程序,查看输出结果

运行客户端程序NewJava

命令格式:deposit(d)/withdraw(w)? double or Quit(q)

Java NewJava

存钱 输入格式? 如存入100元:d 100

取钱 输入格式? 如取出20元:w 20

当余额不足时:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值