XFire
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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"> 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"));