posts - 122,  comments - 25,  trackbacks - 0

          前段時間,項目中使用了XFire開發(fā)Webservice,現(xiàn)將開發(fā)過程小結(jié)一下,以備后查。

          一、配置web.xml,在Web應(yīng)用中增加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">
              
          <!-- 傳統(tǒng)方式下XFire-Spring導(dǎo)出POJO為Web服務(wù)的配置文件-->

              
          <!--引入XFire的預(yù)配置文件-->
              
          <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>

              
          <!-- 定義被導(dǎo)出的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的接口實現(xiàn)類。


          當然,在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> 
          參數(shù)說明:

           

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


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


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

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

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


          四、配置Java-XML Binding
          如果返回類型是List或Map,并且里面存放的是自定義類的話,則需要增加一個對于服務(wù)接口的配置文件。該文件的命名規(guī)則是 接口文件名.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 on 2007-04-20 18:22 josson 閱讀(3149) 評論(1)  編輯  收藏 所屬分類: java 開發(fā)


          FeedBack:
          # re: XFire 開發(fā)小結(jié).
          2007-07-20 13:28 | josson
          XFire without spring.
          http://xfire.codehaus.org/Quick+Start

          引用包另需要spring.jar及xbean-spring.jar, 注:spring2.0會有問題,services.xml文件解析會出現(xiàn)問題。spring1.2.6版本可以解決這一問題。  回復(fù)  更多評論
            
          <2007年7月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          收藏夾

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 霸州市| 青海省| 安多县| 闻喜县| 巫溪县| 蒙阴县| 额敏县| 天长市| 荆州市| 吕梁市| 十堰市| 牟定县| 达州市| 思茅市| 丰宁| 潞西市| 剑河县| 德钦县| 新龙县| 武陟县| 高淳县| 吉木乃县| 龙陵县| 青川县| 漠河县| 玛多县| 永城市| 普兰店市| 澄城县| 吉安县| 陇南市| 黑龙江省| 拜城县| 娄烦县| 岳阳县| 铜川市| 阿克苏市| 宜兰市| 五家渠市| 张掖市| 石景山区|