XFire

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

author: calvin,smallnest

1.概述

网站:

Smallnest写的XFire初级中文教程。

官方网站的User Guide和Quick Start。

JavaWorld的介绍文章

XFire是与Axis 2并列的新一代WebService框架。之所以并称为新一代,因为它:∙支持一系列Web Service的新标准--JSR181、WSDL2.0 、JAXB2、WS-Security等;

∙使用Stax解释XML,性能有了质的提高。XFire采用Woodstox作Stax实现;

∙Easily Create Services from POJOs;

∙Spring的结合;

∙灵活的Binding机制,包括默认的Aegis,xmlbeans,jaxb2,castor。

其中第3,4,5项对一个Pragmatic的应用很重要。SpringSide就是使用了这三样,组合了一个比Axis简单得多的WebService最简做法。

关注一个WebService框架,通常关注Java代码遵循什么接口和规范,做什么XML配置,最后执行什么命令来发布一个Web Service,另外还关注Java类如何绑定为XML与其他语言沟通,下面将分别介绍XFire里的最简做法。

2.WebService的最快创建

2.1.抽取WebService用的窄接口

BookManger.java只须为POJO即可,不需要含任何WebService相关代码。

为它抽取一个for WebService的窄接口BookService.java。

窄接口一方面满足了由于安全原因,不愿意整个XXXManager所有方法导出为Web Service 的需求,另一方面,XFire暂时也只支持基于接口的Proxy。

2.2.至简单的Aegis Binding

XFire默认的Aegis Binding语法非常简单,int,String,Date等类型的参数和返回值都无需定义,只要定义一下List findBooksByName()的返回值List里的对象是Book就可以了,是我见过最简单的binding定义,大大优于其他以设计复杂为终极目标的方案。

componentType="org.springside.bookstore.domain.Book"/>

为了以约定俗成代替配置,所有Service和Entity Bean的binding文件要求命名为

xxx.aegis.xml,而且要和原来的类sit together在同一目录里。

具体介绍见Aegis Binding。

2.3.配置Spring 导出Web服务

配置文件见applicationContext-webservice.xml ,靠一个XFire Exporter将窄接口导出成Web服务,然后靠Spring MVC的URL Mapper将它绑定到某个URL。

XFire对此还提供了基于XBean的简写法,但我等着Spring2.0,就不上XBean了,抽象出一个parent bean后,其实也差不多了。

class="org.springframework.web.servlet.handler.SimpleUrlHandlerMappin g">

/BookService=bookService

value="org.springside.bookstore.service.BookService"/>

class="org.codehaus.xfire.spring.remoting.XFireExporter"

abstract="true">

此时,XFire就会导出WebService并显示WSDL如下:

http://localhost:8080/springside/service/BookService?WSDL

另有不依赖于Spring的配置方式,需自行在web.xml配置servlet,在

WEB-INF/classes/META-INF/xfire 目录放置services.xml配置文件。

3.Client端代码

1.Client的实现同样只需要POJOs ,Service接口和相应的aegis.xml文件

public static void main(String[] args) {

Service serviceModel = new

ObjectServiceFactory().create(BookService.class);

BookService service = (BookService) new

XFireProxyFactory().create(

serviceModel,"http://localhost:8080/springside/service/BookSe rvice");

List list = service.findBooksByCategory(null);

}

2.另一种动态Client:

Client client = new Client(new

URL("/CurrencyConvertor.asmx?WSDL"));

相关文档
最新文档