用Axis开发Web Services

类别:Java 点击:0 评论:0 推荐:

?

Axis简介
  Axis是Apache组织推出的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.4+Tomcat5.0+AXIS

步骤

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源文件,将其扩展名改为.jws(Java 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.Call和org.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

当余额不足时:

本文地址:http://com.8s8s.com/it/it16279.htm