webservice概述

webservice的定义:
1)可以简单的认为:Web Service就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。
2)从深层次上看,Web Service是一种新的Web应用程序分支,它们是自包含、自描述、模块化的应用,可以在网络(通常为Web)中被描述、发布、查找以及通过Web来调用。

webservice开源框架的选择:
Axis2 是对 Axis 进行了彻底的重写的一个新项目了,它使用了新的模块化架构,更方便于功能性的扩展等等。
Apache CXF 则是由 XFire 和 Celtix 两个现有的项目进行了重组。
对于现在的应用程序的迁移,如果你的应用程序是稳定而成熟的,并且在可预知的未来的情况下,只要很少的一些需求变更要做的话,那么保存你的体力,不要去做"劳民伤财"的迁移工作了。 如果你的现有应用程序BUG缠身,性能,功能等等都一片糟糕的话,那就要考虑迁移了,那选哪个框架呢?先比较一下它们的不同之处:
1、Apache CXF 支持 WS-Addressing、WS-Policy、WS-RM、WS-Security和WS-I BasicProfile
2、Axis2 支持 WS-Addressing、WS-RM、WS-Security和WS-I BasicProfile,WS-Policy将在新版本里得到支持
3、Apache CXF 是根据Spring哲学来进行编写的,即可以无缝地与Spring进行整合
4、Axis2 不是
5、Axis2 支持更多的 data bindings,包括 XMLBeans、JiBX、JaxMe 和 JaxBRI,以及它原生的 data binding(ADB)。
6、Apache CXF 目前仅支持 JAXB 和 Aegis,并且默认是 JAXB 2.0,与 XFire 默认是支持 Aegis 不同,XMLBeans、JiBX 和 Castor 将在 CXF 2.1 版本中得到支持,目前版本是 2.0.2
7、Axis2 支持多种语言,它有 C/C++ 版本。
8、Apache CXF 提供方便的Spring整合方法,可以通过注解、Spring标签式配置来暴露Web Services和消费Web Services

如何抉择:
1、如果应用程序需要多语言的支持,Axis2 应当是首选了;
2、如果应用程序是遵循 Spring 哲学路线的话,Apache CXF 是一种更好的选择,特别对嵌入式的 Web Services 来说;
3、如果应用程序没有新的特性需要的话,就仍是用原来项目所用的框架,比如 Axis1,XFire,Celtrix 或 BEA 等等厂家自己的 Web Services 实现,就别劳民伤财了。


Axis是Apache组织推出的SOAP引擎,Axis项目是Apache组织著名的SOAP项目的后继项目, 但是Axis不仅仅是一个SOAP引擎,它还包括:
1)一个独立运行的SOAP服务器
2)一个servlet引擎的插件,这个servlet引擎可以是Tomcat
3)对WSDL的扩展支持
4)一个将WSDL的描述生成JAVA类的工具
5)一些示例代码
6)还有一个监控TCP/IP包的工具

Axis2的主要特点:
1)采用名为 AXIOM(AXIs Object Model)的新核心 XML 处理模型,利用新的XML解析器提供的灵活性按需构造对象模型。
2)支持不同的消息交换模式。目前Axis2支持三种模式:In-Only、Robust-In和In-Out。In-Only消息交换模式只有SOAP请求,而不需要应答;Robust-In消息交换模式发送SOAP请求,只有在出错的情况下才返回应答;In-Out消息交换模式总是存在SOAP请求和应答。
3)提供阻塞和非阻塞客户端 API。
4)支持内置的 Web服务寻址 (WS-Addressing) 。
5)灵活的数据绑定,可以选择直接使用 AXIOM,使用与原来的 Axis 相似的简单数据绑定方法,或使用 XMLBeans、JiBX 或 JAXB 2.0 等专用数据绑定框架。
6)新的部署模型,支持热部署。
7)支持HTTP,SMTP,JMS,TCP传输协议。
8)支持REST (Representational State Transfer)。

XFire属于新一代的Web服务引擎。"新一代"不只是营销术语,它具有一定的重要意义。Apache Axis是Java领域最早的Web服务引擎之一,已成为后来问世的所有工具的衡量基准。在过去的几年里,Axis及其他这些工具已在许多生产环境进行了现场测试。获得的重要经验教训之一就是,Web服务并非最适合RPC类型的通信。出于性能和效率的考虑,面向文档的消息传输类型的通信才是出路。但Apache Axis及其他大多数Web服务引擎在设计上却是面向RPC的(不过它们支持文档类型)。业界现正在开发新一代的SOAP引擎,它们在设计上是面向文档的。Apache已经宣布停止开发旧版的Axis引擎,现正在开发Axis2(最新发布前版本为0.95)。

XFire的高级特性和功能:
1)本地数据绑定功能。支持普通Java对象(POJO)、XMLBeans、面向XML绑定的Java架构(JAXB)和Castor等。数据绑定指定了发送至Web服务的XML请求以及返回的XML响应如何映射成Java对象。
2)使用用于XML的流式API(StAX)处理XML文档。与文档对象模型(DOM)的基于树形的方法以及用于XML的简单API(SAX)的事件驱动方法相比,StAX使用了基于拉取的机制,这不但大大加快了速度,还提高了内存的使用效率。
3)支持各种传输协议,譬如HTTP、Java消息服务(JMS)和Java虚拟机内部传输(in-JVM transport)。
4)嵌入功能,这是XFire的主要优点之一。可以把这个SOAP引擎嵌入到应用当中,完全隐藏XFire特定的所有引用,因为所有配置都是程序驱动的。
5)具有丰富的API,这样一来,非常容易定制,让开发人员可以在需要时,在不同阶段截获请求,并且进行处理。
6)符合诸多最新标准,譬如SOAP 1.1(没有编码的远程过程调用即RPC)和1.2、WSDL 1.1、Web服务互操作性组织的Basic Profile 1.0、Web服务寻址规范和Web服务安全标准。

XFire的性能和局限:
Web服务使用许多资源,但它们的性能并不高。XFire打破了这个传统。与同类的SOAP引擎相比,XFire使用的内存大大减少(一方面是由于使用StAX),而性能却大大提高。
另外,XFire还提供了进一步优化性能的几种方法。方法之一就是使用Java虚拟机内部传输。如果知道Web服务与客户程序在同一个Java虚拟机里面运行,就可以选择使用本地传输,这样可以高速传输服务。在示例的客户程序代码当中,请注意指定了服务端点URL的那一行:
String serviceUrl = "http://localhost:8080/websvc/services/Banking"; 被换成了:
String serviceUrl = "xfire.local://Banking";
可以看到,性能的大幅度提升是因为绕开了整个网络层。
不过,XFire也具有一些严重的局限性,同样应当引起注意:
开发Web服务的一个好的做法就是,从WSDL开始着手。大多数SOAP引擎提供了利用WSDL创建服务占位模块的工具。XFire也提供了这样一个工具。但它需要使用注解,因而需要J2SE 5.0。这对仍坚持使用J2SE 1.4.X的人来说并不受欢迎,因为他们用其他方法来编写客户程序。

1.XFire发布服务的方式:
1)直接使用 Web 服务接口和 Web 服务实现类(POJO)来发布
2)基于 JSR181 标准和注释技术将被注释的 POJO 发布成 Web 服务
2.XFire发布服务的步骤:
1)定义接口(第二种发布服务的方式不用定义接口)
2)实现类
3)配置:\META-INF\xfire\services.xml


CXF

你可能感兴趣的:(webservice)