隨筆-1  評論-0  文章-0  trackbacks-0
            2009年7月30日
             開發工具是myeclipse7.1,服務器是tomcat6.0,,用的xfire1.2.6和Spring 2.0,雖然MyEclipse自帶了開發xfire的插件,但為了不依賴開發工具和引用更新的包,所以建議手動創建。
               首先需要了解一下spring 、xfire 和webservice的概念:

          Spring是目前最流行的JavaEE Framework,但是使用SpringSpring-WS開發WebService卻十分繁瑣。XFire是一個簡化WebService開發的開源項目,通過SpringXFire的結合可以大大簡化基于Spring Framework的應用中的WebService開發。

          XFire是完全基于流數據處理進行工作的系統,這意味著XFire不是將整個SOAP文檔緩存在內存中,而是以管道的方式接收SOAP流數據。這種工作方式的轉變帶來了可觀的性能回報,同時節省了內存的占用。

          對于習慣了AxisGLUE等這些基于DOM處理模型Web Service框架的開發者來說,需要一些時間來適應這種轉變。

          XFire從管道中接收一個SOAP請求到返回一個SOAP響應,會經歷一系列的階段。在管道調用的任何一個階段,XFire都可以添加一些額外的 Handler,在對消息進行加工處理后再傳入到下一個階段中。圖1展示了XFire管道從接收SOAP請求到返回SOAP響應所經歷的所有階段:

          1 XFire Web Service請求和響應的過程

          SOAP請求消息對Web Service發起真正調用之前,分別會經過傳輸(Transport)、預轉發(PreDispatch)、轉發(Dispatch)、策略實施Policy)、用戶信息處理(User)、預調用(PreInvoke)、服務調用(Service Invocation)等階段。當,Web Service調用后,XFire生成響應SOAP消息并通過管道發送給客戶端請求者,這一過程會先后經歷調用后(PostInvoke)、用戶信息處理User)、策略實施(Policy)、傳輸(Transport)這四個階段。每一個階段都是一個可控點,通過編寫并注冊一些相應的Handler可以實施一些額外處理邏輯,如審計、SOAP消息加密、簽名、壓縮等。

          POJO Bean導出為Web Service

          通過XFireSpring提供的服務導出器可以輕松地將POJO導出為標準的Web Service,此外,XFire還允許我們使用JSR 181注解對POJO進行標注,無需使用XML配置就可以導出為Web Service,各種復雜的轉換細節被巧妙地隱藏在XFire之中。


          XFire
          可以很好的集成到Spring中,Spring的代碼已經做了這方面的集成。

          1、將xfire與spring的JAR包放到web 項目的classPath,(注意:把xfire自帶的Spring1.2.6刪掉,它會和spring2.0中的spring.jar產生沖突)
          2、修改web.xml,使其支持Spring 與xfire,內容如下:
          <?xml version="1.0" encoding="UTF-8"?>
          <web-app version="2.5"
           xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
           http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
           
           <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:org/codehaus/xfire/spring/xfire.xml,
            /WEB-INF/applicationContext-beans.xml
            </param-value>
           </context-param>
           
           <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>/services/*</url-pattern>
           </servlet-mapping>
           
           <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
           </listener>
           
            <welcome-file-list>
              <welcome-file>index.jsp</welcome-file>
            </welcome-file-list>
          </web-app>


          3、配置(spring)applicationContext.xml

          <?xml version="1.0" encoding="UTF-8"?>


          <beans xmlns="http://www.springframework.org/schema/beans"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns:aop="http://www.springframework.org/schema/aop"
                xmlns:tx="http://www.springframework.org/schema/tx"
                xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
                     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
           
           <bean id="mathService" class="com.zjh.manager.MathServiceImpl" />
           
           <bean id="mathExporters" class="org.codehaus.xfire.spring.remoting.XFireExporter">
            <property name="serviceFactory" ref="xfire.serviceFactory" />
            <property name="xfire" ref="xfire" />
            <property name="serviceBean" ref="mathService" />
            <property name="serviceClass" value="com.zjh.manager.MathService" />
            <property name="name" value="mathWebService" />
           </bean>
           
          </beans>


          4、創建一個接口和一個實現類

          package com.zjh.manager;

          public interface MathService {

           public String add(int a,int b);
          }

          package com.zjh.manager;

          public class MathServiceImpl implements MathService {

           public String add(int a, int b) {
                long result = a+b;
            return "計算的結果:"  + result;
           }

          }


          這樣便生成一個web Service,可以通過域名 http://localhost:8080/testwebservice_server/services/mathWebService?wsdl     來訪問,并編寫客戶端代碼了

          posted @ 2009-07-30 14:24 Flying Kite 閱讀(2047) | 評論 (0)編輯 收藏
          僅列出標題  
          主站蜘蛛池模板: 眉山市| 郑州市| 堆龙德庆县| 四川省| 乾安县| 墨江| 鹤山市| 阿坝| 威宁| 湖州市| 通化市| 高要市| 景德镇市| 津市市| 信丰县| 宜丰县| 克山县| 故城县| 德钦县| 遵义县| 东宁县| 庄浪县| 福鼎市| 贵南县| 汉寿县| 三都| 南康市| 清涧县| 昔阳县| 巫溪县| 皮山县| 郑州市| 个旧市| 巴彦淖尔市| 宁夏| 靖江市| 高要市| 娄底市| 陆河县| 沙洋县| 潮州市|