1

我正在使用 EWS Java API 连接 Exchange 服务器并检索有关邮件、日历约会和任务的信息。

除了一个帐户外,它适用于很多用户。我收到以下错误:

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课堂上。如果读取响应时出现错误,它将在 finally 块中关闭响应readResponse()。它将回到internalExecute(),catch 块将尝试处理标头...并尝试读取已关闭的响应。关闭不会取消响应,但会取消响应中的一些数据,EWS 会尝试读取这些数据以显示错误。然后您会得到另一个异常,因为由于响应较早关闭而导致连接为空。

解决方案是自己修复错误或启用跟踪并查看响应以查看您正在处理的错误类型。此外,为了更好地衡量,请确保Strings该类正在读取Strings.properties文件,否则当它找不到某些错误消息时它会抛出不同的异常。

于 2014-06-25T19:09:56.327 回答
0

在使用调试器和 Fiddler 之后,我看到此错误的一种方式是来自 HTTP 302 错误(服务器说链接已永久移动到https:位置,而不是几乎相同的http:位置)。

我猜测 Java EWS API 没有正确使用安全套接字层(并且正在尝试发送到 HTTP url 而不是 HTTPS url)。

编辑 如果您通过了 302 错误,那么您以后在正确处理 SSL 证书时可能会遇到问题。如果您调试 API,您可能会看到其中之一

“PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径”

ServiceRequestBase.java 中的堆栈错误。这意味着某个信任库在某处找不到证书,或者它没有在正确的位置查找。

更新 检查在 EwsJCIFSNTLMScheme 类中设置了哪些 NTLM 标志。我看到连接失败是因为这些标志设置错误。

使用 Fiddler 之类的东西自动(并成功)验证您的 EWS 实例,检查并查看设置了哪些 NTLM 标志(通过在“Inspectors”、“Auth”选项卡中解码 Authorization: Negotiate headers with Fiddler - 这是一个 32-位十六进制数),并将这些十六进制值的标志发送到 Type1 和 Type3 消息构造函数。

于 2014-07-16T20:13:07.423 回答
0

我在中国也有同样的错误。我认为是 ews-java-api 错误。所以我检查了 github.com,我看到作者 Victor Boctor 更新了脚本。所以我想它也许可以修复这个错误。所以尝试编译源代码,当然,它修复了这个错误。~_~ 感谢维克多·博克特

于 2014-12-16T05:46:06.963 回答