主要介紹 axis2 的 wsdl2java 工具的使用。
Axis2 提供了一個 wsdl2java 命令可以根據 WSDL 文件自動產生調用 WebService 的代碼。wsdl2java 命令可以在 <Axis2安裝目錄> 下的 bin 目錄中找到。在使用 wsdl2java 命令之前需要設置 AXIS2_HOME 環境變量,該變量值是 <Axis2安裝目錄>。以下以 Windows 平台上使用為例。
進入 Windows 控制台,執行如下命令來生成 WebService 的客戶端代碼:
%AXIS2_HOME%\bin\wsdl2java -uri http://127.0.0.1:8080/awyb/services/mySoapService?wsdl -p client -s -o stub
其中 -uri 參數指定了 wsdl 文件的路徑,可以是本地路徑,也可以是網絡路徑。-p 參數指定了生成的 Java 類的包名,-o 參數指定了生成的一系列文件保存的根目錄。在執行完上面的命令后,我們就會發現在當前目錄下多了個stub目錄,在 ./stub/src/client 目錄可以找到對應的客戶端調用文件,這些文件復雜調用 WebService,我們可以在程序中直接使用這些文件。例如:
package client; import client.MySoapServiceStub.SayHello; import client.MySoapServiceStub.SayHelloResponse; public class StubClient { public static void main(String[] args) throws Exception { MySoapServiceStub stub = new MySoapServiceStub(); SayHello sayHello = new SayHello(); SayHelloResponse resp = stub.sayHello(sayHello); String ret = resp.get_return(); System.out.println(ret); } }
以上程序自動生成的客戶端調用文件 MySoapServiceStub.java,我們通過調用該文件實現客戶端訪問,大大簡化了調用 WebService 的步驟,並使代碼更加簡潔。但要注意的是,wsdl2java 命令生成的 Stub 類將 WebService 方法的參數都封裝在了相應的類中,類名為方法名,例如,sayHello 方法的參數都封裝在了 SayHello 類中,要想調用 sayHello 方法,必須先創建 SayHello 類的對象實例。
wsdl2java 參數詳解
命令行格式為:wsdl2java [options] -uri <url or path> : A url or path to a WSDL
其中常用的options具體如下:
-o <path> | 指定生成代碼的輸出路徑 |
-a | 生成異步模式的代碼 |
-s | 生成同步模式的代碼 |
-p <pkg> | 指定代碼的package名稱 |
-l <languange> | 使用的語言(Java/C) 默認是java |
-t | 為代碼生成測試用例 |
-ss | 生成服務端代碼默認不生成 |
-sd | 生成服務描述文件 services.xml,僅與-ss一同使用 |
-d <databinding> | 指定databingding,例如,adb,xmlbean,jibx,jaxme and jaxbri |
-g | 生成服務端和客戶端的代碼 |
-pn <port_name> | 當WSDL中有多個port時,指定其中一個port |
-sn <serv_name> | 選擇WSDL中的一個service |
-u | 展開data-binding的類 |
-r <path> | 為代碼生成指定一個repository |
-ssi | 為服務端實現代碼生成接口類 |
-S | 為生成的源碼指定存儲路徑 |
-R | 為生成的resources指定存儲路徑 |
--noBuildXML | 輸出中不生成build.xml文件 |
--noWSDL | 在resources目錄中不生成WSDL文件 |
--noMessageReceiver | 不生成MessageReceiver類 |