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

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

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

    posts - 122,  comments - 25,  trackbacks - 0
         摘要: XFire開發時,在返回數據類型時遇到了一些麻煩,查到這樣一篇文單,非常不錯,故收藏之。 翻譯: zilong3927  原文地址: http://docs.codehaus.org/display/XFIRE/Mapping+collections 調用 Web Services 時,經常需要返回集合( collection )作為結果,或者接受 ...  閱讀全文
    posted @ 2007-04-20 18:36 josson 閱讀(2448) | 評論 (0)編輯 收藏

    前段時間,項目中使用了XFire開發Webservice,現將開發過程小結一下,以備后查。

    一、配置web.xml,在Web應用中增加XFire的入口

    注意XFire已有了自己的Servlet,不再依賴Spring MVC的DispatchServlet,也就遠離了大家不熟悉的Spring MVC URL Mapping,與Spring達致完美的整合。
    這里指定了路徑為/service/* ,即WebService的URL會被默認生成為http://localhsot:8080/test/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>

    二、集成Spring

    在spring能找到的config目錄下,新建applicationContext-xfire.xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
    <beans default-autowire="byName" default-lazy-init="true">
        
    <!-- 傳統方式下XFire-Spring導出POJO為Web服務的配置文件-->

        
    <!--引入XFire的預配置文件-->
        
    <import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/>

        
    <!--XFire WebService 基類-->
        
    <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 Service -->
        
    <bean id="userService" parent="baseWebService">
            
    <property name="serviceBean" ref="userServiceImpl"/>
            
    <property name="serviceClass" value="com.test.services.UserService"/>
        
    </bean>
    </beans>

    定義說明:parent為前面定義的基類,serviceClass 為Web Service的接口,serviceBean為Web Service的接口實現類。


    當然,在spring配置文件中定義userServiceImpl是必不可少的,如在serviceContext.xml中定義如下:

    <bean id="userServiceImpl" class="com.test.services.UserServiceImpl"/>

    若不集成Spring,則需要定義一個services.xml文件,存放在/src/META-INF/services.xml

     <beans  xmlns="http://xfire.codehaus.org/config/1.0">  
       
    <service >  
         
    <name>userService</name>  
         
    <namespace>http://localhost:8080/service/userService</namespace>  
         
    <serviceClass>com.test.service.UserService</serviceClass>  
         
    <implementationClass>com.test.service.UserServiceImpl</implementationClass>  
       
    </service>  
     
    </beans> 
    參數說明:

     

    1、name 元素:表示該webService的名稱
    2、namespace 元素:表示該webService的命名空間
    3、serviceClass 元素:表示該webService的接口
    4、implementationClass 元素:表示該webService的實現類


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


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

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

    public interface UserService {
       List
    <User> getUsers();
    }


    四、配置Java-XML Binding
    如果返回類型是List或Map,并且里面存放的是自定義類的話,則需要增加一個對于服務接口的配置文件。該文件的命名規則是 接口文件名.aegis.xml。例如接口是UserService.java的話,則此配置文件命名為UserService.aegis.xml。注意此配置文件須與接口放在同一目錄下面。
     <?xml version="1.0" encoding="UTF-8"?>  
     
    <mappings>  
       
    <mapping >  
         
    <method name="getUsers">  
           
    <return-type componentType="com.test.domain.User"/>  
         
    </method>  
       
    </mapping>  
     
    </mappings> 
    getUsers方法返回類型是List,里面裝的User對象。對于這種類型的方法,在配置文件中描述了它的返回值類型。

    如果返回的類型是Map的話,做法和List一樣。但定義的類型,是Map中的Value部分,并且這樣的話,Map中Value所存放的對象就必須全部是同一種類啦。

    參考資源:
    http://wiki.springside.org.cn/display/springside/XFire
    http://www.javaeye.com/topic/70005
    http://junewolf.javaeye.com/blog/52523
    posted @ 2007-04-20 18:22 josson 閱讀(3142) | 評論 (1)編輯 收藏
    這兩天,項目中需要開發一些webservice接口,我選用了XFire框架,原來一直在用AXIS。

    很多朋友都在討論XFire和AXIS的優劣,就我而言,更喜歡XFire,至少目前是如此。

    最討厭axis要生成一段東西,才能在wsdd文件注冊服務,很是麻煩。而且,調試時要是設成debug,那可就慘了,一大堆用戶信息,出了異常還不好捕捉。相比之下,XFire的開發就要簡單的點多了,包括代碼開發,配置,還是返回自定義類型,真是easy。不過,客戶端調用時(動態模式或根據WSDL生成Client Stub),返回的自定義類型是否能順利取得,到時需要研究一下。

    今天,就返回類型問題困了好久,還好已經解決了。

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

    • 無法使用泛型定義Collection中元素的類型時。
    • 需要為屬性定義不同的名字,或者定義復雜對象里的某些屬性不要輸出。
    若是遇害到上述情況的話,需要進行aegis配置,文件名應與接口的文件名相同,并且放在同一目錄下,如UserService.java,則定義一下UserService.aegis.xml文件,定義內容如下:
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <mappings>
     3     <mapping>
     4         <method name="getResources">
                   <
    !--配置getResources服務的返回值,List內對象為Resource-->
     5             <return-type componentType="com.test.Resource" />
     6         </method>
     7         
     8         <method name="getAuthentication">
     9             <return-type componentType="com.test.Authentication" />
    10         </method>
    11     </mapping>
    12 </mappings>

    若返回的Javabeans存在Collections 時,需要定義一個與javabean相關的文件名,如User.aegis.xml,并且放在相同的目錄下:
    <?xml version="1.0" encoding="UTF-8"?>
    <mappings>
        
    <mapping>
            
    <!--User bean  ,包含了一個  List  ,  其中的對象是Resource  -->
            
    <property name="resources" componentType="com.test.Resource" />
            
    <!--配置User類,忽略內嵌的roles屬性不要輸出XML-->
            
    <property name="roles" ignore="true" />
        
    </mapping>
    </mappings>


    有空將XFire使用總結一下,也貼出來。

    posted @ 2007-04-19 19:13 josson 閱讀(495) | 評論 (0)編輯 收藏
    可能是人太懶的原故,而且文字表達能力也遜,所以很少寫,原來在博客園的blog也很少更新。

    今后要多寫寫blog,記錄工作、學習中的問題和經驗。也算是加強文檔能力的一種途徑吧!

    有空也要把博客園的東西遷過來,畢竟那邊是.net為主的。

    posted @ 2007-04-19 18:40 josson 閱讀(189) | 評論 (0)編輯 收藏
    僅列出標題
    共11頁: First 上一頁 3 4 5 6 7 8 9 10 11 
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    收藏夾

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲成电影在线观看青青| 亚洲视频人成在线播放| 亚洲成a人片在线观看中文app| 久久久久久久久久免免费精品| 亚洲狠狠爱综合影院婷婷| 美美女高清毛片视频黄的一免费| 国产成人3p视频免费观看 | 最近高清中文字幕无吗免费看| 亚洲资源在线观看| 在线美女免费观看网站h| 亚洲国产成人无码av在线播放| xx视频在线永久免费观看| 色偷偷亚洲女人天堂观看欧| 国产精品免费观看久久| 亚洲av永久中文无码精品| 亚洲第一网站男人都懂| 久久久久久av无码免费看大片| 久久精品国产亚洲av四虎| 99re6在线视频精品免费下载| 亚洲制服丝袜在线播放| 永久免费观看的毛片的网站| 日韩在线一区二区三区免费视频| 国产成人综合亚洲亚洲国产第一页| a级毛片毛片免费观看久潮| 亚洲一区二区电影| 拨牐拨牐x8免费| 男女猛烈无遮掩视频免费软件| 中文字幕精品亚洲无线码一区| 一级毛片免费观看不卡的| 亚洲avav天堂av在线网爱情| 国产成人无码区免费A∨视频网站 国产成人涩涩涩视频在线观看免费 | 女人18毛片水真多免费看| 日韩大片免费观看视频播放| 亚洲国产另类久久久精品黑人| 亚洲精品国产免费| 特黄aa级毛片免费视频播放| 亚洲国产人成网站在线电影动漫| 毛片免费全部免费观看| 一级成人a做片免费| 亚洲国产精品成人久久久| 日韩亚洲精品福利|