webService學習之路(三):springMVC集成CXF后調用已知的wsdl接口


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 (請勿用於商業項目,若需使用請完善,整理好的代碼近期會更新上去)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM