<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的漫漫程序之旅

    專注于JavaWeb開發
    隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
    數據加載中……

    XFire 最新生火指南(上)

    本文來自SpringSide WIki,請留意Wiki上的最新版本。

    基于發布在JavaEye的敬畏心情,本文又修改了一遍,與前兩天發在blogjava和csdn的版本稍有不同。

    1. 概述

       XFire 是全球眾多牛人在與axis系列對比后一致投票的選擇。我比較欣賞的特性有:

    1. 與Spring整合,無須生成一堆文件,無須打包獨立war,直接將應用中的Pojo導出為Web服務。
    2. Aegis--超簡約的默認Java XML 綁定機制,且可以Plugin其他綁定機制。
    3. JSR181--annotatiton驅動的POJO WebService配置。
    4. 基于Stax的高性能框架
    5. 脫離Web服務器的單元測試能力。

       網上的文檔與例子總是不新,請大家拋開所有的文檔,所有的Axis習慣,單看這份代表XFire1.2.2最簡約做法的指南。

    2. 生火指南

    2.1 修改web.xml,在Web應用中增加XFire的入口

       注意XFire有了自己的Servlet,不再依賴Spring MVC的DispatchServlet,也就遠離了大家不熟悉的Spring MVC URL Mapping,與Spring達致完美的整合。

       這里指定了路徑為/service/* ,即WebService的URL會被默認生成為http://www.xxx.com/yyy/service/BookServiceservice/ServiceName,其中ServiceName默認為下文中的接口名。

    xml 代碼
    1. <servlet>  
    2.      <servlet-name>xfireservlet-name>  
    3.      <servlet-class>org.codehaus.xfire.spring.XFireSpringServletservlet-class>  
    4.  servlet>  
    5.  <servlet-mapping>  
    6.      <servlet-name>xfireservlet-name>  
    7.      <url-pattern>/service/*url-pattern>  
    8.     servlet-mapping>     
       如果應用使用了Hibernate,使用了OpenSessionInView Filter,注意配置OSIV Filter Filter覆蓋xfire servlet的路徑,即本例中的/service/*.

    2.2 編寫窄接口,抽取POJO中要導出的服務

       從已有的BookManager.java中,抽取出一個窄接口,僅暴露需要導出為Web Service的方法。而BookManger.java是POJO,不需要任何WebService相關代碼。

      窄接口一方面滿足了安全要求,不用整個BookManager所有方法導出為Web Service;另一方面,XFire暫時也只支持基于接口的Proxy。

    public interface BookService {
    List findBooksByCategory(String cateoryId);
    }

     2.3 配置Java-XML Binding

       XFire默認的Aegis Binding語法非常簡單,在SpringSide的例子里幾乎一行配置都不用寫,是我見過最簡單的binding定義,大大優于其他以設計復雜為終極目標的方案。

       對象的屬性、函數的參數和返回值如果為int、String、Date等普通類型以及由普通類型組成的復雜對象都無需定義。我見到只有兩種情況需要定義:

    • 無法使用泛型定義Collection中元素的類型時--如List findBooks()。如果能寫成List findBooks()就也不需要了。
    • 需要為屬性定義不同的名字,或者定義復雜對象里的某些屬性不要輸出。

         如果實在需要aegis配置, XFire以約定俗成代替配置(CoC),所有Service和Entity Bean的binding文件要求命名為xxx.aegis.xml,而且要和原來的類sit together在同一目錄里。

    1. <mapping>  
    2.           
    3.        <property name="products" ignore="true"/>  
    4. mapping>  

       其他語法詳見Aegis 參考。

    2.4 配置Spring導出

        為了節約配置代碼,先配置一個基類。注意導出Web服務的Bean不能lazy-init:

      
    
  • <import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/>  
  •   
  • <bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true">  
  •   <property name="serviceFactory" ref="xfire.serviceFactory"/>  
  •   <property name="xfire" ref="xfire"/>  
  •  bean>  
  •  

     每個Web服務的定義:parent為前面定義的基類,serviceClass 為Web Service的接口,serviceBean為Web Service的接口實現類。

    xml 代碼
    1. <bean id="bookService" parent="baseWebService">  
    2.   <property name="serviceBean" ref="bookManager"/>  
    3.   <property name="serviceClass" value="org.springside.bookstore.components.xfire.server.simple.BookService"/>  
    4.  bean>  


     


    Web服務導出完畢,用戶可在http://localhost/service/BookService?WSDL查看自動生成的WSDL。 

    上半章完,關于JSR181,Client API與測試部分請看XFire 生火指南(下)



    posted on 2008-04-24 17:59 々上善若水々 閱讀(954) 評論(2)  編輯  收藏 所屬分類: WebService

    評論

    # re: XFire 最新生火指南(上)  回復  更多評論   

    嘎嘎 加油!?。?!
    2008-04-25 13:50 | 海大哥

    # re: XFire 最新生火指南(上)  回復  更多評論   

    共勉。
    2008-04-25 17:09 | 々上善若水々
    主站蜘蛛池模板: 一级毛片a免费播放王色| 国产精品亚洲αv天堂无码| 羞羞视频免费网站在线看| 亚洲中文字幕无码爆乳app| 亚洲伊人tv综合网色| 老司机亚洲精品影视www| 国产在线播放免费| 毛片免费在线播放| 99在线精品视频观看免费| 国产精品99久久免费观看| 久久国产精品免费| 一级毛片免费在线观看网站| 亚洲av永久无码精品秋霞电影秋| 亚洲精品一卡2卡3卡三卡四卡| 亚洲AV无码一区二区二三区入口 | 亚洲一区影音先锋色资源| 91麻豆国产自产在线观看亚洲 | 亚洲天堂男人影院| 亚洲明星合成图综合区在线| 亚洲AV午夜福利精品一区二区| 伊人久久亚洲综合| 精品国产亚洲一区二区在线观看| 国产大片51精品免费观看| 精品久久洲久久久久护士免费 | 亚洲日韩国产二区无码| 亚洲校园春色另类激情| 亚洲中文无码线在线观看| 亚洲色图校园春色| 亚洲国产高清视频在线观看| 久久亚洲日韩看片无码| 亚洲精品第一国产综合精品| 久久亚洲私人国产精品| 亚洲视频欧洲视频| 亚洲妇女水蜜桃av网网站| 亚洲不卡视频在线观看| 亚洲 暴爽 AV人人爽日日碰 | 美女黄网站人色视频免费国产 | 亚洲国产成人精品无码区二本 | 欧洲人免费视频网站在线| 久久久久久影院久久久久免费精品国产小说 | 久久亚洲国产最新网站|