webService學習之路一:講解了通過傳統方式怎么發布及調用webservice
webService學習之路二:講解了SpringMVC和CXF的集成及快速發布webservice
本篇文章將講解SpringMVC+CXF環境下,怎么調用其他系統通過webService方式暴露出來的接口
① 為避免懷疑同一個項目中調用本項目的接口,這里我新打開一個eclipse通過最原始的方式發布了一個webservice並啟動保證可以被訪問

打開瀏覽器確認可以被訪問

②進入CXF/bin 利用wsdl2java工具將webService接口轉換為可供調用的java類。調用方式wsdl2java XXXXX?wsdl

執行完成后,你會發現bin目錄下多了一個文件夾,文件夾路徑和接口包路徑一致

③ 將生成的java文件拷貝到需要調用接口的項目中,請注意保持包的路徑一致。

④ 接口的調用,前面的都是准備工作。 o(∩_∩)o
繼webService學習之路二基礎上,集成好CXF后並保證xml中命名空間都已經正確
在applicationContext.xml中添加如下配置:
<import resource="classpath:META-INF/cxf/cxf.xml" /> <!-- 注意:serviceClass為接口類並非實現類 --> <!-- <jaxws:server serviceClass="com.xiaochangwei.web.service.WebserviceTest" address="/webSerciceTest_service_jaxws"></jaxws:server> --> <!-- 注意:implementor為接口的具體實現類 --> <!-- <jaxws:endpoint implementor="com.xiaochangwei.web.service.impl.WebServiceTestImpl" address="/webSerciceTest_endpoint" ></jaxws:endpoint> --> <jaxws:client id="webServiceBean" serviceClass="webservice.server.Service" address="http://localhost:9999/service" />
請注意address后面不需要添加?wsdl
⑤ 在Controller層寫一個測試代碼進行測試
package com.xiaochangwei.web.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import webservice.server.Service; @Controller @RequestMapping("webServiceTest") public class WebServiceTestController { @Autowired private Service webServiceBean; @RequestMapping("test") public @ResponseBody String test(){ return webServiceBean.getWelcome("xiaochangwei"); } }
后經自己折騰發現,controller這里的名字不需要和xml中的一致,因為采用的是ioc, by tye吧
⑥ 打開瀏覽器見證奇跡的時刻到了

並且查看接口發布端,控制台也打印出了 service called 。至此,調用webService接口結束。
怎么能這么順利的就完成了,喜歡折騰的我怎么可能不折騰下. 經過折騰發現
① controller中注入的接口實例名稱可以和xml中的不一樣,因為采用的是ioc by type, 最開始我還以為和普通bean getbean(id)不同,必須一樣吶
package com.xiaochangwei.web.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import webservice.server.Service; @Controller @RequestMapping("webServiceTest") public class WebServiceTestController { @Autowired private Service service; @RequestMapping("test") public @ResponseBody String test(){ return service.getWelcome("xiaochangwei ok"); } }
這樣也是可行的
② xml配置中,我以為可以不指定id,因為我們不用getbean(id)進行調用,經折騰發現,id是必須的 否則報 Id is required for element 'client' when used as a top-level tag
③ 我想去掉xml中的jaxws:clent 配置,而直接在生成的接口service.java 文件上增加@Component 或者 @Service來進行注入,經嘗試失敗了,不過我還會繼續折騰的
每天折騰一點點
噢 錯了,是每天進步一點點
至此 webservice學習之路全部完結,有不懂的地方和有錯誤的地方請及時告知我,共勉
未整理的源碼下載:http://pan.baidu.com/s/1eSuIQxs (請勿用於商業項目,若需使用請完善,整理好的代碼近期會更新上去)
