[英]Generating Java from WSDL for use on Android with ksoap2-android SOAP client?
我必須從 Android 應用程序訪問現有的 SOAP 網絡服務。 我已經獲得了一些描述網絡服務的 WSDL 文件。 在 SO 上閱讀其他一些答案,似乎ksoap2-android是要走的路,關於使用哪個 SOAP 客戶端。
下一個問題是如何從 WSDL 文件生成所需的 Java 類,這就是我要說的。 據我所知,有以下選項:
我最初嘗試 #1,使用 wsdl2code 生成器的 AXIS2 eclipse 插件。 該向導確實成功生成了大量 Java 代碼,但是它也將我的 android 項目更改為某種 webservice 項目,而且我永遠無法編譯生成的任何內容,更不用說使用 ksoap2-android 了。 有沒有人在這方面取得成功?
我無法成功運行 wsdl2ksoap,因為它似乎需要一個正在運行的 web 服務,而我目前擁有的只是 WSDL 文件。 同樣,從閱讀網頁來看,它似乎是一個處於初始階段的項目,並沒有真正准備好迎接黃金時段。
JAX-WS wsimport 我還沒有機會嘗試。 但是我不確定它生成的內容是否適用於 ksoap2-android?
問題:如何從 WSDL 文件生成 Java 文件,以便在帶有 ksoap2-android SOAP 客戶端庫的 Android 上使用?
非常感謝。
(PS:是的,選擇是 SOAP,它不是 Android 使用的最佳選擇,但我無法改變這一點。)
我發現這個工具可以自動生成 wsdl 到 android 代碼,
http://www.wsdl2code.com/example.aspx
這是代碼:
public void callWebService() {
SampleService srv1 = new SampleService();
Request req = new Request();
req.companyId = "1";
req.userName = "userName";
req.password = "pas";
Response response = srv1.ServiceSample(req);
}
我有類似的情況(我只有 wsdl 文件而沒有工作的 web 服務)。 我用過
為android生成類沒有任何問題。 該工具使用 ksoap 庫。 這個工具的偉大之處在於它支持 WCF 擴展和類型,如帶有 IsReference 屬性或 Guid 的數據協定。
經過大量研究后,我得出的結論是,不幸的是,沒有這樣的(成熟的)工具可用。 AXIS2 或 JAX-WS 都不能在 Android 上運行,而且 WSDL2ksoap 對於任何實際使用來說都太不成熟了。
然而,有一個名為wsclient++的專有工具可以很好地完成這項工作。 (閱讀下面的更新,當真正使用時,它根本站不住腳。)它沒有使用 ksoap2-android 客戶端庫,它有它自己的。
客戶端庫有點粗糙,因為它對 http 傳輸有很強的依賴性,使得(單元)測試有點復雜。 但是可以很容易地修改它以允許 DI,因為源在分布式 jar 文件中可用。
然而,wsdl 到 java 生成器的工作非常完美,將為我們節省大量時間。
更新使用wsclient++
一段時間后,很明顯生成的類真的很粗糙,根本不處理錯誤情況。 (每個方法都聲明throws Exception
)。
我們不再使用 wsclient++,我不建議任何人使用它! 不幸的是,我們還沒有真正找到任何可行的替代方案。 :/
最后,我們使用 AXIS2 轉換了 WSDL 文件,然后編寫了一堆自定義腳本,將生成的 java 文件剝離並轉換為使用 ksoap2-android 庫在 android 上構建的內容。 非常hackish,需要大量的體力勞動才能運行。 很遺憾。 如果您找到更好的方法,或者出現了,請提供新的答案。
這有點晚了,但是有一個 ksoap2 存根生成器正在開發中,我成功地用它來創建存根。
http://ksoap2-stub-gen.sourceforge.net/
也有人將其作為在線服務提供(即,您提供 WSDL 的 URL,該服務將返回一個包含存根的 zip 文件)。
http://www.davidgouveia.net/2011/04/online-stub-generator-for-android-applications-using-ksoap2/
我也曾在 iPhone 上使用過一些我想在這里看到的自動生成的類。
wsdl2code是我在 iPhone 上使用過的類似代碼之一。 給出一個帶有 wsdl 文件的 url,您將獲得一些要下載的類。 對我來說,最難的部分是下載所需的部分。 搜索時間超過 2 分鍾 :) ksoap2-android-assembly-3.0.0-jar-with-dependencies.jar
需要將廣告拖放到 ADT (Eclipse) 。 這非常簡單,特別是如果您在 iPhone 上使用過對應的版本。 - 我使用過的類似工具。
但是,就我而言,我對解決方案一點也不滿意,因為我看到我正在使用大炮,一組大炮來射擊麻雀。 在我的情況下,它應該使用 HTTP Post 並且不包括來自其他庫的依賴項。
老實說,我不太在意,因為一旦服務器端相信我們擁有無限的電池電量和無限的數據計划,我就會閉上眼睛,我不在乎使用 CPU(電池)的編組-解組開銷) 增加通過網絡傳輸的數據。
在更糟糕的情況下,它應該是 JSON + HTTP POST 而不是移動設備的 SOAP...
我建議與服務器端人員交談,並為他們解釋為什么如果他們在向導上單擊 2 次會不好,而我們在表單上進行其他單擊以獲取生成的代碼。 至少雖然應用程序不是一個巨大的應用程序,甚至應該是預算來優化移動一些接口的實現。
我使用 Apache CXF 工具來創建 dto,並且我編寫了一個類來執行基於元素名稱的基本解組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.