Android アプリケーションで EWS Java API v1.1.5 (http://archive.msdn.microsoft.com/ewsjavaapi) を使用しようとしていますが、多くの問題に遭遇しました。ソースをダウンロードし、提供された指示に従って EWS Java API を Eclipse でコンパイルしました。これらの手順では、次の前提条件の jar ファイルの依存関係をダウンロードして追加するように指示されています。
- commons-codec-1.4.jar
- commons-httpclient-3.1.jar
- commons-logging-1.1.1.jar
- jcifs-1.3.15.jar
私はこれを行い、ビルド手順に従って、次のjarファイルを作成しました。
- EWSAPI-1.1.0.jar
- EWSAPIWithJars-1.1.0
次に、まったく新しい Android アプリケーションを作成し、マニフェストに適切なアクセス許可を追加してから、次のソースをプライマリ アクティビティの OnCreate に追加しました。
ExchangeService service = new ExchangeService();
ExchangeCredentials credentials = new WebCredentials("emailaddress", "password");
service.setCredentials(credentials);
try
{
service.autodiscoverUrl("emailaddress", this);
}
catch (Exception e)
{
e.printStackTrace();
}
最初に、EWSAPI-1.1.0.jar ファイルを依存関係としてこのアプリケーションを実行してみました。それを行ったとき、次の致命的なエラーが発生しました。
キャッチされていないハンドラー: キャッチされていない例外 java.lang.NoClassDefFoundError: org.apache.commons.httpclient.MultiThreadedHttpConnectionManager が原因でスレッド メインが終了しています。 (不明なソース) microsoft.exchange.webservices.data.ExchangeService で。(不明なソース) com.meshin.exchange.ExchangeDiscoveryActivity.onCreate (ExchangeDiscoveryActivity.java:40) で
私が調査したところ、Android には Apache HttpClient 4.0 が付属しているため、このエラーが生成されているようです。この Apache HttpClient 4.0 には、MultiThreadedHttpConnectionManager クラスがもうないようです。
代わりに EWSAPI-1.1.0.jar を削除し、代わりに EWSAPIWithJARS-1.1.0.jar ファイルを依存関係として使用すると、次のエラーが発生します。
VFY: 静的メソッドを解決できません 908: Ljavax/xml/stream/XMLOutputFactory; newInstance()Ljavax/xml/stream/XMLOutputFactory; VFY: L のデッド コード 0x0008-006a microsoft/exchange/webservices/data/EwsUtilities;.formatLogMessage (Ljava/lang/String;Ljava/lang/String;) Ljava/lang/String; VFY: 署名で参照されているクラスが見つかりません (Ljavax/xml/stream/XMLStreamWriter;)
そして、やがて...
致命的な例外: main java.lang.VerifyError: microsoft.exchange.webservices.data.AutodiscoverService at microsoft.exchange.webservices.data.ExchangeService.getAutodiscoverUrl(Unknown Source) at microsoft.exchange.webservices.data.ExchangeService.autodiscoverUrl(Unknown Source) ) com.meshin.exchange.ExchangeDiscoveryActivity.onCreate (ExchangeDiscoveryActivity.java:41) で
これは、HttpClient 3.1 jar を含めており、Android ライブラリに含まれている HttpClient 4.0 jar と競合しているためだと思います。
私の質問は、4.0 ではなくなった HttpClient 3.1 固有のものを参照する部分を書き直すことなく、Android プロジェクトで EWS Java API を使用する方法があるかどうかです。