使用Xfire从WSDL生成客户端(详)
来源:互联网 发布:r语言 生成矩阵 编辑:程序博客网 时间:2024/05/21 22:43
如果多家供应商为一家用户做Web项目时,往往会用到WebService来进行数据的同步,比如用户同步。若远程调用后返回的值并不是字符串(内容是xml格式),而是供应商甲程序中的实体(如User对象),那么供应商乙若要调用供应商甲提供的WebService接口,可以:
1、 将供应商甲的源代码,拷贝过来使用;
2、 将供应商甲相关的源代码的class文件打成jar包,拷贝过来使用;
看似两种方式都可以,但是,由于供应商甲开发的目录结构很混乱以致于不方便找寻所有相关的源码或打成jar包;或你认为他们的目录结构很繁冗或你没有足够的时间和对方进行交流来部署自己的环境;或双方公司之间竞争激烈,网络不安全等因素不允许相互传送代码,或由于日后WebService公布的接口越多造成更多的同样的问题……
为了解决这个问题,可以使用XFire的Wsgen从动态的WSDL中生成客户端较为方便。
请下载ANT包供环境使用 :
ANT下载地址为http://www.apache.org/dist/ant/binaries/apache-ant-1.7.1-bin.zip
一、ANT的配置
1、下载apache-ant-1.7.1-bin.zip,并解压缩到某一目录,在环境变量中添加ANT_HOME,值为安装目录;
2、把%ANT_HOME%/bin;添加到path环境变量中,在命令行下运行 ant -version,若有输出,比如“Apache Ant version …… compiled on …… ”,则说明配置成功。
二、通过WSDL生成客户端
1、 新建一个Java工程,取名为XFireWsgen,向IDE中导入相关依赖的jar包, “http://blog.csdn.net/stoneyang2005/archive/2009/02/24/3931841.aspx”的“一、1”中有说明;
2、 如图1,创建相应的文件夹和xml文件
图1
XFireWsgen: 创建xfire文件夹
XFireWsgen/xfire: 创建WsGen文件夹
XFireWsgen/xfire/WsGen:创建client文件夹、lib文件夹、build.xml文件
XFireWsgen/xfire/WsGen/client:存放的是生成的客户端代码,需在build.xml文件中进行配置
XFireWsgen/xfire/WsGen/lib:存放的是上面所述依赖的jar包,并且需在build.xml文件中进行配置
XFireWsgen/xfire/WsGen/build.xml 根据此文件,通过ANT出客户端
build.xml
其中,“${basedir}/lib/*.jar”的lib和 “${basedir}/client”的client,就是上面所说要配置的;“http://localhost:38088/xfireDemo/services/business?wsdl”就是供应商甲提供的WSDL的地址;“myclient”为客户端放置的包名。
3、 在浏览器输入wsdl(“http://localhost:38088/xfireDemo/services/business?wsdl”)保
证服务开启时,再使用ANT运行build.xml,可以从IDE中运行,刷新后client文件夹下将是生成的客户端代码,如图2所示
图2
4、 拷贝client文件夹下的所有内容到 src目录下后并新建包 stoneyang.test和
Test.java类,如图3所示
图3
Test为远程调用客户端,调用相关的接口:
Test.java
三、远程调用
运行 stoneyang.test.Test.java 后得到结果:
名称: 《小红帽》 年份: 1986年
名称: 《社会心理学》
名称: 《心理学与生活》
名称: 《小红帽》翻印版 年份: 1986年
名称: 《小红帽》影音版 年份: 1986年
四、分析相关的包和类
见下图(和图3一样),包和类的结构十分清晰:
myclient包:远程调用的配置环境和调用方法
usinessClient: 远程调用的配置信息
businessImpl: 若远程调用方法不支持此操作,抛出异常。
businessPortType:远程调用的服务接口
stoneyang.bean包: bean对象、bean集合、bean成员变量相关的自定义类型和工厂
ArrayOfBook: 自定义的bean集合
Book: Bean类,这里的成员变量以JAXBElement封装,指定其成员变量的变量名,域名以及绑定的方式类型
ObjectFactory: 生成此bean相关的对象,集合和bean的成员变量,这样,不需要我们手动为成员变量设置域名和变量名,更简单(见Test.java中的“第一注释”)
package-info: 以java标注的形式映射XML名称空间和元素的名称空间的限制
stoneyang.businessi包:生成接口调用方法的参数类型对象和返回类型对象
ArrayOfString: 生成字符串集合
GetBookByName:生成接口中getBookByName方法中参数封装后的类
GetBookByNameResponse:生成接口中getBookByName方法中返回结果封装后的类
……
ObjectFactory: 生成接口调用方法的参数对象以及返回值对象
……
stoneyang.test包: 远程调用的测试的包
Test.java: 测试的类,里面有详细的解释。
META-INF/xfire/services.xml:可部署服务应用的配置文件
有兴趣的朋友可以将此文对比“http://blog.csdn.net/stoneyang2005/archive/2009/02/24/3931841.aspx”来看,或许把超链接中的代码作为供应商甲的代码,似乎就更清晰一些了。
希望看到的朋友,哪点看不明白或者有错误之处,敬请指出,谢谢。
- 使用Xfire从WSDL生成客户端(详)
- webService---使用Xfire从WSDL生成客户端(详)
- XFire使用WSDL生成客户端代码
- 根据wsdl文件使用xfire生成webservice客户端
- XFire根据WSDL生成客户端程序
- XFire根据WSDL生成客户端程序
- xfire 由wsdl自动生成客户端代码验证出错( src-resolve.4.2 Error resolving component )
- 使用eclipse自动生成WSDL客户端代码
- wsdl使用axis2 1.4.1 生成客户端
- 从WSDL文档中生成客户端支持代码
- wsdl 生成客户端
- wsdl生成客户端代码
- java使用xfire生成JSR181版WebService客户端
- 使用myeclipse自动生成webservice xfire的客户端
- 使用apache-cxf生成wsdl的客户端文件并使用
- 使用Myeclipse插件将wsdl生成java客户端代码
- 使用axis2解析wsdl反向生成webservice客户端
- 使用CXF根据wsdl地址自动生成客户端 (java)
- .NET初学者架构设计指南(三)
- Ext.data专题二:Ext.data.Connection
- 別讓虛偽掩飾你的真實
- .NET初学者架构设计指南(四)
- Layout中如何获取当前页面?
- 使用Xfire从WSDL生成客户端(详)
- Structs 中 Action 的疑问
- 面试逻辑题:三个精灵说真话假话的判断难题
- 软件的开发效率、优秀结构和运行性能的关系和取舍
- 云计算概念
- 常见中文乱码问题解决
- 更新09年正则表达式,QQ正则表达式,电话正则表达式,IP正则表达式,
- 关于字符串
- Java栈与堆