author: calvin,smallnest
 1.概述
网站:
Smallnestservice fault写的 XFire初级中文教程 
User Guide和Quick Start
JavaWorld介绍文章
XFire是与Axis 2并列的新一代WebService框架。之所以并称为新一代,因为它:
支持一系列Web Service的新标准--JSR181WSDL2.0 JAXB2WS-Security ;
使用Stax解释XML,性能有了质的提高。XFire采用Woodstox Stax实现;
Easily Create Services from POJOs;
Spring的结合;
灵活的Binding机制,包括默认的Aegis,xmlbeans,jaxb2,castor
其中第345项对一个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定义,大大优于其他以设计复杂为终极目标的方案。
    <mapping>
        <method name="findBooksByName">
            <return-type componentType="org.springside.bookstore.domain.Book"/>
        </method>
    </mapping>
为了以约定俗成代替配置,所有ServiceEntity Beanbinding文件要求命名为l,而且要和原来的类sit together在同一目录里。
具体介绍见Aegis Binding
2.3.配置Spring 导出Web服务
  配置文件见l ,靠一个XFire Exporter将窄接口导出成Web服务,然后靠Spring MVCURL Mapper将它绑定到某个URL
    XFire对此还提供了基于XBean的简写法,但我等着Spring2.0,就不上XBean了,抽象出一个parent bean后,其实也差不多了。
  <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <value>/BookService=bookService</value>
        </property>
    </bean> 
<bean id="bookService" parent="baseWebService">
        <property name="serviceBean" ref="bookManager"/>
        <property name="serviceClass" value="org.springside.bookstore.service.BookService"/>
    </bean>
 <bean id="baseWebService" class="dehaus.ing.XFireExporter" abstract="true">
        <property name="serviceFactory" ref="xfire.serviceFactory"/>
        <property name="xfire" ref="xfire"/>
</bean>
  此时,XFire就会导出WebService并显示WSDL如下:
      localhost:8080/springside/service/BookService?WSDL
另有不依赖于Spring的配置方式,需自行在l配置servlet,在WEB-INF/classes/META-INF/xfire 目录放置l配置文件。
3.Client端代码
1.Client的实现同样只需要POJOs ,Service接口和相应的l文件
 public static void main(String[] args) {
      Service serviceModel = new    ObjectServiceFactory().create(BookService.class);
    BookService service = (BookService) new XFireProxyFactory().create(
        serviceModel,"localhost:8080/springside/service/BookService");
     
    List list = service.findBooksByCategory(null);
  }
2.另一种动态Client:
Client client = new Client(new URL("www.webservicex/CurrencyConvertor.asmx?WSDL"));

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。