ews-java-api: ServiceRequestException: The request failed. 40
When invoking the following code in 2 running threads:-
@Override
public Set<ExchangeAppointmentBean> query(final String calendarEmail,
final LocalDate startDate,
final LocalDate endDate) {
final ExchangeService service;
final FindItemsResults<Appointment> findResults;
final ExchangeCredentials credentials = new WebCredentials("user", "pwd");
try {
service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
service.setCredentials(credentials);
service.setUrl(new URI("https://hostname/ews/exchange.asmx"));
final FolderId folderId = new FolderId(WellKnownFolderName.Calendar, new Mailbox(calendarEmail));
final CalendarFolder calendarFolder = CalendarFolder.bind(service, folderId);
final CalendarView calendarView = new CalendarView(startDate.toDate(), endDate.toDate());
findResults = calendarFolder.findAppointments(calendarView);
}
catch (Exception e) {
throw CommonUtils.createException(LOGGER, e, "Unexpected error occurred when querying Exchange Server");
}
....
service.close();
}
… I get this error from the try-catch block:-
Caused by: microsoft.exchange.webservices.data.core.exception.service.remote.ServiceRequestException: The request failed. 40
at microsoft.exchange.webservices.data.core.request.SimpleServiceRequestBase.internalExecute(SimpleServiceRequestBase.java:74)
at microsoft.exchange.webservices.data.core.request.MultiResponseServiceRequest.execute(MultiResponseServiceRequest.java:158)
at microsoft.exchange.webservices.data.core.ExchangeService.bindToFolder(ExchangeService.java:500)
at microsoft.exchange.webservices.data.core.ExchangeService.bindToFolder(ExchangeService.java:519)
at microsoft.exchange.webservices.data.core.service.folder.CalendarFolder.bind(CalendarFolder.java:60)
at microsoft.exchange.webservices.data.core.service.folder.CalendarFolder.bind(CalendarFolder.java:75)
at myproject.module.pto.service.impl.MicrosoftExchangeServiceImpl.query(MicrosoftExchangeServiceImpl.java:78)
... 6 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: 40
at org.apache.http.impl.auth.NTLMEngineImpl$NTLMMessage.addByte(NTLMEngineImpl.java:911)
at org.apache.http.impl.auth.NTLMEngineImpl$NTLMMessage.addULong(NTLMEngineImpl.java:940)
at org.apache.http.impl.auth.NTLMEngineImpl$Type1Message.getResponse(NTLMEngineImpl.java:1043)
at org.apache.http.impl.auth.NTLMEngineImpl.getType1Message(NTLMEngineImpl.java:148)
at org.apache.http.impl.auth.NTLMEngineImpl.generateType1Msg(NTLMEngineImpl.java:1628)
at org.apache.http.impl.auth.NTLMScheme.authenticate(NTLMScheme.java:139)
at org.apache.http.impl.auth.AuthSchemeBase.authenticate(AuthSchemeBase.java:138)
at org.apache.http.impl.auth.HttpAuthenticator.doAuth(HttpAuthenticator.java:239)
at org.apache.http.impl.auth.HttpAuthenticator.generateAuthResponse(HttpAuthenticator.java:202)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:262)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at microsoft.exchange.webservices.data.core.request.HttpClientWebRequest.executeRequest(HttpClientWebRequest.java:292)
at microsoft.exchange.webservices.data.core.request.ServiceRequestBase.getEwsHttpWebResponse(ServiceRequestBase.java:720)
at microsoft.exchange.webservices.data.core.request.ServiceRequestBase.validateAndEmitRequest(ServiceRequestBase.java:639)
at microsoft.exchange.webservices.data.core.request.SimpleServiceRequestBase.internalExecute(SimpleServiceRequestBase.java:62)
About this issue
- Original URL
- State: open
- Created 9 years ago
- Comments: 21 (4 by maintainers)
Commits related to this issue
- Make ExchangeService more or less thread safe HttpClientContext isn't thread safe, and isn't meant for reuse, so create a new one each time it's needed Use a shared cookied store per ExchangeService ... — committed to candrews/ews-java-api by candrews 9 years ago
- Make ExchangeService more or less thread safe HttpClientContext isn't thread safe, and isn't meant for reuse, so create a new one each time it's needed Use a shared cookied store per ExchangeService ... — committed to NetCitadel/ews-java-api by candrews 9 years ago
- GH-371: Implement semi thread-safe NTLMScheme class to fix threading issue of EWS The additional NTLM* classes are used for fixing a threading issue described in GH-371. Access to the EWS API with mu... — committed to schakko/ews-java-api by deleted user 9 years ago
- Merge remote-tracking branch 'remotes/schakko/gh-371-make-ews-thread-safe' Conflicts: pom.xml src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java — committed to wwahmed/ews-java-api by wwahmed 8 years ago
- Merge remote-tracking branch 'remotes/schakko/gh-371-make-ews-thread-safe' — committed to wwahmed/ews-java-api by wwahmed 8 years ago
Has anyone tried upgrading httpclient to 4.5.2 to fix the problem?
http://www.apache.org/dist/httpcomponents/httpclient/RELEASE_NOTES-4.5.x.txt [HTTPCLIENT-1715] NTLMEngineImpl#Type1Message not thread safe but declared as a constant. The issue was resolved in February 2016.