前言
正常情況下,都是我們項目組創建一個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就行。
轉:http://blog.csdn.net/jiandanfeng2/article/details/53439748