1. 程式人生 > >根據wsdl反向生成webservice服務端(3種方法)

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

執行 services web.xml javaee jar -i next 意圖 -a

前言
正常情況下,都是我們項目組創建一個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就行。

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