SOAPアプリケーションから既存のAndroid Webサービスにアクセスする必要があります。 Webサービスを説明するWSDLファイルがいくつか提供されました。いくつかの SOに関する他の回答 を読むと、 ksoap2-Android が、どのSOAPクライアントを使用するかに関して、進むべき道であるように見えます。
次の問題は、WSDLファイルから必要なJavaクラスを生成する方法です。これが私が不足しているところです。私が見る限り、次のオプションがあります:
最初に、wsdl2codeジェネレーター用のAXIS2 Eclipseプラグインで#1を試しました。ウィザードは多くのJavaコードを正常に生成しましたが、Androidプロジェクトをある種のWebサービスプロジェクトに変更し、生成されたものをコンパイルすることができませんでした、もちろんksoap2-Androidで動作します。誰かがこれで成功していますか?
実行中のWebサービスが必要と思われるため、wsdl2ksoapを正常に実行することはできません。現在のところ、WSDLファイルしかありません。同様に、ウェブページを読むことから、それは初期段階のプロジェクトのようであり、プライムタイムの準備が本当に整っていないようです。
JAX-WS wsimportまだ試してみる機会がありません。しかし、生成されたものがksoap2-androidで機能するかどうかはわかりませんか?
質問:Javaでksoap2-Android Androidクライアントライブラリを使用するために、WSDLファイルからSOAPファイルを生成する方法?
事前に感謝します。
(PS:はい、選択はSOAPです。Androidの使用には最適ではありませんが、変更することはできません。)
かなりの時間をかけて研究した結果、残念ながら、そのような(成熟した)ツールはありません。 AXIS2もJAX-WSもAndroidでは動作せず、WSDL2ksoapは実際の使用には未熟すぎます。
ただし、 wsclient ++ と呼ばれる独自のツールがあり、これは非常にうまく機能します。 (以下のアップデートをお読みください。実際に使用する場合、距離にまったく耐えられません。)ksoap2-Androidクライアントライブラリを使用せず、独自のものを持っています。
クライアントライブラリは、HTTPトランスポートに強く依存しているため、(ユニット)テストが少し複雑になるため、少し粗雑です。ただし、ソースは分散jarファイルで利用できるため、DIを許可するために非常に簡単に変更できます。
ただし、wsdl to Javaジェネレーターは完璧に機能し、時間を大幅に節約します。
Updateしばらくwsclient++
を操作した後、生成されたクラスが本当に粗雑であり、エラーのケースをまったく処理しないことは明らかです。 。 (すべてのメソッドはthrows Exception
を宣言します)。
もうwsclient ++を使用していないので、誰にも使用しないことをお勧めします! :/
最後に、AXIS2を使用してWSDLファイルを変換し、生成されたJavaファイルを削除してksoap2-Androidライブラリを使用してAndroidにビルドするものに変換するカスタムスクリプトを作成しました。非常にハック的で、実行するには大量の手作業が必要です。残念ながら。より良い方法を見つけた場合、または何かが現れた場合は、新しい答えを提供してください。
このツールは、Android code、
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);
}
同様の状況がありました(Webサービスが動作せずにwsdlファイルしかありませんでした)。私は使った
Android問題なくこのクラスを生成します。このツールはksoapライブラリを使用します。このツールの優れた点は、IsReference属性またはGuidとのデータコントラクトなどのタイプをサポートすることです。
私もここで見たかったいくつかの自動生成されたクラスをiPhoneに使用しました。
wsdl2code は、私がiPhoneで使用したものの1つです。 wsdlファイルでURLを指定すると、いくつかのクラスをダウンロードできます。私にとって最も難しい部分は、必要な部分をダウンロードすることでした。検索に2分以上かかりました:) ksoap2-Android-Assembly-3.0.0-jar-with-dependencies.jar
広告のドラッグアンドドロップをADT(Eclipse)にダウンロードする必要がありました。特にiPhoneでカウンターパートを使用している場合は、非常に簡単です。 -私が使用した同様のツール。
しかし、私の場合は、スズメを撃つために大砲のセットである大砲を使用しているので、解決策にまったく満足していません。私の場合、HTTP Postを使用し、他のライブラリからの依存関係は含めないでください。
正直なところ、サーバー側が無制限のバッテリー電力と無制限のデータプランを持っていると思うと、目を閉じて、CPU(バッテリー)ネットワーク経由で送信されるデータを増やします。
最悪の場合は、JSON + HTTP POST not SOAPモバイル向け...
サーバーサイドの人と話をして、ウィザードを2回クリックし、生成されたコードを取得するためにフォームをクリックするのがうまくいかない理由を説明することをお勧めします。少なくともアプリケーションは巨大なものではありませんが、モバイル向けにいくつかのインターフェースの実装を最適化するための予算であるべきです。
これには少し遅れましたが、開発中のksoap2スタブジェネレーターがあり、それを使用してスタブを作成できました。
http://ksoap2-stub-gen.sourceforge.net/
また、誰かがオンラインサービスとして利用できるようにしました(つまり、WSDLのURLを指定すると、サービスはスタブを含むZipファイルを返します)。
http://www.davidgouveia.net/2011/04/online-stub-generator-for-Android-applications-using-ksoap2/
Dtoを作成するためだけにApache CXFツールを使用し、要素の名前に基づいて基本的なアンマーシャリングを実行するクラスを作成しました