1

EWS Java API を使用して Exchange サーバーに接続し、メール、カレンダーの予定、およびタスクに関する情報を取得しています。

1 つのアカウントを除いて、多くのユーザーでうまく機能しています。次のエラーが発生しました:

microsoft.exchange.webservices.data.EWSHttpException: Connection not established
at microsoft.exchange.webservices.data.HttpClientWebRequest.throwIfConnIsNull(HttpClientWebRequest.java:394)
at microsoft.exchange.webservices.data.HttpClientWebRequest.getResponseHeaders(HttpClientWebRequest.java:280)
at microsoft.exchange.webservices.data.ExchangeServiceBase.processHttpResponseHeaders(ExchangeServiceBase.java:1045)
at microsoft.exchange.webservices.data.SimpleServiceRequestBase.internalExecute(SimpleServiceRequestBase.java:58)
at microsoft.exchange.webservices.data.MultiResponseServiceRequest.execute(MultiResponseServiceRequest.java:144)
at microsoft.exchange.webservices.data.ExchangeService.bindToFolder(ExchangeService.java:350)
at microsoft.exchange.webservices.data.ExchangeService.bindToFolder(ExchangeService.java:374)

接続を確立するコードは次のとおりです。

ExchangeService service = new ExchangeService();
ExchangeCredentials credentials = new WebCredentials(<user>, <password>);

service.setCredentials(credentials);
service.setUrl(new URI(url));

このエラーを説明する特定のアカウント構成が疑われますが、どのパラメーターを特定できません。

4

3 に答える 3

1

その例外は、ほぼ間違いなくバグによるものです。私はそれを何度も何度も見ました。問題はSimpleServiceRequestクラスにあります。応答の読み取り中にエラーが発生した場合は、最終ブロックで応答を閉じreadResponse()ます。に戻りinternalExecute()、catch ブロックがヘッダーを処理しようとします...そして、閉じられた応答を読み取ろうとします。終了しても応答が無効になることはありませんが、エラーを表示するために EWS が読み取ろうとする応答内の一部のデータが無効になります。次に、応答が以前に閉じられたために接続が null であるため、別の例外が発生します。

解決策は、自分でバグを修正するか、トレースを有効にして応答を見て、対処しているエラーの種類を確認することです。また、適切な測定のために、Stringsクラスがファイルを読み取っていることを確認してStrings.propertiesください。そうしないと、特定のエラー メッセージが見つからない場合に別の例外がスローされます。

于 2014-06-25T19:09:56.327 に答える
0

デバッガーと Fiddler を使用した後、このエラーが HTTP 302 エラーから発生するのを確認しました (サーバーは、リンクがほぼ同じhttp:の場所ではなく、 https:の場所に完全に移動されたと言っています)。

Java EWS API が Secure Sockets Layer を正しく使用していない (そして、HTTPS URL ではなく HTTP URL に送信しようとしている) と推測します。

EDIT 302 エラーが発生した場合は、後で SSL 証明書を適切に処理する際に問題が発生する可能性があります。API をデバッグすると、それらのいずれかを確認できる場合があります

「PKIX パスの構築に失敗しました: sun.security.provider.certpath.SunCertPathBuilderException: 要求されたターゲットへの有効な証明書パスが見つかりません」

ServiceRequestBase.java のスタックにエラーが発生します。これは、トラストストアのどこかに証明書が見つからないか、適切な場所を探していないことを意味します。

更新 EwsJCIFSNTLMScheme クラスでどの NTLM フラグが設定されているかを確認します。これらのフラグが間違って設定されているために接続が失敗するのを見てきました。

Fiddler のようなものを使用して、EWS インスタンスに自動的に (そして正常に) 認証し、どの NTLM フラグが設定されているかを確認して確認します (Authorization: Negotiate headers with Fiddler in the "Inspectors", "Auth" tab - it's a 32-ビット 16 進数) を作成し、これらの 16 進数値のフラグを Type1 および Type3 メッセージ コンストラクターに送信します。

于 2014-07-16T20:13:07.423 に答える
0

中国でも同じエラーが発生しました。ews-java-api のバグだと思います。github.com をチェックすると、作者の Victor Boctor が scrip を更新しているのが分かります。おそらくこのバグを修正できると思います。コンパイルしてみてください。ソースコード、そして確かに、それはこのバグを修正します。~_~ ビクター・ボクターに感謝

于 2014-12-16T05:46:06.963 に答える