Ant生成xfire webservice 客户端
1. 配置 ant 环境
能看到这里的相信这都不是问题,实在不明白的请查阅我 ant 相关文档。
本例 ant 版本:Apache Ant(TM) version 1.9.3。
2. 下载 xfire 工具包
http://xfire.codehaus.org/Download,一般来说下载最新版本就是。
本例 xfire 版本:xfire-1.2.6。
3. 建立 eclipse 项目工程
创建最普通的 Java Project 项目工程即可。
a) 创建 test 测试源码包
b) 创建 lib 三方依赖 jar 目录,并将所有依赖 jar 引入 classpath,
大多数依赖的三方 jar 在 xfire 工具包里面都有。
c) 创建 build.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <project name="XFire-WsGen" basedir="." default="jar"> <property name="src.dir" value="${basedir}/src" /> <property name="lib.dir" value="${basedir}/lib" /> <property name="output.dir" value="${basedir}/output" /> <property name="wsdl.dir" value="http://127.0.0.1/MoneyCenter/services/User?wsdl"/> <property name="package.dir" value="moneycentry.client.usermoney" /> <property name="jar.file" value="${output.dir}/moneycentry-usermoney.jar" /> <path id="mypath"> <fileset file="${lib.dir}/*.jar"> <include name="*.jar" /> </fileset> </path> <target name="clean"> <delete includeEmptyDirs="true"> <fileset dir="${src.dir}" includes="**/*" defaultexcludes="no"/> </delete> <delete dir="${output.dir}"/> </target> <target name="init" depends="clean"> <mkdir dir="${output.dir}" /> </target> <taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="mypath"></taskdef> <target name="wsgen" depends="init"> <taskdef name='WsGenTask' classname="org.codehaus.xfire.gen.WsGenTask" classpathref="mypath" /> <WsGenTask outputDirectory="${src.dir}" wsdl="${wsdl.dir}" package="${package.dir}" overwrite="true" /> </target> <target name="compile" depends="wsgen"> <copy todir="${output.dir}/classes/META-INF"> <fileset dir="${src.dir}/META-INF"/> </copy> <javac srcdir="${src.dir}" destdir="${output.dir}/classes" debug="true" failonerror="true" classpathref="mypath" /> </target> <target name="jar" depends="compile"> <jar destfile="${jar.file}" basedir="${output.dir}/classes"></jar> </target> </project>
经过整理后的 build.xml 可以做到多项目通用,只需稍作修改
i. wsdl.dir
不同的 webservice,肯定有不同的 wsdl 地址。
ii. package.dir
生成客户端默认 package 名称。
iii. jar.file
生成 jar 文件的 jar 包名称。
d) 项目目录截图
4. 利用 ant 生成客户端代码
右键 build.xml –> Run As –> Ant Build
当看到控制台显示 ant 构建成功的消息,src 下面也生成相关文件,则说明成功。
5. 测试客户端
在 test 源码包下面新建 com.xfire.lynch.MainTest 测试类,介于只是简单测试,就不
搭建 Junit 测试环境,而采用 main 函数测试,看到控制台正常打印出数据,说明调用成功。
6. 代码讲解
UserClient uc = new UserClient();
获取 User 客户端类。
UserPortType upt = uc.getUserHttpPort();
获取 User 服务器端的所有接口方法。
String test = upt.findUserById("123456","dab871c3-cad4-4d2f-846f-235c00a1bcc5");
远程调用 User 类里的 findUserById 方法。
7. 与 spring 集成
大多数应用都是要和 spring 集成,本例只需将每次运行 ant 后,output 目录下生成的
moneycentry-user.jar 和依赖的三方 jar 添加进你的 spring 环境中。在 spring 中定
义一个 bean,需要的时候注入就可以使用了。
<bean id="userClient" class="moneycentry.client.user.UserClient"></bean>
8. 后记感受
Maven:
最近和公司其他系统进行衔接,本来我是个 maven 党,还是个没经历过 ant 时代
的 maven 党。开始使用 eclipse 打包,对面系统的 wsdl 总是不断的变化,无奈之下
只好用 ant 来生成 jar,大大提升了效率。通过学习 ant 对 maven 中的一些理念也有
了新的理解,可见学习一个技术也可从同等技术对比中获益。
Webservice:
第一次使用 ws 技术,不过也不算太复杂。虽然很多大牛都说 ws 是过时的技术,
不过学习来说还是值得的。不知各位看官看到此处理解如何,介于本人文档写作水平有
限,还望多多谅解,也祝大家学习愉快。