1. 程式人生 > >採用CXF框架釋出WebService

採用CXF框架釋出WebService

1. CXF介紹 :soa的框架
    * cxf 是 Celtrix (ESB框架)和 XFire(webserivice) 合併而成,並且捐給了apache  
    * CxF的核心是org.apache.cxf.Bus(匯流排),類似於Spring的 ApplicationContext
    * CXF預設是依賴於Spring的
    * Apache CXF 發行包中的jar,如果全部放到lib中,需要 JDK1.6 及以上,否則會報JAX-WS版本不一致的問題

    * CXF 內建了Jetty伺服器 ,它是servlet容器,好比tomcat

  2.CXF特點
    1. 與Spring、Servlet做了無縫對接,cxf框架裡面集成了Servlet容器Jetty 
    2. 支援註解的方式來發布webservice
    3. 能夠顯示一個webservice的服務列表
    4. 能夠新增攔截器:輸入攔截器、輸出攔截器 :

         輸入日誌資訊攔截器、輸出日誌攔截器、使用者許可權認證的攔截器

1. ServerFactoryBean
*    - 不設定註解也可以釋出webservice服務, 不支援註解

*    - 不支援攔截器的新增

2. JaxWsServerFactoryBean
*    - 支援註解

*    - 可以新增攔截器

 3. webservice 訪問流程:
*    1. 檢測本地代理描述的wsdl是否與服務端的wsdl一致 ,俗稱為握手
*    2. 通過soap協議實現通訊 ,採用的是post請求 , 資料封裝在滿足soap規約的xml中
*    3. 返回資料 同樣採用的是soap通訊,  資料封裝在滿足soap規約的xml中

步驟一:我們首先要匯入CXF釋出webService需要的jar包


步驟二:編寫介面及其實現類(這裡用的是獲取語言的介面LanguageService,實現類LanguageServiceImp)




以上我們可以看到,我們可以不用採取@WebService()註解的方式來指定提供服務的介面,因為bean.setServiceClass()已經為我們指定了。以及bean.setServiceBean()為我們指定了服務實現的bean。

檢視wsdl檔案


以上我們採用的ServerFactoryBean的方式來獲取伺服器工廠例項。通過操作發現,我們無法對wsdl檔案通過註解進行修改。(修改無效)

所以我們要通過JaxWsServerFactoryBean工廠類來獲取例項便可以利用註解對wsdl檔案進行修改。

同時,我們也可以通過JaxWsServerFactoryBean的例項bean設定日誌輸入輸出的攔截器



首先我們可以看到wsdl檔案被我們通過註解的方式修改了


步驟三:我們將釋出好的wsdl檔案進行匯出生成.class檔案。




步驟四:將生成好的.class檔案導成jar包



步驟五:建立一個新專案,模擬客戶端,並將該jar檔案匯入lib下,對釋出的webservice進行測試(獲取Language)



啟動伺服器端(釋出WebService的專案)然後啟動客戶端(LanguageTest)


同時因為我們在JaxWsServerFactoryBean中設定了日誌攔截器,所以我們在檢視wsdl檔案和進行獲取language的時候都會有日誌資訊進行輸出。



我們每次呼叫服務的時候,webservice都會檢驗本地代理的wsdl檔案是否與伺服器端的wsdl檔案是否一致。然後通過soap實現通訊。我們採用的是post請求 , 資料封裝在滿足soap規約的xml中