我的漫漫程序之旅

          專注于JavaWeb開發(fā)
          隨筆 - 39, 文章 - 310, 評(píng)論 - 411, 引用 - 0
          數(shù)據(jù)加載中……

          XFire 最新生火指南(上)

          本文來自SpringSide WIki,請(qǐng)留意Wiki上的最新版本

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

          1. 概述

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

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

             網(wǎng)上的文檔與例子總是不新,請(qǐng)大家拋開所有的文檔,所有的Axis習(xí)慣,單看這份代表XFire1.2.2最簡(jiǎn)約做法的指南。

          2. 生火指南

          2.1 修改web.xml,在Web應(yīng)用中增加XFire的入口

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

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

          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>     
             如果應(yīng)用使用了Hibernate,使用了OpenSessionInView Filter,注意配置OSIV Filter Filter覆蓋xfire servlet的路徑,即本例中的/service/*.

          2.2 編寫窄接口,抽取POJO中要導(dǎo)出的服務(wù)

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

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

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

           2.3 配置Java-XML Binding

             XFire默認(rèn)的Aegis Binding語法非常簡(jiǎn)單,在SpringSide的例子里幾乎一行配置都不用寫,是我見過最簡(jiǎn)單的binding定義,大大優(yōu)于其他以設(shè)計(jì)復(fù)雜為終極目標(biāo)的方案。

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

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

               如果實(shí)在需要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導(dǎo)出

              為了節(jié)約配置代碼,先配置一個(gè)基類。注意導(dǎo)出Web服務(wù)的Bean不能lazy-init:

            
          
        1. <import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/>  
        2.   
        3. <bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true">  
        4.   <property name="serviceFactory" ref="xfire.serviceFactory"/>  
        5.   <property name="xfire" ref="xfire"/>  
        6.  bean>  
        7.  

           每個(gè)Web服務(wù)的定義:parent為前面定義的基類,serviceClass 為Web Service的接口,serviceBean為Web Service的接口實(shí)現(xiàn)類。

          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服務(wù)導(dǎo)出完畢,用戶可在http://localhost/service/BookService?WSDL查看自動(dòng)生成的WSDL。 

          上半章完,關(guān)于JSR181,Client API與測(cè)試部分請(qǐng)看XFire 生火指南(下)



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

          評(píng)論

          # re: XFire 最新生火指南(上)  回復(fù)  更多評(píng)論   

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

          # re: XFire 最新生火指南(上)  回復(fù)  更多評(píng)論   

          共勉。
          2008-04-25 17:09 | 々上善若水々
          主站蜘蛛池模板: 西贡区| 桓仁| 朝阳区| 忻城县| 寿光市| 博客| 乐至县| 莱芜市| 昌宁县| 寻甸| 越西县| 文安县| 玉溪市| 新宾| 曲沃县| 德钦县| 冀州市| 木兰县| 赣州市| 富顺县| 威信县| 蒲城县| 韩城市| 城口县| 南丹县| 宝鸡市| 洛隆县| 汉川市| 兴业县| 合江县| 玉林市| 界首市| 武乡县| 蓝田县| 德安县| 神木县| 阜南县| 大足县| 酉阳| 嵊州市| 洱源县|