分享
 
 
 

结合Axis和Ant开发Web服务

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

本文结合一个简单示例讲解了怎样把Axis和Ant结合起来进行Web服务的开发。帮助读者从简单的java源代码或者从一个服务描述文件(wsdl)开始,用Ant工具进行构建,设置,并把服务部署到Axis。

首先假定您熟悉 AXIS 处理系统和Ant工具。文中示例所需要的软件如下:

l Apache Axis 1.1

l Apache Ant 1.5.3

l Jarkat Tomcat 4.1.24

在开始前,假定上述软件已经安装和配置好了。

Axis和Ant简介

Axis 框架是来自 Apache Group 的、基于 java 的、最新的 SOAP 规范(SOAP 1.2)和 SOAP with Attachments 规范(来自 Apache Group )的开放源代码实现。其本质上是一个SOAP引擎--一个构建诸如客户端、服务器、网关等SOAP处理器的框架。是Apache SOAP的后继项目。但是,Axis使用SAX(基于事件)解析器获得了比Apache SOAP早期版本(使用DOM解析)非常明显的速度优势。另外,它还具有很强的灵活性和稳定性,支持Web服务描述语言1.1版。

Apache Ant是Apache软件基金会jakarta项目中的一个子项目,是一个基于Java的构建工具,类似于make,但它没有make那么复杂繁琐。Ant由一些内置任务(task)和可选择的任务组成,还可以配置第三方提供的任务。它的构建配置文件基于XML的,所以容易书写和维护,而且结构清晰。Ant还可以集成到一些开发环境中(例如visual age,jbuilder,Elipse)。

Axis对Ant的支持

Axis为支持Ant构建,提供了一个axis-ant.jar文件。该文件包含三个可选任务(task)的定义和实现:axis-wsdl2java,axis-java2wsdl和axis-admin。任务axis-wsdl2java与Axis提供的工具WSDL2Java具有同样的功能,根据web服务描述文件生成对应的Java源程序,它的属性设置与WSDL2Java的命令参数设置类似。而任务axis-java2wsdl则相反,它与Java2WSDL工具一样,是根据已有的类文件来生成Web服务描述文件。最后一个任务axis-admin是用于web服务的部署和取消部署的,对应于Axis的AminClient工具。

为了使Ant能够正确使用上述三个任务(task),还需要做一些配置。注意:Apache Ant的版本必须是1.5.1或更高版本。

1.设置系统的环境变量CLASSPATH包含Axis提供的axis-ant.jar文件,或者在Ant的配置文件(通常是build.xml)中设置路径包含它。例如,

<path id="axis.classpath">

<fileset dir="${axis.home}/lib">

<include name="**/*.jar" />

</fileset>

</path>

2.然后使用<taskdef>声明导入axis-ant.jar文件中的属性文件所定义的任务(task)列表。

<taskdef resource="axis-tasks.properties"

classpathref="axis.classpath" />

3.设置在构建过程中可能要需要的java包,例如, Axis所有的jar包,wsdl4j.jar,junit.jar等等。

实例开发

下面就用一个实例来讲解怎样把Ant和Axis结合来开发Web服务。为了注重本文的目的,我们开发一个比较简单的Web服务,它接受客户端传入的字符串数组,如果传入的参数为null,则抛出一个自定义的异常,否则把每个字符串连接起来返回给客户端。

首先定义一个Web服务接口Hello,如下所示:

package com.bidlink.hello;

public interface Hello{

public String echo(String[] content ) throws

java.rmi.RemoteException,com.bidlink.hello.MyException;

}

自定义异常MyException包含一个时间值,以记录异常出现的时间,如下:

package com.bidlink.hello;

public class MyException extends org.apache.axis.AxisFault implements java.io.Serializable{

private java.util.Calendar occurTime;

public MyException() {

}

public MyException(

java.util.Calendar occurTime) {

super();

this.occurTime = occurTime;

}

public java.util.Calendar getOccurTime() {

return occurTime;

}

public void setOccurTime(java.util.Calendar occurTime) {

this.occurTime = occurTime;

}

}

1.axis-java2wsdl:从类文件生成服务描述文件

编译上面定义的两个文件Hell.java和MyException.java。接着编写Ant的配置文件build.xml(文件详细信息请查看示例源代码),使用axis-java2wsdl任务根据类Hello来生成Web服务描述文件hello.wsdl。任务具体配置如下:

<axis-java2wsdl classname="com.bidlink.hello.Hello"

location="http://localhost:8080/axis/services/Hello"

namespace="http://hello.bidlink.com"

output="hello.wsdl"

style="RPC"

extraclasses="com.bidlink.hello.MyException">

<classpath>

<pathelement path="${dist}"/>

</classpath>

</axis-java2wsdl>

其中,<pathelement path="${dist}"/>指出Hello.class和MyException.class文件的位置。

运行命令ant java2wsdl,构建出Web服务描述文件hello.wsdl。

2.axis-wsdkl2java:从服务描述文件生成服务源程序

下面讲解怎样根据刚刚得到的hello.wsdl文件生成服务所需要的java源程序。在这里需要用到任务axis-wsdl2java。任务属性设置如下:

<axis-wsdl2java all="true"

url="hello.wsdl"

deployscope="Request"

output="${gensrc}"

serverside="true"

skeletondeploy="false"

testcase="true"

noimports="false"

typemappingversion="1.2">

</axis-wsdl2java>

运行ant wsdl2java,根据axis-wsdl2java任务的属性配置生成相应的java源程序,本例所生成的文件包括:服务端服务接口文件Hello.java及其实现HelloSoapBindingImpl.java,以及客户端的HelloService.java,HelloServiceLocator.java,HelloServiceLocator.java和客户端存根文件HelloSoapBindingStub.java。又因为属性testcase="true",所以还生成了测试文件HelloServiceTestCase.java。当然,自定义异常MyException也是重新生成的。

3.axis-admin:向Axis部署Hello服务

服务源程序生成后,需要根据服务的功能修改HelloSoapBindingImpl.java文件,以真正实现该Web服务。修改如下:

/**

* HelloSoapBindingImpl.java

*

* This file was auto-generated from WSDL

* by the Apache Axis WSDL2Java emitter.

*/

package com.bidlink.hello;

public class HelloSoapBindingImpl implements com.bidlink.hello.Hello{

public java.lang.String echo(java.lang.String[] in0) throws java.rmi.RemoteException, com.bidlink.hello.MyException {

if(in0 == null)

throw new MyException(java.util.Calendar.getInstance());

String retStr = "";

for(int i=0; i< in0.length; i++)

retStr += in0[i];

return retStr;

}

}

编译所有的生成的源程序,最后使用axis-admin任务向Axis部署Hello Web服务。

<axis-admin

port="${target.port}"

hostname="${target.server}"

failonerror="true"

servletpath="${target.appname}/services/AdminService"

debug="true"

xmlfile="deploy.wsdd"/>

运行ant deploy,部署Hello服务。

测试

现在可以测试所部署的Web服务hello。可以通过浏览器,也可以利用刚才生成的测试文件HelloServiceTestCase.java来进行该项工作。如果利用测试文件HelloServiceTestCase.java,那么还需要对它进行稍作修改。具体来说,就是添加一个main函数,然后修改所生成的测试方法。

参考资料

1.阅读Apache Axis开发指导文档

2.查看Apache Ant文档手册http://ant.apache.org/manual/index.html

3.http://nagoya.apache.org/wiki/apachewiki.cgi?AxisProjectPages/AxisAntTasks得到更多关于Axis-Ant任务的信息。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有