?
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