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

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

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

l 使用soapUI生成

l 使用myeclipse的web service生成

l 使用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

l 假設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,然後再jre和javaee環境下執行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生成的。

其中在方式一的第五步,如下圖:server、Client選項,都是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就行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章