主流webservice框架整理

1. JDK自带的webserice框架;需要jdk1.6或者以上。在jdk当中自带了wsimport和wsgen两个可以生成客户端代码的工具。如果只是webservice的客户端,就可以直接用这两个工具就可以生成客户端的调用代码,而不需要第三方的webserice框架。
wsgen
wsgen 是在JDK的bin目录下的一个exe文件(Windows版),该命 令的主要功能是用来生成合适的JAX-WS。它读取Web Service的终端类文件,同时生成所有用于发布Web Service所依赖的源代码文件和经过编译过的二进制类文件。这里要特别说明的是,通常在Web Service Bean中用到的异常类会另外生成一个描述Bean,如果Web Service Bean中的方法有申明抛出异常,这一步是必需的,否则服务器无法绑定该对像。此外,wsgen 还能辅助生成WSDL和相关的xsd文件。wsgen 从资源文件生成一个完整的操作列表并验证web service是否合法,可以完整发布。
命令参数说明:
• -cp 定义classpath
• -r 生成 bean的wsdl文件的存放目录
• -s 生成发布Web Service的源代码文件的存放目录(如果方法有抛出异常,则会生成该异常的描述类源文件)
• -d 生成发布Web Service的编译过的二进制类文件的存放目录(该异常的描述类的class文件)


命令范例: wsgen-cp ./bin -r ./wsdl -s ./src -d ./bin -wsdl org.jsoso.jws.server.Example

wsimport
wsimport也是在JDK的bin目录下的一个exe文件(Windows版),主要功能是根据服务端发布的wsdl文件生成客户端存根及框架,负责 与Web Service 服务器通信,并在将其封装成实例,客户端可以直接使用,就像使用本地实例一样。对Java而言,wsimport帮助程序员生存调用web service所需要的客户端类文件.java和.class。要提醒指出的是,wsimport可以用于非Java的服务器端,如:服务器端也许是C# 编写的web service,通过wsimport则生成Java的客户端实现。
命令参数说明:
• -d 生成客户端执行类的class文件的存放目录
• -s 生成客户端执行类的源文件的存放目录
• -p 定义生成类的包名

CXF
最新版本:2.2.2

开源服务框架,可以通过API,如JAX-WS,构建和开发服务。服务可以使多种协议的,例如SOAP, XML/HTTP, RESTful HTTP,  CORBA,并可以工作与多种传输协议之上,如HTTP,JMS,JBI。

主要特性
l  支持Webservice标准:包括SOAP, the Basic Profile, WSDL, WS-Addressing, WS-Policy, WS-ReliableMessaging, 和 WS-Security。

l  前端(Frontend):支持多种前端编程模型。CXF实现了JAX-WS API。它包含一个简单的前端,可以创建客户端和端点而不需要注释。既支持协议优先的WSDL开发,也支持代码优先的Java开发。

l  易用性:可以通过简单的API快速构建代码优先的服务,简化模具集成的Maven插件,支持JAX-WS API,支持Spring 2.0 XML来配置一个子网访问协议。

l  支持二进制和遗留协议:提供了一个插件式的体系结构,支持XML和非XML类型的绑定,如JSON 和 CORBA。

目标
l  整体

高性能
可扩展
直观易用
l  支持的标准

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
l  多种传输,绑定,数据绑定和格式

绑定: SOAP, REST/HTTP
数据绑定: JAXB 2.0, Aegis, XMLBeans. (将在下一版本中支持Castor 和 JiBX)
格式: XML, JSON
传输: HTTP, Servlet, JMS, and Jabber transports
可扩展 API 允许附加的绑定,支持附加的消息格式,如CSV。
l  灵活的部署

轻量级容器: 在 Tomcat 或 基于Spring的容器中部署服务
JBI 集成: 作为服务引擎部署在JBI容器中,如 ServiceMix, OpenESB 或 Petals
SCA 集成: 在SCA容器中部署,例如Tuscany
J2EE 集成: 在J2EE应用程序中部署服务,如 Geronimo, JOnAS, JBoss, WebLogic, 和 WebSphere
独立式 Java client/server
l  支持多种编程语言

完全支持 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
l  代码生成

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引擎,它还包括:

1)个独立运行的SOAP服务器

2)一个servlet引擎的插件,这个servlet引擎可以是Tomcat

3)对WSDL的扩展支持

4)一个将WSDL的描述生成JAVA类的工具

5)一些示例代码

6)还有一个监控TCP/IP包的工具

主要特性
l  速度: Axis 使用 SAX (event-based) 语法分析,与早期版本的 Apache SOAP 相比,速度有显著提高。

l  灵活性:Axis体系结构使开发者可以自由的向引擎中插入扩展。

l  稳定性:Axis 定义了一组公共的接口。

l  面向组件的部署:可以简单地定义可复用的处理机网络,来实现应用程序的通用处理方式或分发给合作者。

l  传输框架:有一个简洁的设计传输的抽象,引擎的核心完全独立于传输。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.

l  支持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 Patterns (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嵌入其他的程序中。

你可能感兴趣的:(webservice)