EWSHttpException:未建立连接

时间:2014-06-23 14:50:06

标签: java exchangewebservices ewsjavaapi

我使用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));

我怀疑用于解释此错误的特定帐户配置,但我无法确定哪个参数。

3 个答案:

答案 0 :(得分:1)

这个例外几乎肯定是由于一个错误。我见过很多次。问题在于SimpleServiceRequest类。如果在读取响应时出现错误,它将关闭readResponse()中finally块中的响应。它将返回到internalExecute(),其中catch块将尝试处理标题...并尝试读取已关闭的响应。关闭不会使响应无效,但它会使响应中的某些数据无效,EWS会尝试读取这些数据以显示错误。然后你得到另一个异常,因为由于之前关闭了响应,连接为空。

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

答案 1 :(得分:0)

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

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

修改 如果您遇到302错误,那么稍后您可能会正确处理SSL证书。如果您调试API,您可能会看到其中一个

  
    

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

  

ServiceRequestBase.java中的堆栈错误。这意味着Truststore,某处找不到证书,或者找不到合适的地方。

<强>更新 检查在EwsJCIFSNTLMScheme类中设置的NTLM标志。我见过连接失败,因为这些标志设置错误。

使用像Fiddler这样的东西自动(并成功)验证到你的EWS实例,检查并查看NTLM标志的设置(通过在“Inspector”,“Auth”选项卡中解码授权:与Fiddler协商标题 - 它是一个32位的十六进制数),并将这些十六进制的标志发送到Type1和Type3消息构造函数。

答案 2 :(得分:0)

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