採用CXF框架釋出WebService
* 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中