xfire wsdl2java_利用CXF的wsdl2java来建立Web Service.

刚开始接触的是Xfire,由于xfire几年没有维护了,兼容性不是很好,同时会自动在wsdl中产生一些垃圾的东西,特别是如果类中的字段用到了xfire字的泛型,则wsdl非常的庞大,并且客户端根据wsdl生成的代码也特别多.本来只要定义好了wsdl,就只需要把这个wsdl文档给用户生成客户端的,但是由于xfire的不兼容性,经常需要把xfire的web service运行后的wsdl拷贝出来给用户.

所以,今天决定放弃xfire了,改用CFX。由于cfx是Apache的一个开源项目,在兼容性方面那是不比说的了。首先定义好一个wsdl文档,定义的时候就没有必要像在xfire那种考虑元素的类型、约束等。同一个wsdl文档用xfire生成服务端,再用别的工具如wsdl.exe生成客户端,如果没有好好的约束和设计好,客户端直接调用服务端是不行的,今天发现xfire的一个特点就是对于xsd的命名空间如果会自定更改为java中类的包路径,比如wsdl文档时这样的:

则web 服务运行后的wsdl是:

.

这样就不能直接用原wsdl文件生成客户端与web服务交互了.当然,有的人会可以利用aegis.xml来映射,不过我没有用过,不知道行不行。但是在cfx下就不需要考虑这些问题了,直接定义好wsdl文档,利用别的工具生成的客户端都能正常访问web 服务。

定义好了一个wsdl文档后,就可以利用cfx的wsdl2server工具来生成类接口和接口实现类,有的程序员做web服务的时候喜欢直接写接口、类以及相关的数据类,再创建web server。其实这样有点麻烦,光写代码就要写好久,有时还要注意什么命名空间、element的名称啊,如果事先写好了wsdl的话,直接利用工具生成服务端,那岂不是省了很多代码量

966903dea4bcb507358d5dcce8b912e5.gif

,闲话少说,还是回去主题吧。

首先在Apache网站上下载cfx包,解压缩到某路径,然后设置环境变量:

CXF_HOME=e:/java/apache-cxf-2.1.3,以及在path中增加

%

CXF_HOME%/bin。然后就可以在控制台上输入:

wsdl2java -impl -server CueapInterfaceForSI.wsdl来生成接口类、实现类和其他的数据类了。-impl参数是要求生成实现类,如果没有这个参数,则仅仅生成接口和其他元素类。

然后搭建cfx环境,在MyEclipse中新建一个Web Server Project.类型选择JAX-WS.项目创建成功后,把cfx文件夹中lib目录下所有的jar文件拷贝到工程的lib目下中。然后把利用wsdl2java工具生成的java代码拷贝到工程的src目录下.然后需要修改一个地方,就是在接口的实现类中把wsdlLocation = "file:CueapInterfaceForSI.wsdl"这个东东给删除,不然等会运行是会提示找不到这个wsdl文件.在web-inf目录下新建一个beans.xml文件,内容如下:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:jaxws="http://cxf.apache.org/jaxws"

xsi:schemaLocation="

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

id="CueapInterfaceForSI"

implementor="com.sxit.services.cueapinterfaceforsi.CueapInterfaceForSIImpl"

address="/CueapInterfaceForSI" />

然后配置web.xml:

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

contextConfigLocation

/WEB-INF/beans.xml

org.springframework.web.context.ContextLoaderListener

CXFServlet

org.apache.cxf.transport.servlet.CXFServlet

1

CXFServlet

/services/*

运行tomcat,在url中输入http://127.0.0.1:8080/bnetinterface/services/CueapInterfaceForSI?wsdl.查看到的wsdl内容就跟源wsdl文档的一样了,不用像在xfire下担心不一致了,也没有xfire那么复杂和庞大。

利用.NET的wsdl工具根据源wsdl文档生成客户端,新建一个测试类,创建一个测试数据,就能直接调用服务端了。传送的数据和返回的数据都一致,再也不用担心参数值为null了。

下载次数: 134

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2009-09-18 19:38

浏览 5405

评论

2 楼

lynnlni

2010-08-06

你连cxf和cfx都没分清楚……

1 楼

C_J

2009-12-02

tks............

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值