2012-02-03 43 views
29

我必須從Android應用程序訪問現有的SOAP Web服務。我已經提供了一些描述web服務的WSDL文件。讀一些other answers here on SO,似乎ksoap2-android是要走的路,關於哪個SOAP客戶端使用。使用kso​​ap2-android SOAP客戶端從WSDL生成Java以便在Android上使用?

下一個問題是,那麼如何從WSDL中生成文件所需的Java類,而這正是我的短來了。至於我可以看到有以下選項:

  1. AXIS2 code generator
  2. WSDL2ksoap
  3. JAX-WS wsimport tool

我最初嘗試#1,與Axis2的Eclipse插件的wsdl2code發電機。該向導成功地生成了很多Java代碼,但是它也將我的android項目更改爲某種web服務項目,並且我從來沒有能夠獲得任何生成的東西來編譯,更不用說使用kso​​ap2-android。有人有這個成功嗎?

我不能夠成功運行wsdl2ksoap,因爲它似乎需要一個正在運行的web服務,以及所有我必須在當前時間點是WSDL文件。同樣,從閱讀網頁,它似乎是一個項目在其初始階段,並沒有真正準備好黃金時段。

JAX-WS wsimport我還沒有機會嘗試。不過,我不確定它產生的東西是否適用於ksoap2-android?

問題:如何從WSDL文件生成Java文件,在Android上使用與ksoap2-的Android SOAP客戶端庫?

非常感謝。

(PS:是的,選擇的是SOAP,這是次優的Android應用,但我不能改變的)

+0

您是否成功生成了用於android的WSDL文件? – 2013-05-08 09:10:13

+0

@Jashan:最後我們使用AXIS2轉換了WSDL文件,然後編寫了一堆自定義腳本來剝離生成的java文件並將其轉換爲使用kso​​ap2-android庫在android上構建的文件。非常黑客,需要大量的體力勞動才能運行。不幸。如果您找到更好的方法,請告訴我。 :) – 2013-05-08 11:11:56

+0

謝謝,當然如果我找到了我會分享的東西.. :) – 2013-05-08 11:56:18

回答

10

相當多的研發後,我的結論是,有沒有這樣的(成熟的)工具可用,不幸的是。無論是AXIS2還是JAX-WS都不能在Android上工作,而WSDL2ksoap對於任何實際使用來說都太不成熟。

但是有一個叫wsclient++專有的工具,將做的工作非常好。 (閱讀下面的更新,當實際使用時,它根本無法保持距離。)它不使用kso​​ap2-android客戶端庫,它有它自己的。

客戶端庫是有點粗,因爲它有測試有點複雜上HTTP傳輸的硬依賴性,使得(單位)。但它可以很容易地修改爲允許DI,因爲源在分佈式jar文件中可用。

然而,java生成器的wsdl工作得很完美,並且會節省大量的時間。

更新wsclient++工作了一段時間後,很明顯的是,生成的類是真正的原油,並且不處理錯誤情況的。 (每種方法聲明throws Exception)。

我們不再使用wsclient ++,我不會建議任何人使用它! 不幸的是,我們還沒有找到任何可行的替代方案。 :/

最後我們使用AXIS2轉換了我們的WSDL文件,然後編寫了一堆自定義腳本來剝離和轉換生成的java文件,這些文件將使用kso​​ap2-android庫在android上構建。非常黑客,需要大量的體力勞動才能運行。不幸。如果您找到了更好的方法,或者找到了更好的方法,請提供新的答案。

+0

did you try wsdl2code? – Bennya 2013-08-20 04:12:06

+0

@Bjarke,我正試圖在Android上實現wsdl,你是否假裝出售你的wsclient ++的許可?我想試試看,wsdl2ksoap不是很好。 – Marckaraujo 2013-08-20 19:19:02

+1

這還是很麻煩嗎?還是有一些很好的工具,現在我們在2017 – 2017-08-17 08:32:44

0

我使用Apache CXF的工具只是爲了創造DTO,我寫了一類基於元素

0

有點晚於這個名執行基本解組,但有一個ksoap2存根發生器處於開發階段,我成功地用它來創建存根。

http://ksoap2-stub-gen.sourceforge.net/

也有人提出它作爲速效在線服務(即你給你的WSDL的URL,該服務將返回一個包含存根一個zip文件)。

http://www.davidgouveia.net/2011/04/online-stub-generator-for-android-applications-using-ksoap2/

+1

我不得不承認,當前版本(截至2012.04.23)相當蹩腳 - 它將無法正確生成某些複雜類型和數組的存根。 – 2012-04-23 15:22:51

+0

它似乎不再可用。 – Hong 2013-04-07 22:16:12

+0

@Hong剛剛測試過它,並且可以下載和在線版本。 – 2013-04-09 08:32:36

13

,我發現這個工具來自動生成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); 
} 
+1

,但這僅適用於.net Web服務 – mutkan 2013-05-09 07:25:05

+1

它也可以與其他網絡服務一起使用,除了肥皂方法名稱 – Bennya 2013-05-15 07:32:30

+0

之類的小改動外,該工具非常不可思議,爲我節省了大量時間。我是一個粉絲。 – MikeS 2013-08-13 19:01:10

1

我已經使用iPhone過於一些汽車我也想在這裏看到這些生成的課程。

wsdl2code是我在iPhone上使用的類似之一。給wsdl文件一個網址,你會得到一些類下載。對我來說,最難的部分就是下載所需的部件。它需要超過2分鐘的搜索:) ksoap2-android-assembly-3.0.0-jar-with-dependencies.jar需要下載廣告拖放到ADT(Eclipse)。這是非常容易的,特別是如果你已經使用iPhone的對手。 - 我用過的一個類似的工具。

但是在我的情況下,我對解決方案並不滿意,因爲我看到我正在使用大炮,一組大炮來射擊麻雀。在我的情況下,它應該使用HTTP Post並且不包括來自其他庫的依賴項。

說實話,我不在乎太多,因爲一旦服務器端相信,我們擁有無限的動力電池和無限數據計劃,比我閉上雙眼,我不關心編組,解編的開銷,其中使用CPU(電池)增加通過網絡傳輸的數據。

在更糟糕的情況下,它應該是一個手機+ JSON HTTP POST不能用肥皂...

我建議在服務器端的人說話,他們解釋爲什麼它不會好,如果他們這樣做2點擊向導,我們會通過其他方式單擊表單來獲取生成的代碼。至少在應用程序不是一個巨大的應用程序時,甚至應該爲預算來優化移動接口的一些實現。

11

我有類似的情況(我只有wsdl文件沒有工作的webservice)。我用

http://easywsdl.com/

產生的Android類沒有任何問題。該工具使用kso​​ap庫。這個工具最棒的地方在於它支持WCF擴展和類型,如與IsReference屬性或Guid的數據契約。