簡體   English   中英

從 WSDL 生成 Java 以在帶有 ksoap2-android SOAP 客戶端的 Android 上使用?

[英]Generating Java from WSDL for use on Android with ksoap2-android SOAP client?

我必須從 Android 應用程序訪問現有的 SOAP 網絡服務。 我已經獲得了一些描述網絡服務的 WSDL 文件。 在 SO 上閱讀其他一些答案,似乎ksoap2-android是要走的路,關於使用哪個 SOAP 客戶端。

下一個問題是如何從 WSDL 文件生成所需的 Java 類,這就是我要說的。 據我所知,有以下選項:

  1. AXIS2 代碼生成器
  2. WSDL2ksoap
  3. JAX-WS wsimport 工具

我最初嘗試 #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 服務)。 我用過

http://easywsdl.com/

為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM