科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件在Spring中使用XFire构建Web Service应用

在Spring中使用XFire构建Web Service应用

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

XFire是Web Service框架的后起之秀,它从现有的框架中借鉴了许多优秀的理念,力争将Web Service的应用开发难度降到最低。

作者:闹市孤僧 2007年5月22日

关键字: java Web service XFire Spring 陈雄华

  • 评论
  • 分享微博
  • 分享邮件

概述

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 体系及重要API

ServiceFactory

ServiceFactory是XFire的核心类,它可以将一个POJO生成为一个Web Service。让我们通过一个最简单的例子了解ServiceFactory的用途,假设我们在一个POJO中定义了一个业务,现在希望将其导出为Web Service,通过ServiceFactory可以轻而易举地达到目的:

XFire xfire = XFireFactory.newInstance().getXFire();

ServiceFactory factory = new ObjectServiceFactory(xfire.getTransportManager(), null);

Service service = factory.create(YourService.class);

这样我们就为YourService类创建基于SOAP 1.1封装的Web Service。Service的输入输出参数如果为简单类型的对象(由String、int、long等基本类型组成),无须进行额外的映射设置,对于复杂类型的输入输出Service,XFire将会自动尝试将其序列化(通过Aegis绑定)。紧接着,你就可以注册这个Service。

xfire.getServiceRegistry().register(service);

XFire推荐通过一个接口开放服务,此时,你可以指定一个具体的实现类:

service.setProperty(ObjectInvoker.SERVICE_IMPL_CLASS, YourServiceImpl.class);

Handler

一个Handler可以看成是XFire的一个加工套件,XFire通过它们定义SOAP发送和接收之前的各种加工处理逻辑。如Handler可以对SOAP体的内容进行加工处理,或者SOAP头进行处理。可以简单地通过扩展AbstractHandler定义一个自己的Handler类:

import org.codehaus.xfire.MessageContext;

import org.codehaus.xfire.handler.AbstractHandler;

public class YourHandler extends AbstractHandler

{

public void invoke(MessageContext context)

{

// Do Sth...

}

}

Handler可以注册到Service或Transport(代表SOAP输入输出的的传输对象)中,在服务请求和响应管道里,Service和Transport注册的Handler将执行额外的处理操作。你可以按如下方式注册Handler:

Servic s = factory.create(YourService.class);

s.addInHandler(new YourHandler1());①添加一个Handler,对输入SOAP进行处理

s.addOutHandler(new YourHandler2());②添加一个Handler,对输出SOAP进行处理

s.addFaultHandler(new YourHandler3());③添加一个Handler,对错误SOAP进行处理

下面的Handler对SOAP头进行处理,添加一些特定的信息:

import org.codehaus.xfire.MessageContext;

import org.codehaus.xfire.handler.AbstractHandler;

public class YourHandler extends AbstractHandler

{

public QName[] getUnderstoodHeaders()

{

return new QName[] { new QName("YourHeader", "urn:your:header:ns") };

}

}

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章