CXF
最新版本: 2.2.2
开源服务框架,可以通过API ,如JAX-WS , 构建和开发服务。服务可以使多种协议的,例如SOAP, XML/HTTP, RESTful HTTP, CORBA ,并可以工作与多种传输协议之上,如HTTP ,JMS ,JBI 。
主要特性
• 支持 Webservice 标准:包括 SOAP, the Basic Profile, WSDL, WS-Addressing, WS-Policy, WS-ReliableMessaging, 和 WS-Security 。
• 前端( Frontend ):支持多种前端编程模型。CXF 实现了JAX-WS API 。它包含一个简单的前端,可以创建客户端和端点而不需要注释。既支持协议优先的WSDL 开发,也支持代码优先的Java 开发。
• 易用性:可以通过简单的API 快速构建代码优先的服务,简化模具集成的Maven 插件,支持JAX-WS API, 支持Spring 2.0 XML 来配置一个子网访问协议。
• 支持二进制和遗留协议:提供了一个插件式的体系结构,支持XML 和非XML 类型的绑定,如JSON 和 CORBA 。
目标
• 整体
• 高性能
• 可扩展
• 直观易用
支持的标准
• JAX-WS, JAX-WSA, JSR-181, and SAAJ
• SOAP 1.1, 1.2, WS-I BasicProfile, WS-Security, WS-Addressing, WS-RM 和 WS-Policy
• WSDL 1.1 和 2.0
• MTOM
• 多种传输,绑定,数据绑定和格式
• 绑定: SOAP, REST/HTTP
• 数据绑定: JAXB 2.0, Aegis, XMLBeans. ( 将在下一版本中支持Castor 和 JiBX)
• 格式: XML, JSON
• 传输: HTTP, Servlet, JMS, and Jabber transports
• 可扩展 API 允许附加的绑定,支持附加的消息格式,如CSV 。
• 灵活的部署
• 轻量级容器: 在 Tomcat 或 基于Spring 的容器中部署服务
• JBI 集成: 作为服务引擎部署在JBI 容器中,如 ServiceMix, OpenESB 或 Petals
• SCA 集成: 在SCA 容器中部署,例如Tuscany
• J2EE 集成: 在J2EE 应用程序中部署服务,如 Geronimo, JOnAS, JBoss, WebLogic, 和 WebSphere
• 独立式 Java client/server
• 支持多种编程语言
• 完全支持 JAX-WS 2.0 client/server 编程模型
• JAX-WS 2.0 同步, 异步 和 one-way API's
• JAX-WS 2.0 动态请求接口 (DII) API
• 支持打包和未打包的形式
• XML 消息 API
• 支持 JavaScript and ECMAScript 4 XML (E4X) - both client and server
• Support for CORBA with Yoko
• Support for SCA withTuscany
• Support for JBI with ServiceMix
• 代码生成
• Java to WSDL
• WSDL to Java
• XSD to WSDL
• WSDL to XML
• WSDL to SOAP
• WSDL to service
Axis
最新版本: 1.4
Axis 是 Apache 组织推出的 SOAP 引擎, Axis 项目是 Apache 组织著名的 SOAP 项目的后继项目, 但是 Axis 不仅仅是一个 SOAP 引擎,它还包括:
• 一个独立运行的 SOAP 服务器
• 一个 servlet 引擎的插件,这个 servlet 引擎可以是 Tomcat
• 对 WSDL 的扩展支持
• 一个将 WSDL 的描述生成 JAVA 类的工具
• 一些示例代码
• 还有一个监控 TCP/IP 包的工具
主要特性
• 速度: Axis 使用 SAX (event-based) 语法分析,与早期版本的 Apache SOAP 相比,速度有显著提高。
• 灵活性:Axis 体系结构使开发者可以自由的向引擎中插入扩展。
• 稳定性: Axis 定义了一组公共的接口。
• 面向组件的部署:可以简单地定义可复用的处理机网络,来实现应用程序的通用处理方式 或分发给合作者。
• 传输框架:有一个简洁的设计传输的抽象,引擎的核心完全独立于传输。 We have a clean and simple abstraction for designing transports (i.e., senders and listeners for SOAP over various protocols such as SMTP, FTP, message-oriented middleware, etc), and the core of the engine is completely transport-independent.
• 支持WSDL : Axis 支持WSDL1.1 ,可以简单的构建访问远程服务的桩(stub ), 还可以自动将部署的服务从Axis 导出为机器可识别的描述。
Axis2
最新版本: 1.5
体系结构
Axis2 具有模块化体系结构,由核心模块和非核心模块组成。据说,Axis2 核心是纯 SOAP 处理引擎,并没有包含 Java™ API for XML-based RPC (JAX-RPC) 概念作为其核心的一部分。同时,Axis2 体系结构的设计充分考虑了以下原则:
• 逻辑和状态分离,以提供无状态处理机制,因为 Web 服务是无状态的。
• 所有信息位于一个信息模型中,允许对系统进行挂起和恢复。
• 能够在不更改核心体系结构的情况下扩展功能,能以最小或没有核心更改的情况下直接支持新 Web 服务规范。
Axis2 核心体系结构包括以下核心和非核心组件:
• 核心组件 ◦ XML 对象模型 (AXIOM)
• SOAP 处理模型:处理程序框架
• 信息处理模型:上下文和描述
• 其他组件 ◦ 部署模型
• 传输
• 客户机 API
• 核心生成模型
主要特性
· 速度 - Axis 使用 SAX (event-based) 语法分析,与早期版本的 Apache SOAP 相比,速度有显著提高。
· 内存占用低 - Axis2 was designed ground-up keeping low memory foot print in mind.
· AXIOM - Axis2 comes with its own light-weight object model, AXIOM, for message processing which is extensible, highly performant and is developer convenient.
· 热部署 - Axis2 is equipped with the capability of deploying Web services and handlers while the system is up and running. In other words, new services can be added to the system without having to shut down the server. Simply drop the required Web service archive into the services directory in the repository, and the deployment model will automatically deploy the service and make it available for use.
· 异步web 服务 - Axis2 now supports asynchronous Web services and asynchronous Web services invocation using non-blocking clients and transports.
· 支持MEP - Axis2 now comes handy with the flexibility to support Message Exchange Patt
erns (MEPs) with in-built support for basic MEPs defined in WSDL 2.0.
· 灵活性 - Axis 体系结构使开发者可以自由的向引擎中插入扩展。
· 稳定性 - Axis 定义了一组公共的接口。
· 面向组件的部署 - 可以简单地定义可复用的处理机网络,来实现应用程序的通用处理方式 或分发给合作者。
· 传输框架 - 有一个简洁的设计传输的抽象,引擎的核心完全独立于传输。 We have a clean and simple abstraction for designing transports (i.e., senders and listeners for SOAP over various protocols such as SMTP, FTP, message-oriented middleware, etc), and the core of the engine is completely transport-independent.
· 支持WSDL - Axis 支持WSDL1.1 ,可以简单的构建访问远程服务的桩(stub ), 还可以自动将部署的服务从Axis 导出为机器可识别的描述。
· 插件 - Several Web services specifications have been incorporated including WSS4J for security (Apache Rampart), Sandesha for reliable messaging, Kandula which is an encapsulation of WS-Coordination, WS-AtomicTransaction and WS-BusinessActivity.
· 组成和可扩展性 - Modules and phases improve support for composability and extensibility. Modules support composability and can also support new WS-* specifications in a simple and clean manner. They are however not hot deployable as they change the overall behavior of the system.
Xfire
XFire 是 codeHaus 组织提供的一个开源框架,它构建了 POJO 和 SOA 之间的桥梁,主要特性就是支持将 POJO 通过非常简单的方式发布成 Web 服务,这种处理方式不仅充分发挥了 POJO 的作用,简化了 Java 应用转化为 Web 服务的步骤和过程,也直接降低了 SOA 的实现难度,为企业转向 SOA 架构提供了一种简单可行的方式。
主要特性
XFire 目前最新的版本是 1.2.6 ,目前支持的特性主要包括:
• 支持将 Web 服务绑定到 POJO 、XMLBeans 、JAXB1.1 、JAXB2.0 和 Castor ;
• 支持基于 HTTP 、JMS 、XMPP 等多种协议访问 Web 服务;
• 支持多种 Web 服务业界重要标准如 SOAP 、WSDL 、Web 服务寻址(WS-Addressing )、Web 服务安全(WS-Security )等;
• 支持 JSR181 ,可以通过 JDK5 配置 Web 服务;
• 高性能的 SOAP 实现;
• 服务器端、客户端代码辅助生成;
• 对 Spring 、Pico 、Plexus 等项目的支持等。
比较
Axis1.X VS Axis2
Axis2 不仅是 Apache 的新 Web 服务框架。它还体现了从 Axis 1.x 系列获得的经验和最近两年在 Web 服务领域的发展。推出 Axis2 的主要原因之一是从速度和内存方面获得更好的性能—— 不过还添加了一些新特性和功能。大部分新特性都是为了提高 Axis2 的易用性,并同时保留通过各种方式扩展功能的空间。大部分新功能所添加到的主要领域如下所示:
新 XML 对象模型 (AXIOM)
与 Axis 1.x 相比,Axis2 构建于全新的体系结构之上。引入 Axis2 的主要原因之一是获得合适的 XML 处理模型。Axis 1.x 使用 DOM 作为其 XML 表示机制,但使用 DOM 的缺点是,需要在内存中保存完整的对象层次结构(与传入消息对应)。对于小消息,这将不是问题,但对于大型消息就是问题了。为了克服此问题,Axis2 引入了新的 XML 表示形式作为其基础。
基于消息传递的核心
Axis2 核心是纯 SOAP 处理引擎,并不了解数据绑定、传输、WSDl 等内容。Axis2 核心的主要功能是处理传输消息,并将其交付给目标应用程序。与 Axis 1.x 一样,Axis2 也具有用于扩展其主要功能的处理程序概念。
Axis 1.x 并没有异步 Web 服务调用的概念,它完全绑定到请求- 响应调用,但在 Axis2 中却是另一番景象。Axis2 体系结构能够支持在客户端和服务器端同时支持异步调用。同时,Axis2 也支持请求- 响应样式的调用,但这会以两个异步调用的方式进行。在 Axis2 中,进入系统的消息可能有也可能没有响应,应该注意,Aixs2 支持 WSDL 2.0 中定义的所有八种消息交换模式(Message Exchange Patterns ,MEP )。
Axis2 具有流的概念,流是阶段的集合,而阶段是处理程序的集合。根据给定方法调用的 MEP ,与其关联的流的数量可能会有所变化。
部署模型
在 Axis 1.x 中,用户必须手动调用管理客户机,并更新服务器类路径,然后重新启动服务器,以应用更改。这个有点麻烦的部署模型对新手肯定是一道障碍。Axis2 经过了精心的设计,能够克服此缺点,并提供灵活、用户友好、可方便进行配置的部署模型。Axis2 部署引入了类似于 Java™ 2 Platform Enterprise Edition (J2EE) 部署机制的概念,开发人员可以在其中将所有类文件、库文件、资源文件和配置文件一起打包为存档文件,并将其放置在文件系统中的指定位置。
模块体系结构
在 Axis 1.x 中,要添加处理程序,需要首先更改全局配置文件,然后需要重新启动系统,并没有在运行时更改处理程序链的动态方法。为了克服这个问题和增加新特性,Axis2 引入了 Web 服务扩展或模块的概念;其中模块的主要工作是对核心功能进行扩展。在 Axis 1.x 中,可以通过向处理程序链添加处理程序来实现此目标。与 Axis 1.x 处理程序链相比,使用模块的优势在于,您可以在根本不改变全局配置文件的情况下添加新模块。同时,模块是一个自容器,其中可以包含处理程序、第三方库、模块相关资源和模块配置文件。
XFire VS Axis
XFire 是与Axis2 并列的新一代WebService 平台。之所以并称为新一代,因为它:
1. 支持一系列Web Service 的新标准--JSR181 、WSDL2.0 、JAXB2 、WS-Security 等;
2. 使用Stax 解释XML, 性能有了质的提高。XFire 采用Woodstox 作Stax 实现;
3. 容易上手,可以方便快速地从pojo 发布服务;
4. Spring 的结合;
5. 灵活的Binding 机制,包括默认的Aegis,xmlbeans,jaxb2,castor 。
XFire 与Axis1 性能的比较
XFire 比Axis1.3 快2-6 倍
XFire 的响应时间是Axis1.3 的1/2 到1/5
XFire 与Axis2 的比较
虽然XFire 与Axis2 都是新一代的WebService 平台,但是Axis2 的1.0 版本还不是一个稳定的版本。在XFire 捐献给apache 后有人认为Axis2 将会灭亡。在很多人眼里,Axis2 并不是pojo 形式,Dan Diephouse 证明了XFire 比Axis 更有市场。用XFire 进行WebService 的开发比Axis2 简单很多。
AXIS VS CXF
在SOA 领域,我们认为Web Service 是SOA 体系的构建单元(building block )。对于服务开发人员来说,AXIS 和CXF 一定都不会陌生。这两个产品都是Apache 孵化器下面的Web Service 开源开发工具。 Axis2 的最新版本是1.3.CXF 现在已经到了2.0 版本。
这两个框架 都是从已有的开源项目发展起来的。Axis2 是从Axis1.x 系列发展而来。CXF 则是XFire 和Celtix 项目的结合产品。Axis2 是从底层全部重新实现,使用了新的扩展性更好模块架构。 CXF 也重新的深化了XFire 和Celtix 这两个开发工具。
新产品的退出导致了几个问题。是不是现有的使用Axis 1.x ,XFire 和Celix 的应用需要迁移的新的版本上。如果一个开发人员确定要迁移它的应用到新的框架上,那么他应该选择哪一个呢?相反的,如果一个开发者决定从头开发一个新的Web Service ,他应该使用哪个呢? 这两个框架哪一个更好一些呢?
对于系统迁移来说,也许迁移到新的框架并不难。Axis 和CXF 都提供了迁移的指导。能够给开发者一些迁移的技巧和经验。但是对于这样迁移,这两个开源项目都没有提供迁移的工具。对于这样的迁移工作,尽管很值得去寻找所有的可行方案。Axis2 和CXF 都有各自不同的WebService 开发方法,每个方法都有相当数量拥护者。
通过一个比较矩阵来比较Axis2 和CXF 变得有现实的意义。这两个项目都开发不够成熟,但是最主要的区别在以下几个方面:
1.CXF 支持 WS-Addressing ,WS-Policy , WS-RM , WS-Security 和WS-I Basic Profile 。Axis2 不支持WS-Policy ,但是承诺在下面的版本支持。
2. CXF 可以很好支持Spring 。Axis2 不能
3. AXIS2 支持更广泛的数据并对,如XMLBeans ,JiBX ,JaxMe 和JaxBRI 和它自定义的数据绑定ADB 。注意JaxME 和JaxBRI 都还是试验性的。CXF 只支持JAXB 和Aegis , 并且默认是 JAXB 2.0 。
4. Axis2 支持多语言- 除了Java, 他还支持C/C++ 版本。
比较这两个框架的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 嵌入其他的程序中。