jws的发布对java webservice框架产生了巨大的影响,经过大浪淘沙,目前java开发webservice的框架主要包括axis2和cxf。
axis2和cxf都是apache旗下的产品,但是其目的不同,导致webservice开发方法也不一样。两个框架都得到了开发者的支持。
比较这两个框架的Web Service开发方法与比较它们的特性同样重要。 从开发者的角度,两个框架的特性相当的不同。 Axis2的开发方式类似一个小型的应用服务器,Axis2的开发包要以WAR的形式部署到Servlet容器中,比如Tomcat,通过这些容器可以对工作中的Web Service进行很好的监控和管理。Axis2 的Web administrion模块可以让我们动态的配置Axis2.一个新的服务可以上载,激活,使之失效,修改web服务的参数。管理UI也可以管理一个或者多个处于运行状态的服务。这种界面化管理方式的一个弊端是所有在运行时修改的参数没有办法保存,因为在重启动之后,你所做的修改就会全部失效。
Axis2允许自己作为独立的应用来发布Web Service,并提供了大量的功能和一个很好的模型,这个模型可以通过它本身的架构(modular architecture)不断添加新的功能。有些开发人员认为这种方式对于他们的需求太过于繁琐。这些开发人员会更喜欢CXF。
CXF更注重开发人员的工效(ergonomics)和嵌入能力(embeddability)。大多数配置都可以API来完成,替代了比较繁琐的XML配置文件, Spring的集成性经常的被提及,CXF支持Spring2.0和CXF's API和Spring的配置文件可以非常好的对应。CXF强调代码优先的设计方式(code-first design),使用了简单的API使得从现有的应用开发服务变得方便。
不过你选择Axis2还是CXF,你都可以从开源社区得到大量的帮助。这两个框架都有商业公司提供服务,WSO2提供AXIS2的支持,Iona提供CXF的支持。这两公司都有很活跃的开发者社区。 Axis2出现的时间较早,CXF的追赶速度快。我的建议是:如果你需要多语言的支持,你应该选择AXIS2。如果你需要把你的实现侧重JAVA并希望和Spring集成,CXF就是更好的选择,特别是把你的Web Service嵌入其他的程序中。
二者进行以下对比。
| Axis2 | CXF |
---|---|---|
目标 | WebService引擎 | 简易的SOA框架,可以作为ESB |
ws* 标准支持 | 不支持WS-Policy | WS-Addressing,WS-Policy, WS-RM, WS-Security,WS-I Basic Profile |
数据绑定支持 | XMLBeans、JiBX、JaxMe 、JaxBRI、ADB | JAXB, Aegis, XMLBeans, SDO, JiBX |
spring集成 | 不支持 | 支持 |
应用集成 | 困难 | 简单 |
多语言 | 支持C/C++ | 不支持 |
部署 | web应用 | 嵌入式 |
服务监控和管理 | 支持 | 不支持 |
结论:
总得来说,如果是新生项目,选择CXF或Axis2在工作量上不会有太大的差别,对于那些使用了Spring的既有项目来说,CXF应该是首选,因为CXF是基于注解的。因此对 于那些基于jvm1.4构建陈旧系统可能并不适用。Axis2的优势是支持C平台和比较全的WS-*协议族。如果希望以一种一致的方式实现webservice,特别是有跨语言的需求时,应该使用Axis2。如果需要在现有的java程序(包括web应用)中增加webservice支持,应该使用CXF