`
akhuting
  • 浏览: 121150 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JAVA 几种开源WebServices框架介绍

    博客分类:
  • java
阅读更多

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嵌入其他的程序中。
分享到:
评论

相关推荐

    Java Tutorial: Creating Web Services

    WSDL(Web Services Description Language)是一种 XML 格式的文档,用于描述 Web 服务的接口和绑定。WSDL 包含三个主要部分: - **接口(Interface)**:定义了服务的抽象操作和消息。 - **绑定(Binding)**:指定...

    J2me连接WebServices框架 - kSOAP2源码

    在这个"J2me连接WebServices框架 - kSOAP2源码"中,我们可以学习以下几个关键知识点: 1. **J2ME 平台**:J2ME 包含一组可配置的 Java 技术,适用于有限内存和处理能力的设备。它包括 MIDP(Mobile Information ...

    jersery client调用REST框架web services服务的一个示例

    Jersey是Java世界中广泛使用的开源框架,它实现了JAX-RS(Java API for RESTful Web Services)标准,提供了创建和消费RESTful服务的功能。 在描述中提到了一个博客链接,虽然具体内容未给出,但通常这样的资源会...

    基于WebServices的J2EE和_NET架构比较

    文章由国防科技大学计算机学院的邓酩与肖立权两位作者撰写,发表于《桂林航天工业高等专科学校学报》2005年第3期,旨在深入分析这两种技术栈在WebServices开发与部署中的表现。 ### WebServices概述 WebServices是...

    Learning Web Services

    2. Apache Axis:Apache Axis是一个开源的Java库,用于生成和部署SOAP Web服务。 3. JAX-WS:Java API for XML Web Services,是Java平台上的Web服务标准,用于构建和部署SOAP Web服务。 4. .NET Framework:微软的...

    [JavaWeb服务:构建与运行].(Java.Web.Services:Up.and.Running).Martin.Kalin.文字版

    本书侧重于代码驱动的方法,介绍JAX-WS(Java API for XML-Web Services),这是Java Web服务的首选框架,无论是基于SOAP的还是REST风格的服务。作者提出对JAX-WS的广义理解,包含了如Jersey项目这样的前沿发展,这...

    Java EE Web编程(Eclipse 平台)

    本资料“Java EE Web编程(Eclipse 平台)”可能涵盖了以下几个关键知识点: 1. **Eclipse IDE的使用**:Eclipse作为开源的Java开发工具,拥有丰富的插件支持,对于Java EE开发,它可以提供诸如Java服务器视图、...

    java web services

    本书提供了全面深入的介绍关于 Java Web Services 的知识体系,并探讨了 Web 服务在 Java 平台中的应用及与其他技术的集成。本书主要面向 Java 开发者和技术架构师,帮助读者理解和掌握 Web 服务的核心技术和实践。 ...

    JAVA 调用Web Service的方法

    Apache CXF是一个流行的开源框架,用于构建和部署Web Service。它提供了JAX-WS和JAX-RS(RESTful Web Services)的支持,让开发者可以选择适合的通信方式。 6. **使用IDE集成**: 在Eclipse或IntelliJ IDEA等IDE...

    java调用webservice几种方式代码

    在Java中,有多种方式可以调用Web Service,以下将详细介绍这些方法,并结合`ClientTest.java`文件名推测这是一个实际的客户端测试代码示例。 1. **JAX-WS(Java API for XML Web Services)**: JAX-WS是Java平台...

    Flex 连接后台Java的几种方法选择

    Flex 连接后台 Java 的几种方法选择 Flex 是一种基于 Adobe Flash 平台的 Rich Internet Application(RIA)开发技术,Java 是一种流行的服务器端编程语言。连接 Flex 和 Java 后台是构建 RIA 应用程序的关键步骤。...

    axis web services 例子

    标题 "Axis Web Services 例子" 指向的是一个关于使用Apache Axis框架创建Web服务的实际应用实例。Apache Axis是开源的Java库,专门用于构建和部署Web服务,它简化了SOAP(简单对象访问协议)消息的处理。在这个例子...

    Spring集成Cxf暴露WebServices示例

    在IT行业中,Spring框架是Java领域最常用的轻量级应用框架之一,而Cxf则是一个强大的服务导向架构(SOA)工具集,主要用于构建和开发Web服务。本示例将探讨如何通过Spring集成Cxf来暴露Web服务,帮助开发者更好地...

    java WebService调用的几种方式详细源代码

    本篇文章将详细介绍Java中调用WebService的几种常见方法,并提供相应的源代码示例。 1. **SOAP(Simple Object Access Protocol)调用**: SOAP是WebService的主要通信协议,基于XML格式的数据交换。在Java中,...

    java+cxf

    CXF是一个开源框架,它允许开发者创建、部署和管理基于Java的Web服务。它提供了丰富的功能,包括SOAP、RESTful API、WS-*规范支持,以及与Spring框架的紧密集成。 在描述中提到的"java+cxf",我们可以推断这是一个...

    Java的webservice入门(视频+代码)

    在Java中,有几种常见的Web Service实现框架: 1. **JAX-WS (Java API for XML Web Services)**:这是Java SE和EE平台的标准API,用于创建SOAP Web Service。JAX-WS通过注解(如`@WebService`)和XML配置文件(如...

    java 调用天气web service的完整项目eclipse

    Java中的JAX-WS(Java API for XML Web Services)框架支持SOAP协议。 3. **JAX-WS**: JAX-WS是Java标准,用于创建和消费Web服务。它提供了从Java类到SOAP消息的绑定,以及从SOAP消息到Java类的反向绑定。在这个...

Global site tag (gtag.js) - Google Analytics