精彩的人生
好好工作,好好生活
BlogJava
首页
新随笔
联系
聚合
管理
147 Posts :: 0 Stories :: 250 Comments :: 0 Trackbacks
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(43)
给我留言
查看公开留言
查看私人留言
随笔分类
BIRT(1)
Eclipse(13)
EMF&GEF(6)
Google Code Jam(3)
Gossip(28)
Java(45)
Job(6)
Social Network(5)
Web(1)
Web Service(41)
我爱吃(2)
随笔档案
2008年9月 (1)
2008年8月 (1)
2008年3月 (1)
2008年2月 (1)
2008年1月 (1)
2007年12月 (1)
2007年11月 (2)
2007年10月 (1)
2007年7月 (1)
2007年3月 (1)
2006年10月 (9)
2006年9月 (18)
2006年8月 (4)
2006年7月 (6)
2006年6月 (3)
2006年5月 (11)
2006年4月 (27)
2006年3月 (25)
2006年2月 (6)
2006年1月 (1)
2005年12月 (20)
2005年11月 (6)
相册
my
收藏夹
GEF/EMF/Eclipse(1)
semantic web(4)
uddi(2)
配色方案(5)
Friends
Reload_cn
uiiang
八进制
老冒的SNS专栏
Web Site
Eclipse Org
Eclipse World
网谈
关注虹的新作,关注SNS
搜索
积分与排名
积分 - 442953
排名 - 123
最新评论
1. re: 当cmd里输入路径包含空格的时候
谢谢分享
--网盘搜索-kaopu.so
2. re: 当cmd里输入路径包含空格的时候[未登录]
我的路径是中文带空格怎么办?
%cd%/bin/bin/java -jar ../../export.jar执行不了啊
--liu
3. re: Rare Order[未登录]
@Guest
Wrong at all!!!!
--123
4. re: 当cmd里输入路径包含空格的时候[未登录]
很有用哟
--temp
5. re: 插件制作过程记录(使用TreeViewer贡献视图)
代码下载不了了,
--jiaojiaf
阅读排行榜
1. 正宗泡椒凤爪做法(zz)(146670)
2. 当cmd里输入路径包含空格的时候(30526)
3. 将String转换成InputStream(28072)
4. 转:Eclipse插件FatJar安装与使用(19227)
5. 简单的将String类型的xml转换为对象的代码(13958)
6. 如何写好PPT(8818)
7. 读Axis2用户帮助文档(7832)
8. 2005.6.12 使用jsp上传文件(7560)
9. 从插件/RCP中取得文件路径的方法(6219)
10. Eclipse的BPEL(5551)
评论排行榜
1. 正宗泡椒凤爪做法(zz)(97)
2. 2005.6.12 图片处理(17)
3. 如何写好PPT(10)
4. 读Axis2用户帮助文档(9)
5. gef布局的一点感想(8)
6. 从扩展点中load class(8)
7. 从插件/RCP中取得文件路径的方法(7)
8. emf&gef之一example.my.gefpractice(7)
9. 转:Eclipse插件FatJar安装与使用(6)
10. 将String转换成InputStream(6)
转:用Axis开发基于Java的Web服务
http://www.yesky.com/SoftChannel/72342371961929728/20030821/1723269.shtml
概述
本文介绍了一个比较简单实用的基于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安装目录下的“web
apps”目录下即可。
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; %AXI
S_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar
如果你不愿做这么繁琐的类路径设置,可以直接将axis软件包中“lib”目录下的所有.
jar文件加入到系统环境变量CLASSPATH中即可。
Axis的测试
安装配置完毕后,应测试一下是否Axis可以正确运行了。
启动Tomcat服务器,在浏览器中访问http://localhost:8080/axis/happyaxis.jsp,如
果页面显示有错误,则需要回头检查一下相关配置是否正确,如果浏览页面能正确显示出系
统组件、属性等参数配置信息,则表示安装成功,如下图所示:
服务的发布
Axis提供了两种服务发布方式,一种是即时发布(Instant Deployment),一种是定制
发布(Custom Deployment)。
使用即时发布
对即时发布的支持是Axis的特色之一,使用即时发布使用户只需有提供服务的Java类的
源代码,即可将其迅速发布成Web服务。每当用户调用这类服务的时候,Axis会自动进行编
译,即使服务器重启了也不必对其做任何处理,使用非常简单快捷。
使用即时发布首先需要一个实现服务功能的Java源文件,将其扩展名改为.jws(Java W
eb 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/Distan
ce.jws?wsdl可以看到这个服务的WSDL描述文件,这说明Distance服务被成功发布了。如下
图所示:
使用定制发布
即时发布是一项令人激动的技术,它使Web服务的开发变得如此简单;然而即时发布并
不总是最好的选择,比如有些应用系统是第三方提供的,我们没有购买源代码,只有.clas
s文件,但我们又希望将这个应用系统的一些功能对外发布成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”目录下,即
可着手进行发布。
定制发布不需要构建.jws文件,但必须创建服务发布描述文件deploy.wsdd(Web Servi
ce Deployment Descriptor的缩写),这个文件负责描述服务的名称、入口等信息,其内容
如下:
文件deploy.wsdd
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="Capacity" provider="java:RPC">
<parameter name="className" value="samples.capacity.Capacity"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
将该文件也放到“……\webapps\axis\samples\capacity”目录下,然后可以采用Axi
s提供的一个客户端管理工具——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可以看到这个服务的W
SDL描述文件,这说明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!”,将该文件放到“……\webap
ps\axis”目录下,即可通过GET方法直接访问该服务,访问的地址为http://localhost:808
0/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升!
注意程序在访问即时发布的Distance服务和定制发布的Capacity服务时的不同,前者的
服务访问点地址为http://localhost:8080/axis/HelloWorld.jws,而后者的则为http://lo
calhost:8080/axis/services/Capacity。
总结
Web Services是未来网络应用的发展方向,SOAP和WSDL是Web Services的核心协议,Ax
is给出了一个很好的SOAP实现,它使得开发Web Services应用变得轻松而有趣。
posted on 2006-03-09 11:24
hopeshared
阅读(863)
评论(0)
编辑
收藏
所属分类:
Java
、
Web Service
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
相关文章:
一段关于callback的代码
当cmd里输入路径包含空格的时候
java类加载的表现形式(zz)
初探Java类加载机制的奥秘(zz)
Java类加载内幕(zz)
使用Jakarta Commons Pool处理对象池化(zz)
对象池(对象缓冲池)-高手进阶(zz)
简单的将String类型的xml转换为对象的代码
一段很好用的判断数据库中某张表是否存在的代码
转:Java Annotation 高级应用
Powered by:
BlogJava
Copyright © hopeshared