`
ihyperwin
  • 浏览: 425252 次
  • 性别: 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
分享到:
评论

相关推荐

    JAX-WS2.0 API

    JAX-WS2.0 API

    jax-ws webservice demo

    基于jax-ws 实现的web service client和server端的demo程序。 注:如果使用的是 myeclipse 时 server 部署到tomcat 启动的时候会报错 解决办法:找到myeclipse安装目录下的 plugins 目录里 查找 webservices-rt.jar,...

    Jax-ws所需要的JAR包

    亲测可用,Jax-ws所需要的JAR包,拷贝到tomcat安装路径的lib里,实现了webservice发布到tomcat,赞!

    JAX-WS自学笔记

    JAX-WS自学笔记 本人自学JAX-WS笔记和简单例子,文档标题结构如下: JAX-WS使用教程 1、JAX-WS概述 2、创建Web Service 2.1 从java开始 2.1.1 运行wsgen 2.1.2 生成的WSDL和XSD 2.1.3 目录结构 2.2 从WSDL...

    jax-ws 方式发布web Service 后台用Hibernate实现,前端.NET通过引用服务方式实现

    rar中包含整个项目的源码和数据库生成脚本,采用jax-ws发布Web Service服务,支持java客户端和.Net客户端调用,数据库采用oracle10g,里面有创建数据库脚本文件createTable_Oracle10g.sql,由于Hibernate映射表中会...

    设计与开发 JAX-WS 2.0 Web 服务

    通过使用 Java™ API for XML Web Services (JAX-WS) 技术设计和开发 Web 服务,可以带来很多好处,能简化 Web 服务的开发和部署,并能加速 Web 服务的开发。通过此教程,可以了解如何开发将其功能作为 Web 服务公开...

    JAX-WS 之 CXF 框架

    jax-ws方式的webservice服务,基于xml的webservice开发,资料很全面很珍贵,大师所写的书籍,真心不贵

    metro-jax-ws-master

    The Java API for XML Web Services (JAX-WS) is a Java programming language API for creating web services, particularly SOAP services. JAX-WS is one of the Java XML programming APIs. It's a part of the ...

    JAX-WS 2.2 RI所有相关jar包

    JAX-WS 2.2 RI 所包含的JAR包集合,包含25个JAR包,列表如下: FastInoset.jar gmbal-api-only.jar ha-api.jar javax.annotation.jar javax.mail_1.4.jar jaxb-api.jar jaxb-impl.jar jaxb-xjc.jar jaxws-api...

    webService部署tomcat需要的jax-ws jar包

    webService部署tomcat需要的jax-ws 的完整jar包

    MyEclipse8_0中使用 JAX-WS 部署 WebService 实例

    MyEclipse8_0中使用 JAX-WS 部署 WebService 实例 - 外衣 - 博客频道 - CSDN_NET.mht

    jax-ws 2.0文档说明以及源码

    jax-ws webservice类简介开发,包含文档以及源码,谢谢支持!get get get

    基于JAX-WS2.2开发WebService所需jar资源包

    使用 Eclipse JavaEE 开发 WebService 时,若选择手动创建原生的JAX-WS服务,需要导入此jar资源(教程详见我的博文https://blog.csdn.net/weixin_50604409/article/details/116399530)。 如果您同时装有 IntelliJ ...

    JAX-WS_WebService.rar

    JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用

    JAX-WS的lib、src和docs

    3.众多元数据(Annotations)会被JAX-WS用来描述Web Services的相关类,包括Common Annotations, Web Services Metadata, JAXB2的元数据和JAX-WS2.0规范自己的元数据. 4.Annotation Processing Tool(APT)是JAX-WS重要的...

    Jax-WS 简单实例

    Jax-WS的简单实例 Jax-WS的简单实例

    JAX-WS Web service

    JAX-WS Web service 开发初步

    jax-ws和spring的整合开发

    java开发中的jax-ws和spring的整合的开发的比较全面的整合的步骤.

    jax-ws webservice简单demo

    jax-ws webservice完整demo,包含所有jax-ws 2.2jar包。

    使用JAX-WS(JWS)发布WebService

    使用JAX-WS(JWS)发布WebService 使用myeclipse开发java的webservice的两种方式 方式一: (此方式只能作为调试,有以下bug:jdk1.6u17?以下编译器不支持以Endpoint.publish方式发布document方式的soap,必须在...

Global site tag (gtag.js) - Google Analytics