10

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 を使用する方法があるかどうかです。

4

3 に答える 3

7

次の手順を実行することで、Android 用の Microsoft の EWS API を使用できます。

  1. URL http://archive.msdn.microsoft.com/ewsjavaapi EWSJavaAPI_1.1.5.zipで入手可能なソース コードをダウンロードします。

  2. 上記の API に変更を加えて、Eclipse の JDK 1.4 で動作するようにします (オーバーライド アノテーションの削除など)。

  3. 以下の URL で入手可能な javax.* パッケージのソース コードをダウンロードします

  4. 以下の URL で入手可能な stax api のソース コードをダウンロードします

  5. Eclipse で単一の Java プロジェクトの下にすべてのソースを保持する

  6. プロジェクト エクスプローラーを開き、「 javax 」で始まるパッケージを選択し、名前を会社名に変更します (例: com ) 。注: Eclipse は、すべてのネーミング コンテキストを変更するように要求し、[OK] をクリックします。

  7. すべての Java ソースを 1 つの jar ファイルにエクスポートします。

  8. 次に、問題なく Android アプリケーションで jar を使用することをお勧めします。

上記で説明したのと同じ方法を使用しましたが、Android アプリケーションで 100% 完全に機能しました。

于 2012-09-12T09:05:32.743 に答える
0

解決策については、このライブラリを確認してください

于 2014-07-25T10:30:26.013 に答える
0

これは有用な答えではありませんが、私は過去数週間にわたって EWS API を調べるのに苦労してきましたが、うまくいきませんでした。私が見つけた主な問題は、Android にない多くの javax API を参照していることです。これらを「再分類」する方法を説明するハックがありますが、まだ機能していません。さらに、DnsClient は、jarsearches が rt.jar (メイン ランタイム) に対してのみ返すいくつかの名前空間を参照します。そして、これを Android アプリに含めるのはクレイジーです!

API を見つける前に、KSOAP を使用して EWS と通信しようとしましたが、再び問題が発生しました。NTLM と SSL を実行できる必要があり、これらすべてを簡単な方法で KSOAP と組み合わせる方法が見つかりませんでした。

EWS API は進むべき道のように見えますが (なぜ車輪を再発明する必要があるのか​​)、Android で動作させるのは非常に難しいようです (不可能ではないにしても)。

于 2012-02-13T10:02:10.497 に答える