根據wsdl生成java客戶端

        今天排查同事的一個很奇怪的問題,現在將今天遇到的問題列舉出來。

        在調用外圍系統的webservice服務時候,一般來說對方會提供一個wsdl,然後我們要根據wsdl生成相應的類,通過這種方式,做到了跨語言的完美方案,但是也帶來了一些複雜性。在java中我們一般使用jdk自帶的wsimport工具或者其他三方系統的wsdl4j工具生成java版本的stub實現。

        

  •    使用jdk裏面自帶的wsimport工具,具體使用辦法如下:

        在JDK的bin文件夾中,有一個wsimport.exe,這個工具依據wsdl文件生成相應的類文件,然後用這些類文件,就可以像調用本地的類一樣調用WebService提供的方。該工具可以用於非Java的服務器,如:用C#編寫的WebService,通過wsimport則生成Java的客戶端實現。

  在命令提示符中使用如下命令:

       wsimport http://localhost:8080/Demo/services/MyService?wsdl

 

  命令參數說明:
  -d:生成客戶端執行類的class文件的存放目錄
  -s:生成客戶端執行類的源文件的存放目錄
  -p:定義生成類的包名
  使用wsimport命令後,可以得到代碼,然後可以將代碼拷貝到工程裏面,也可以將其編譯,打包成jar。
      比如 javac com/xxx/*.java com/xxx/yyy/*.java
              jar cvf dest.jar com/
              這樣我們就能得到一個dest.jar文件
        使用一下webservice的框架自帶的一下wsdl4j生成,由於衆所周知的原因,java的webservice的jar很多,經常由於版本和實現的不同,會出現一下莫名奇妙的問題,所以這個地方還是推薦使用你所使用的框架的wsdl4j工具生成相應的stub。
 
  •   使用第三方ws框架,以cxf爲例:

       使用一下webservice的框架自帶的一下wsdl4j生成,由於衆所周知的原因,java的webservice的框架很多,經常由於版本和實現的不同,會出現一下莫名奇妙的問題,所以這個地方還是推薦使用你所使用的框架的wsdl4j工具生成相應的stub

 

  1.  下載apache-cxf-2.5.11.zip並解壓到D:\apache-cxf-2.5.11,下載地址:http://mirror.bjtu.edu.cn/apache/cxf/2.5.11/apache-cxf-2.5.11.tar.gz 
  2. 在D:\apache-cxf-2.5.11\bin目錄下面執行命令:wsdl2java  http://xxx.yyy.com:8102/ws/UserRemoteService?wsdl     
  3. 命令執行完成後在相關文件夾中會生成相應的代碼,將代碼全部引入接入系統,與wsimport是相同的

   使用過程中遇到的問題:

  •     在使用的過程中發現一個問題,由於jdk6最高只支持ws2.1規範版本,所以在jdk6下面生成的時候,要加上-frontend jaxws21

        wsdl2java -frontend jaxws21  http://xxx.yyy.com:8102/ws/UserRemoteService?wsdl    

 

  • 發現可以根據wsdl生成java類,java類中的註釋有可能是中文,所以要加上encoding參數,例如:-encoding utf-8  

       wsdl2java -ecoding utf-8  http://xxx.yyy.com:8102/ws/UserRemoteService?wsdl  

發佈了36 篇原創文章 · 獲贊 10 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章