1. XFire简介
XFire是与Axis 2并列的新一代Web Service框架,通过提供简单的API支持Web Service各项标准协议,帮助你方便快速地开发Web Service应用。XFixe内建在STAX的基础上之上,STAX是基于流的XML解析引擎,这使得XFire拥有很高的性能。
相对Axis来说,目前它的人气指数相当高,加上其提供了和String集成的支持,在目前的Web Service开源社区拥有众多的追随者,XFire被多个开源项目所使用。XFire为Spring提供了支持,这使得我们可以很容易在Spring中 使用XFire构建Web Service应用。本文讲述了如何使用XFire在Spring中开发Web Service的具体过程。
XFire特性
XFire是Web Service框架的后起之秀,它从现有的框架中借鉴了许多优秀的理念,力争将Web Service的应用开发难度降到最低。此外,还提供了各种绑定技术、支持多种传输协议,对Web Service体系中许多新的规范提供了支持。简单来说,它具有以下一些特性:
· 支持重要的Web Service规范,如SOAP、WSDL、WS-I Basic Profile,、WS-Addressing、WS-Security等;
· 高性能的SOAP 栈设计;
· 可插拔的绑定,支持POJO、XMLBeans、JAXB1.1、JAXB2以及Castor;
· 支持JSR 181规范,该规范通过JDK 5.0注解将POJO导出为Web Service;
· 支持多种传输协议:HTTP、JMS、XMPP、In-JVM等,其中In-JVM允许我们在不启动Web应用器的情况下,象一般的程序一样测试Web Service应用;
· 易用的API,XFire API简洁明了,便于使用;
· 支持Spring、Pico、Plexus、Loom等容器;
· 支持JBI(Java Business Integration:Java 业务整合)规范,JBI是JSR 208的实现;
· 能够根据WSDL创建客户端和服务器端的存根代码;
率先对JAX-WS提供了支持,JAX-WS是JAX-RPC的替代者。
在架构上可以把XFire大概分为 Service, Transport 和 Invoker 三个层面。
Service 层是 XFire 架构的静态基础,负责完成对服务的注册及其管理。核心的 ServiceRegistry 接口完成对服务自身的生命期管理,如注册/注销/获取等等;而 ServiceFactory 接口则负责从具体的 POJO 类型,生成实现 Service接口的可被管理的服务代理。
Transport 层则是 XFire 的外部 IO 处理系统。由 TransportManager 接口对具体的 Transport 接口实现进行管理,默认提供了基于 pipe 的 LocalTransport 和基于 Http 协议的 SoapHttpTransport。理论上可以任意进行扩展,例如 XFire 发布包中还提供了基于 JMS 和 XMPP 的实现。
Invoker 则是 XFire 的动态调用层,负责在 Transport 层接受到请求后,解析内容、调用合适服务并最终返回 SOAP 封包给调用者。运行时 Invoker 负责维系 Service 和 Transport 之间的联系。
因此一个服务的生成和注册往往类似如下代码:
[code]Service endpoint = serviceFactory.create(clazz);// 根据具体类型创建服务
XFire.getServiceRegistry().register(endpoint);// 向服务管理注册服务
endpoint.setInvoker(new BeanInvoker(bean));// 设定服务调用模式
[/code]
最基本的XFire 接口,实际上就是 getServiceRegistry()和getTransportManager() 的封装。
XFire 中另一块核心的思想,就是其灵活而强大的 binding 机制,负责完成 Java 类型与 SOAP 消息的双向转换。XFire仅仅内建就支持 POJO(Aegis), Castor,JAXB 1.1, JAXB 2.0 和 XMLBeans 多种模式,你可以根据需求选择从全自动POJO生成,到全手工 xsd 文件定义的不同方式。
使用XFire开发Web服务的基本步骤
1、检验Java类的方法和构造函数是公共的(public)。
2、将XFire Servlet相关的入口添加到web.xml中。
3、创建services.xml并把它放到WEB-INF/classes/META-INF/XFire目录下。
4、将XFire和其他第三方库添加到你的Web应用的WEB-INF/lib 目录下。
在管道中以流方式处理SOAP
XFire是完全基于流数据处理进行工作的系统,这意味着XFire不是将整个SOAP文档缓存在内存中,而是以管道的方式接收SOAP流数据。这种工作方式的转变带来了可观的性能回报,同时节省了内存的占用。
对于习惯了Axis、GLUE等这些基于DOM处理模型Web Service框架的开发者来说,需要一些时间来适应这种转变。
XFire从管道中接收一个SOAP请求到返回一个SOAP响应,会经历一系列的阶段。在管道调用的任何一个阶段,XFire都可以添加一些额外的 Handler,在对消息进行加工处理后再传入到下一个阶段中。