我的需求是这样的:系统已经成型,仅仅通过基础架构的很小变化,达到将服务开放为WebService的目的。
1、不用或几乎不用修改已有代码
2、简单的xml配置
3、通用性强,各种开发环境皆可访问
4、参数与返回型都要支持DTO(POJO)
以上四点需求,看起来很简单,可想而知各种Java的WebService方案应该都能够满足。但是,在实际借助网络搜索答案的时候却发现,能搜到的帖子,基本都是相互转帖的,所有的例子几乎一样,就那么2、3篇。
虽然看了几种实现Webservice方法的比较的帖子,笔者认为与Spring整合的话,CXF比较好,而且似乎有后来居上,掀翻Axis/Axis2的趋势。但我还是分别实践了一下Axis/Axis2/CXF([size=x-small;]Celtix、XFire只看了看帖子,既然已经合并为CXF了,就没有再去实践[/size]),也亲身体验了一把。最终还是初步选定了CXF,下面谈一点体会:
1、其实Axis和Axis2都是可以与Spring很简单的整合的,网上的帖子说不能,这一点我有些质疑。
2、速度我没有比较,网上说CXF比Axis1快4-5倍
3、既然有了Axis2,而且是重新设计的,完全替代Axis,所以Axis就没有仔细琢磨,仅仅调通了一次,就不多说了
4、Axis2的略势(仅仅从开发方便性来说,性能、通用性等尚未关注)是:
4.1、配置文件方式复杂,要求在WEB-INF下建立servers目录,里面是每个WebService各一个目录,各WebService的目录里再有META-INF目录,最后在里面放services.xml。一个WebService就要一个xml配置文件不说,还要复杂的目录结构
4.2、jar包超多。Axis1都打到一个jar包里了,足足15M,Axis2为了让jar包变小,分工明晰,分解了jar包,但是也太多了,足足62个,这还不算axiom的。为他瘦身就要花一番功夫(我不喜欢把所有的jar都一股脑的扔到lib里,能少一个就少一个)
4.3、用.Net做Client访问返回的DTO中的DTO类型出现错误。比如,返回一个department(部门),此对象除id、name等String型属性外,还有List employees属性。我的服务返回的department.employees明明只有一个对象,而Client端得到的却显示List有3个内容,因为Employee有3个属性(id、name、age),分别为string、string、int
5、CXF的略势(仅仅是我认为的):
5.1、CXF要求注释语法,而修改现有代码是我不愿意看到的
5.2、作为妥协,仅仅在接口中使用最简单的注释@WebService,其他非必须的地方都不写注释。导致生成的WebService的名称、命名空间、DTO的类型都由CXF自行命名,尤其是DTO的类名,都是小写开头的,非常别扭。
5.3、从暴露出来的wsdl看,只有SOAP1.1协议,而Axis2还有SOAP1.2和普通Http
以上就是我初步实践的比较结论,综合看,CXF还是有优势的。尤其是Axis2的4.2是个致命问题,不知道是不是我没有调试好,但似乎也看到一篇帖子说Axis2在DTO(自定义类型)的传递上不如CXF。
5.1、5.2问题习惯就好了,5.3也不是大问题,用1.1反而是稳妥的,兼容性更好的。
以下就详细分析一下CXF,例子代码我就尽量不大段的贴了,搜索一下有的是。
分享到:
相关推荐
jws与spring发布WebService
cxf与spring发布WebService
这个是cxf+spring发布webservice和restservice的服务端项目
在网上找了很久的资料,接口已经跟客户对接,特编写了代码文档和附带jar包,并含其他网站的参考地址,注意jdk环境要1.6或以上版本
简单例子:axis2整合spring发布webservice,以及session的管理
linux环境下,cxf整合spring发布webservice源码
Spring+CXF 发布WebService服务
spring集成axis发布webservice源码 spring集成axis发布webservice源码 spring集成axis发布webservice源码 spring集成axis发布webservice源码
MyEclipse下的Xfire Spring Hibernate 发布WebService
Xfire Spring Hibernate 发布WebService(源码) Xfire1.2 Spring 2.0 Hibernate 3 发布WebService 一、准备工作 1、下载安装MyEclipse6.5 2、下载安装MySQL Server 5.1 3、下载MySQL驱动 mysql-connector-java...
CXF3.1+Spring4.1发布webservice服务的例子,内附说明,方便以后自己回顾这个过程。里面已经包含必须引用的jar包,不用再到处去收集。
CXF+Spring+Tomcat发布WebService
本实例工程使用Apache CXF组件快速开发WebService。基于Spring框架,使用了Maven项目,但由于时间原因,只使用了Maven Project的框架,还是使用lib文件夹存放所需的cxf库,传入传出对象支持Json格式。
NULL 博文链接:https://lichaobao.iteye.com/blog/2142754
将下载的demo(包括serviceserverdemo及serviceclientdemo,bat文件在serviceclientdemo的src下)导入eclipse即可运行使用,编译时可能需要修改jdk版本,如果导入有错,可新建web项目,按所下载demo的结构搭建即可,...
使用spring集成cxf,在两个web project里发布及调用webservice server端使用spring+springmvc+mybatis+cxf,client端使用struts2+spring+hibernate+cxf 两个工程均为myeclipse project,包含所有除myeclipse自带以外...
axis2和spring结合发布WebService源码
webservice7 spring的bean发布为webservice
java语言实现使用spring+mybatis+oracle访问数据库,使用cxf发布webservice,并使用axis调用webservice。项目使用maven管理jar包。
本例子使用XFire发布WebService+XFire调用WebService-示例