根據wsdl反向生成webservice服務端(3種方法)


前言

正常情況下,都是我們項目組創建一個webservice服務端,客戶通過我們提供的wsdl地址生成客戶端並進行訪問;但是最近和一個國企做接口對接,他們卻只提供給我們wsdl,需要我們根據wsdl生成服務端,提供服務給他們。故有此文。

生成方式

通過wsdl生成服務端的方法總共有3方法

l 使用soapUI生成

l 使用myeclipseweb service生成

使用wsdl2java.bat生成

工具

l SoapUI 3.5.1

l Myeclipse 10

l Myeclipse 10自帶的tomcat6

l Apache-cxf 2.2.8 安裝文件夾下的bin文件下的wsdl2java.bat請提前下載apache-cxf,並且解壓縮),把安裝路徑配置為全局變量,如下圖:CXF_HOME全局變量是第三種生成方式要用的。

 

 

環境

l JDK1.6

l JavaEE6

假設wsdl地址為:http://localhost:7001/aueic/webservice/HelloWorld?wsdl;如果沒有現成的wsdl,也可以用myeclipse編寫一個wsdl文件,方法自行百度

1.使用soapUI生成

1. 我這邊使用cxf來生成,所以首先把cxf的解壓縮目錄配置到soapUI的工具變量中,需要配置到bin目錄。

 

2. 新建一個項目

 

3. 輸入項目名稱,wsdl地址或者文件,創建請求,點擊OK根據需要可以選擇Create TestSuite和其他選項。

 

4. 生成的項目如下所示:表名該接口對外提供6方法

 

5. 右擊【HelloWorldImplServiceSoapBinding】節點,選擇【Generate Code】,再選擇Apache CXF(注:我這邊使用的是cxf,讀者可以根據需要使用其他的),如下圖:

 

 

6. 填寫生成的代碼輸出的系統路徑,以及生成代碼的所放的包路徑,因為我這邊需要的是生成webservice的服務端,所以我選擇的是【Implementation】,生成實現webservice接口的子類。其中【Client】會生成一個調用客戶端,生成webservice客戶端需要用到了,而Server可以用來把生成的代碼,發布為一個接口,根據需要選擇。最后點擊【Generate】生成代碼。

 

7. 最后生成成功,如下圖:注意圖中的wsdl2java就是利用了apache cxf安裝文件夾的wsdl2java.bat生成的。

 

8. 在系統F下面找到如下的代碼列表,實現IHelloWorldImpl.Java里面的方法,把該類發布為一個webservice服務可以采用多種方法發布,如上面第5的生成server,然后再jrejavaee環境下執行server里面的mian方法即可生成wsdl服務端的方式二提供了另一種方法,還可以通過spring具體實現自行百度)。

接口IHelloWorld.java中的每個方法會生成兩個類,如SayHello.java和SayHelloResponse.java,其中第一個是用來映射請求時的入參,第二個是響應返回值。

 

2.使用myeclipse的web service Project生成

1. 先new 一個web service Project。取名helloworld

 


 

2. 生成的項目如下圖:並且在項目中新建包com.jdf,下一步的時候會用到。

 

 

3. 右擊helloworld項目,new一個web service

 


 

4. WSDL URL方式一是同一個地址,也可以是wsdl文件(myeclipse可以新建和編輯wsdl文件)。Java package是生成的代碼要放的包路徑,必須是已經存在的,不然會提示錯誤。其他選項根據需要選擇。然后next。然后就是驗證wsdl格式,點擊Finish,生成代碼。

 

5. 生成的代碼如下圖:其中HelloWorldImplPortImpl.java就是需要自己實現的類,和方式一生成的實現類是一樣的,只是名字不太一樣。sun-jaxws.xml是生成webservice的代碼。其中在web.xml中新增了一些配置信息。

 

Sun-jaxws.xml內容如下:

 

Web.xml配置信息如下:紅框中是生成代碼生成的webservice服務的配置信息。

 

6. 然后把該項目發布到myeclipse自帶的tomcat中,啟動服務。

7. 在瀏覽器中輸入wsdl地址:http://localhost:8080/helloworld/HelloWorldImplPort?wsdl,能正確打開,代表服務發布成功。此時可以實現HelloWorldImplPortImpl.java中的方法,然后通過第4步(如果有勾選Generate web service client的話)生成的客戶端調用,也可以通過soapUI調用(方法自行百度)。

 

 

注:方式二看着采用cxf的方式生成的,但是實際上可以通用,因為jax-ws是個標准,cxf有實現了jax-ws標准,所以,生成的代碼用cxf發布為一個webservice服務也是可以的。我們這個例子是用javaee或者JAX-WS發布的。

3.使用apache cxf bin文件夾下的wsdl2java.bat生成

方式一的生成方式中,我們在soapUI中配置了apache cxf bin的路徑,所以方式一本質就是采用wsdl2java.bat生成的。

其中在方式一的第五步,如下圖:serverClient選項,都是wsdl2java.bat生成代碼的指令。

 

wsdl2java.bat用法

wsdl2java –p com.jdf –d F:\ -all xx.wsdl

-p 指定wsdl的命名空間,也就是要生成代碼的包名

-d 指令要生成代碼所在目錄

-client 生成客戶端測試web service的代碼

-server 生成服務器啟動web service代碼

-impl 生成web service的實現代碼,我們在方式一用的就是這個

-ant 生成build.xml文件

-all 生成所有開始端點代碼。

 

使用步驟:

l 下載apache-cxf-2.2.8.jar,解壓縮,如G:\ apache-cxf-2.2.8

l 設置環境變量

1. CXF_HOME= G:\ apache-cxf-2.2.8

2. 在path后面加上%CXF_HOME%/bin;

3. 在cmd命令中輸入wsdl2java,如果有提示usage,表示配置成功。

4. 接下去就可以使用了

 

結尾

Axis2等其他webservice的逆向生成也是類似的。上面生成服務端方式,也適用於生成客戶端,只要勾選client就行。

 

轉:http://blog.csdn.net/jiandanfeng2/article/details/53439748


免責聲明!

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



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