`
ihyperwin
  • 浏览: 434544 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Web服务的几种实现方法 – JAX-WS 2、Axis2、Spring-WS及XFire/CXF2.0

 
阅读更多
在接下来的Web服务之旅中,我们将介绍一下几种Web服务的实现方法。因为到某一时刻,我们总得选择Web服务的实现方法。如何选择Web服务的实现方法需要考虑多种因素。在本小节中,我们介绍一下几种主要的Web服务实现方法及它们的特点。

JAX-WS2


在前面的章节中,我们对JAX-WS已经做过介绍。首先,我们应注意,它是一个JSR规范(JSR-224)而不是一个实现,JAX-WS是JAVA API for XML Web Services的缩写,意为XML Web服务的Java编程接口,它继承自以前的JAX-RPC(Java API for XML-based Remote Procedure Call)规范。

选择JAX-WS实现Web服务的主要优势是,Java6标准版和Java5企业版都包含了该规范的参考实现。因此,我们在使用时无需另外下载相关的类库。如果您采用JAX-WS的独立发行版本,您可以使用其2.0版本的实现。到本书截稿时为止,JAX-WS独立发行版已经升级到2.1。

JAX-WS使用JAXB作为其数据绑定模型,使用的XML解析引擎为StAX(Steaming API for XML,基于XML流的编程接口),StAX是一种基于数据流的拉式解析引擎。这种解析方法只有在客户端请求时才能得到XML数据,和DOM方法相比,它提高了执行效率。因为DOM需要解析整个XML文档,在内存中生成这个的对象树。StAX不仅对内存要求较低,而且它还可以使XML的解析过程开始较早。

JAX-WS既支持SOAP协议,也支持REST交换协议。虽然它不能自动生成生成REST风格服务的代码(和SOAP/WSDL方法相比),这是因为REST风格的Web服务的描述标准目前尚未定义。

JAX-WS服务的实现在很大程度上依赖于Java语的注解功能,并支持SMTP、JMS及HTTP等网络传输协议。而且,使用JAX-WS开发出来的Web服务具有很多特点,它可支持WS-Security(Web服务安全)、WS-Atomic Transaction(Web服务原子交易)及WS-ReliableMessaging(Web服务可靠消息传输)等功能。最后, JAX-WS还可支持有状态的Web服务。

Axis2

Axis2是Apache Web服务项目中的一个工具,Apache Web项目由一套项目组成,覆盖了从Web服务开发到使用的诸多方面,实现了相关的协议和规范。Axis2是对以前的Axis1.X版本的完全重构,它有两套不同的实现,即Axis2/Java和Axis2/C这两种实现方式。

在以前的版本中使用的基于事件的SAX XML解析器,已经被“拉式”的StAX XML解析器所替代,这样就能更好地控制文档的处理过程,其效率更高,性能更优。Axis2其实是使用AXIOM(AXIs Object Model,AXIs对象模型)来对XML进行处理,该模型是一个轻量级的对象模型,它以StAX为基础,并增加了许多新功能。

Axis2既可用来开发基于SOAP的Web服务,也可以用来开发REST风格的服务,同时,它还支持异步非阻塞式的Web服务调用,异步调用是通过回调机制实现的。Axis在设计过程中使用了模块化和可扩展的架构,SOAP消息的发送和接受是通过两个“管道”(或“流”)  – 即 流入管道和流出管道 –  实现的。每个管道在处理XML消息时,可以分为几个阶段,而每个 处理阶段又可有一些可插拔的“处理器”。因此,其整体架构具有高度可扩展性,实际上,除了Axis2自带的XML处理阶段外,用户可以选择添加自定义的XML处理阶段,并在其中加入用户自定义的处理器。这样,就可以执行新的处理过程,或者覆盖原有的处理过程。

另外,处理器可以组装在一起,形成模块。每个模块 定义了一套处理器及相应的处理阶段规则的描述,每个处理器不仅不仅表明它所在的处理阶段,而且还可通过阶段规则描述表明它在整个处理过程各种的执行顺序。在Axis2语言中,当一个模块装入系统后,该模块虽然没有激活,但它已经处于可访问(available)的状态;但该模块激活后,它就转变为待命(engaged)状态,此时,其中的处理器就可安放到某一阶段并执行。因此,我们可以非常容易地出入新的模块,来处理和Web服务相关的规范,比如Web服务安全规范(Apache Rampart模块)或者Web服务原子交易规范(Apache Kandula2模块)。

XML数据绑定并不是Axis2的核心部分,在Axis2中,数据绑定是通过扩展机制实现的,我们可以选择ABD(Axis Data Biding)、XML Bens、JAX-Me和JibX等技术来实现Axis2的数据绑定。而且,Axis2可支持多种传输协议(如HTTP、TCP、SMTP和JMS等)。

Axis2的缺省安装过程为:将一个WAR文件包部署到应用服务器即可,对Axis2推荐的Tocmcat服务器而言,我们只需要把这个WAR文件拷贝到CATALINA_HOME/webapps目录即可完成安装。当我们把这个名叫axis2的Web应用部署到应用服务器后,它就是Axis2的管理平台,您可以通过它增加和配置Web服务和模块。

请您注意,Axis2中配置的服务、模块、阶段及处理器对其它的Web应用是独立的,这也就是说,如果您有多个Web应用,每个应用都有其特定的义务逻辑,此时,您不需要把服务部署到其中的一个Web应用中,您只需要将Web服务部署到axis2这个Web应用即可。这样,每个服务消费者(客户端或另一个Web应用)都可以调用该服务。

但是,Axis2管理平台上所作的配置不能被保存,因此,重启axis2 Web应用后,您所有的配置将丢失。针对这种情况,您需要手动编辑axis2的配置文件。

另外,您可以选择安装Axis2的“标准二进制分发软件包”,它不但包括Axis2必须的Jar文件,而且还包括一下命令行工具:

(1) wsdl2java工具可以从WSDL生成Java代码,而java2wsdl工具可以根据Java代码生成WSDL描述;

(2) axis2server工具可以启动一个简单的独立运行的服务器,您可以在其中部署Web服务;

(3) axis2工具将启动一个Java应用程序,该应用将自动加载Axis2所有必须的类库。

Spring-WS

Spirng框架无疑是当今Java开发领域较受欢迎的产品之一,它对软件项目的设计方法来说不啻于是一场革命,它使用面向方面的思想,引入了“控制反转(IoC)”或者称之为“依赖注入”的概念,这样,我们就更容易搭建一个J2EE应用,同时我们的应用也会更简洁。但Spring远不只是一个简单的IoC容器,它提供了许多现成的模式和模板,同时,它和其它的框架和工具进行了很好的集成,在灵活性、模块化及软件的鲁棒性方面都有所提高。

Spring社区在Web服务领域也作出了自己的贡献,它推出了“Spring Web服务”的产品,该产品也称作“Spring-WS”。

采用Spring框架的一个优势是,它和Spring的概念和模式一脉相承,您马上就可以重用以前您解决问题的那些经验。比如,服务契约(或接口)和其实现之间的松耦合就是选择Spring的第一个好处。

主流的Web服务开发方法教导我们,应先设计服务的WSDL(从契约开始设计),而不是先从Java编码开始。Spring对这种方法更进一步,它要求设计者先从消息的XML模式(XSD)开始,然后从XSD自动产生WSDL。

在Spring-WS中,XML的处理过程是可配置的,您既可以选择使用基于DOM的处理类库(比如W3C DOM、JDOM、dom4J、XOM等),也可以使用SAX、StAX或XPath 等,而XML绑定库,您可以在JAXB、Castor、XMLBeans、JiBX和XStream之间进行选择。

Spring-WS提供了强大而灵活的消息分发器,它能处理XML消息的分发,在消息验证、数字签名、加解密等Web服务安全方面,它也非常出色。

XFire/CXF

XFire旨在提高Axis1.x的性能而设计的,Axis1.x是当时Web服务的事实标准。XFire使用了基于StAX的快速对象模型对XML进行操作。XFire简单易用,它支持JAXB、Castor和XML Beans等XML绑定库,其缺省的XML绑定库为Aegis绑定,这是一种快速XML绑定机制,对内存要求较低。

XFire和Spring、PicoContainer(另一种依赖反转的容器)有很好的集成,而且,它还有一套易用的客户端API,用于创建客户端应用及开发单元测试。XFire支持的传输协议有:HTTP、JMS和Jabber/XMPP等。

最近,XFire和另一个Web服务框架Celtix进行了合并,形成了一个新的产品CXF2.0,它应算是对XFire1.x的延续。CXF2.0这个新产品将在性能和易用性方面有进一步的提高。

CXF支持除SOAP之外的许多协议,比如REST(通过Java注解)和CORBA。它也支持诸多标准和Web服务规范。另外,它还可以嵌入到其它程序中。但是,它强调开发Web服务先从Java代码开始,而不是先从契约开始。

推荐网址:
WebService WSDL结构分析: http://blog.csdn.net/sunchaohuang/article/details/3076375       
WebService的实现方式:http://devbbs.doit.com.cn/thread-27890-1-1.html   

在java 6中实现webService: http://blog.csdn.net/carlwu/article/details/3584682
在Java EE Server中实现Web服务: http://blog.csdn.net/carlwu/article/details/3608653          
使用Apache Axis实现Web服务 : http://blog.csdn.net/carlwu/article/details/3712269
使用Spring实现Web服务  :   http://blog.csdn.net/carlwu/article/details/3762538
使用XFire实现Web服务 :   http://blog.csdn.net/carlwu/article/details/3852596
分享到:
评论

相关推荐

    axis-jax-ws-xfire.rar_jax

    标题中的"axis-jax-ws-xfire.rar_jax"提到了三个关键术语:Axis、JAX-WS和XFire,这些都是与Java Web服务(Web Service)开发密切相关的技术。让我们详细了解一下这些概念及其在Java环境中的应用。 1. **Axis**: ...

    apache-cxf-2.4.6.zip

    2. **JAX-RS支持**:CXF同样实现了JSR 311(JAX-RS 1.1),支持RESTful Web服务的开发,允许使用标准的Java注解来定义资源类和方法。 3. **WSDL第一和代码第一的开发模式**:CXF允许开发者根据WSDL文件生成Java服务...

    webservice axis2 cxf jar包及简单实例

    本文将深入探讨两种流行的Java Web服务框架——Axis2和CXF,并提供一个简单的实例来帮助理解它们的工作原理和使用方法。 首先,让我们了解一下`Axis2`。Axis2是Apache软件基金会开发的一个高性能、灵活且可扩展的...

    caoyang_web普及2

    - **CXF**:由XFire和Celtix合并而成,是一个广泛使用的Web Services框架,支持JAX-WS 2.0。 - **Metro/JAX-WS RI**:Oracle提供的JAX-WS参考实现,与Java EE环境高度集成。 - **Spring-WS**:基于Spring框架的...

    WebService Axis和XFire(CXF)的开发流程

    - **动态代理**:对于CXF,可以通过JAX-WS API动态生成客户端代理,无需WSDL文件,只需知道服务地址和服务接口,即可在运行时动态创建并调用服务。 在选择使用Axis还是CXF时,开发者应根据项目需求考虑灵活性、...

    webservice(axis,xfire,cxf)

    本压缩包文件提供了关于Web服务开发的详细指南,特别关注了三个主流的Java Web Service框架:Axis、XFire和CXF。 1. **Axis**:是由Apache软件基金会开发的开源SOAP(Simple Object Access Protocol)引擎,它是...

    java webservice AXIS,XFire , CXF

    Apache CXF是一个强大的开源Services框架,它不仅实现了JAX-WS(Java API for XML-Web Services)API,还提供了全面的支持,包括JAX-WSA、JSR-181和SAAJ等标准。CXF的一大亮点是它可以无缝地与Spring框架集成,使得...

    cxf_axis_xfire客户端调用的几种方法.docx

    本文将详细介绍使用CXF作为客户端调用Web服务的几种方法,并结合示例解释相关知识点。 1. **CXF客户端调用** CXF是一个开源的Java框架,它支持多种Web服务标准,包括JAX-WS和JAX-RS。对于客户端调用,CXF提供了一...

    Axis和CXF的比较

    - **CXF 2.0及以上版本**:提供了强大的功能集,包括对最新Web服务规范的支持,如WS-Addressing、WS-Policy、WS-RM、WS-Security等。 #### 四、Axis与CXF的主要区别 1. **对Web服务标准的支持**: - **Axis2**:...

    WebService详细解析(axis,xfire,cxf,授权认证加密解密)

    CXF是Apache基金会的一个项目,它整合了XFire和Axis2的优势,提供了一站式的解决方案,支持SOAP、REST、WS-*标准等。 4. CXF特性 - 强大的工具集,包括WSDL-to-Java和Java-to-WSDL工具。 - 对WS-Security、WS-...

    WebServices开发-Axis实例CXF实例

    Axis支持JAX-RPC(Java API for XML-based RPC)规范,但随着JAX-WS(Java API for XML Web Services)的出现,Axis2应运而生,它提供了更现代的WebServices实现。 **CXF**,全称为CXF XFire eXtended,是另一个...

    apache-cxf-2.4.10

    1. **丰富的API支持**:CXF提供了JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services)的实现,使得开发者可以选择使用SOAP或者RESTful风格来构建服务。 2. **多种绑定机制**:...

    想对比xfire,cxf和axis2,并看看他们各自的主要内容么,请下载

    XFire、CXF和Axis2都是Java世界中知名的Web服务框架,每一种都有其独特的特性和优势。让我们深入探讨一下这三种框架的核心内容及其区别。 1. **XFire**: XFire(后来被集成到Apache CXF中)是一款轻量级的Web服务...

    Developing Web Services with Apache CXF and Axis2(3rd Edition).zip

    CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First...

    webService(基于cxf)的完整例子

    CXF提供了一种从代码直接生成Web服务的方式,支持JAX-WS和JAX-RS标准,使得开发人员可以轻松地创建符合WSDL(Web服务描述语言)规范的服务。 2. **JAX-WS和JAX-RS**:JAX-WS是用于构建SOAP Web服务的标准,而JAX-RS...

    Java之Web服务开发方法论图解..pdf

    本文将详细介绍使用Axis2和CXF开发Web服务的方法论图解。Web服务是基于SOAP(Simple Object Access Protocol)的应用程序之间的交互方式,是一种基于XML的远程过程调用(RPC)机制。 Axis2 Axis2是Apache软件组织...

    Java实训教程 Java软件开发实战 Java开发框架介绍 webservices-cxf 共30页.pptx

    - **第三方框架**:如Apache CXF、Apache Axis、XFire等专门针对Web Service的开源框架。 #### 三、Apache CXF框架介绍 - **CXF框架背景**: - CXF最初源自XFire项目,随着XFire的发展停滞,其源码被捐赠给了...

    java调用webservice的各种方法总结

    Axis2是Apache基金会的一个开源项目,提供了一种轻量级的、高性能的Web服务框架。它也支持从WSDL生成客户端代码,并且可以通过API直接调用服务。 3. **CXF (Apache CXF)** CXF是一个流行的Java Web服务框架,支持...

    Web Service 那点事儿(2)—— 使用 CXF 开发 SOAP 服务 - ImportNew1

    【Web Service 那点事儿(2)—— 使用 CXF 开发 SOAP 服务】 Web Service是一种基于标准协议的,用于不同系统间交换数据的技术。SOAP(Simple Object Access Protocol)是Web Service常用的一种通信协议,它定义了...

    用axis2搭建webservice

    【描述】:虽然有多种Web服务技术,如XFire、CXF和JAX-WS,但Axis2以其易用性和与Spring的无缝集成而备受青睐。通过 Axis2,开发者可以快速地创建和部署Web服务,同时利用Spring的强大功能进行依赖注入和事务管理。 ...

Global site tag (gtag.js) - Google Analytics