Java EWSHttpException:未建立连接

Java EWSHttpException:未建立连接,java,exchangewebservices,ewsjavaapi,Java,Exchangewebservices,Ewsjavaapi,我正在使用EWS Java API连接Exchange服务器并检索有关邮件、日历约会和任务的信息 除了一个帐户外,它在很多用户中运行良好。 我得到了以下错误: microsoft.exchange.webservices.data.EWSHttpException: Connection not established at microsoft.exchange.webservices.data.HttpClientWebRequest.throwIfConnIsNull(HttpClientW

我正在使用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));
ExchangeService服务=新的ExchangeService();
ExchangeCredentials凭证=新的WebCredentials(,);
服务。设置凭据(凭据);
setUrl(新的URI(url));

我怀疑是某个特定的帐户配置解释了这个错误,但我无法确定是哪个参数。

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


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

在使用调试器和Fiddler之后,我发现这个错误来自HTTP 302错误(服务器表示链接已永久移动到https:位置,而不是几乎相同的http:位置)

我猜JavaEWSAPI没有正确使用安全套接字层(并且试图发送到HTTP url而不是HTTPS url)

编辑 如果您通过了302错误,那么您很可能在以后正确处理SSL证书时遇到问题

“PKIX路径生成失败:sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径”

ServiceRequestBase.java中堆栈中的错误。这意味着某个地方的信任库找不到证书,或者找不到正确的位置

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


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

我在中国也有同样的错误。我认为这是ews java api错误。因此我查看了github.com,我看到作者Victor Boctor更新了scrip。因此我认为它可能可以修复此错误。因此,请尝试编译源代码,当然,它修复了此错误。~\或者

您是否介意分享您修复错误的方法?响应是否应该为空,这样它就不会在internalExecute()中处理,或者响应是否永远不会在readResponse()中关闭,这样它就可以在internalExecute()中使用由于不太了解EWS Java API的内部工作原理,如果有人能分享一个安全的解决方案,而不会对其他逻辑产生任何副作用,我将不胜感激。请告诉我们如何解决这个问题,我可以获得房间,但当我试图获得service.userAvailability时,它显示了连接未建立…以前我能够获取数据,但现在它的连接未建立。谢天谢地,我建议检查github页面,因为EWS Java是去年开源的。我相信这个bug(以及其他bug)已经修复。