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

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

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

    太陽雨

    痛并快樂著

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      67 Posts :: 3 Stories :: 33 Comments :: 0 Trackbacks

    XFire 最新生火指南(上)

    作者: 江南白衣,作者保留版權,轉載請注明出處。

    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最簡約做法的指南。

    1.1 SpringSide的封裝與演示 

    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/ServiceName,其中ServiceName默認為下面的接口名。

    <servlet>
      <servlet-name>xfire</servlet-name>
      <servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
     </servlet>
     <servlet-mapping>
      <servlet-name>xfire</servlet-name>
      <url-pattern>/service/*</url-pattern>
     </servlet-mapping>

       如果應用使用了Hibernate,使用了OpenSessionInView Filter,注意配置OSIV filter覆蓋 xfire servlet的路徑,即本例中的/service/*。

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

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

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

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

     2.3 配置Java-XML Binding

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

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

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

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

    <mapping>
    <!--配置findBooksByName服務的返回值,List內對象為Book-->
            <method name="findBooksByName">
                <return-type componentType="org.springside.bookstore.domain.Book"/>
            </method>
    <!--配置Category類,忽略內嵌的products屬性不要輸出XML-->
    <property name="products" ignore="true"/>
    </mapping>

       其他語法詳見Aegis 參考。

    2.4 配置Spring導出

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

    <!-- 導入XFire基本配置文件 -->
    <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的接口實現類。

    <bean id="bookService" parent="baseWebService">
      <property name="serviceBean" ref="bookManager"/>
      <property name="serviceClass" value="org.springside.bookstore.components.xfire.server.simple.BookService"/>
     </bean>

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

    posted on 2010-03-05 11:43 小蟲旺福 閱讀(276) 評論(0)  編輯  收藏 所屬分類: javaEE
    主站蜘蛛池模板: 四虎成人精品在永久免费| 久久青草免费91观看| 在线观看视频免费国语| 亚洲午夜电影一区二区三区| 99在线视频免费| 亚洲成a人片在线观看中文!!!| 91香蕉在线观看免费高清| 亚洲香蕉免费有线视频| 久草视频免费在线观看| 亚洲国产精品乱码在线观看97| 国拍在线精品视频免费观看| 亚洲毛片基地4455ww| 卡1卡2卡3卡4卡5免费视频| 亚洲国产美女精品久久久| 国产精品自在自线免费观看| 国产亚洲精彩视频| 精品国产日韩亚洲一区| 一本久久A久久免费精品不卡| 久久精品国产精品亚洲人人| 男人天堂免费视频| 亚洲综合色丁香麻豆| 最近免费中文字幕视频高清在线看| 亚洲精华国产精华精华液好用 | 亚洲春色在线观看| 在线观看无码AV网站永久免费| 亚洲午夜无码久久久久软件| www.亚洲色图| 国产免费无码AV片在线观看不卡| 亚洲国产精品久久久久| 日本一区二区三区免费高清| 无人视频在线观看免费播放影院| 亚洲色精品aⅴ一区区三区| 最近免费中文字幕mv电影| 亚洲熟女www一区二区三区| 亚洲成?Ⅴ人在线观看无码| 国产一区二区免费视频| 77777午夜亚洲| 亚洲最大AV网站在线观看| 亚洲网站在线免费观看| 污污视频网站免费观看| 亚洲精品免费在线|