2013-04-05 7 views
8

Wir verwenden EWS Java API, um den Outlook-Kalender in unserer Java-Anwendung zu verwenden. Ich habe Authentifizierungsprobleme bei EWS.Wie authentifiziere ich EWS Java API?

Ich habe versucht, die Anwendung auf dem Cloud Outlook-Konto, das von Rackspace geliefert wird und alles funktioniert gut, so dass ich weiß, dass die Anmeldeinformationen genau sind. Hier

ist der Code:

import java.net.URI; 
import java.net.URISyntaxException; 
import microsoft.exchange.webservices.data.*; 

public class TestClass { 

    public static void main(String[] args) { 
     TestClass obj = new TestClass(); 
     obj.testMethod(); 
    } 

    public void testMethod() { 
     ExchangeService service = new ExchangeService(
       ExchangeVersion.Exchange2007_SP1); 
     ExchangeCredentials credentials = new WebCredentials("username", 
       "password"); 

     service.setCredentials(credentials); 

     try { 
      service.setUrl(new URI("https://domain/EWS/Exchange.asmx")); 
     } catch (URISyntaxException e) { 
      e.printStackTrace(); 
     } 

     EmailMessage msg; 
     try { 
      msg = new EmailMessage(service); 
      msg.setSubject("hello world"); 
      msg.setBody(MessageBody 
        .getMessageBodyFromText("Sent using the EWS API")); 
      msg.getToRecipients().add("[email protected]"); 
      msg.send(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 

} 

Die URL für Rackspace ist: https://connect.emailsrvr.com/EWS/Exchange.asmx Wenn ich den Benutzernamen und das Kennwort für dieses Konto setzen und es funktioniert, sehe ich die Konsole spuckt diese ein:

Apr 05, 2013 1:40:28 PM org.apache.commons.httpclient.auth.AuthChallengeProcessor selectAuthScheme 
INFO: NTLM authentication scheme selected 

Unser Client verwendet ExchangeVersion.Exchange2007_SP1, während Rackspace ExchangeVersion.Exchange2010 verwendet. Wenn ich jedoch die von unserem Client bereitgestellten Anmeldeinformationen (Benutzername, Kennwort und URL) verwende, erhalte ich folgende Fehlermeldung:

Apr 05, 2013 1:49:13 PM org.apache.commons.httpclient.auth.AuthChallengeProcessor selectAuthScheme 
INFO: Basic authentication scheme selected 
Apr 05, 2013 1:49:13 PM org.apache.commons.httpclient.HttpMethodDirector processAuthenticationResponse 
SEVERE: Invalid challenge: Basic 
org.apache.commons.httpclient.auth.MalformedChallengeException: Invalid challenge: Basic 
at org.apache.commons.httpclient.auth.AuthChallengeParser.extractParams(AuthChallengeParser.java:98) 
at org.apache.commons.httpclient.auth.RFC2617Scheme.processChallenge(RFC2617Scheme.java:94) 
at org.apache.commons.httpclient.auth.BasicScheme.processChallenge(BasicScheme.java:112) 
at org.apache.commons.httpclient.auth.AuthChallengeProcessor.processChallenge(AuthChallengeProcessor.java:162) 
at org.apache.commons.httpclient.HttpMethodDirector.processWWWAuthChallenge(HttpMethodDirector.java:694) 
at org.apache.commons.httpclient.HttpMethodDirector.processAuthenticationResponse(HttpMethodDirector.java:668) 
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:193) 
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) 
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323) 
at microsoft.exchange.webservices.data.HttpClientWebRequest.executeRequest(HttpClientWebRequest.java:358) 
at microsoft.exchange.webservices.data.ServiceRequestBase.getEwsHttpWebResponse(ServiceRequestBase.java:930) 
at microsoft.exchange.webservices.data.ServiceRequestBase.validateAndEmitRequest(ServiceRequestBase.java:825) 
at microsoft.exchange.webservices.data.SimpleServiceRequestBase.internalExecute(SimpleServiceRequestBase.java:46) 
at microsoft.exchange.webservices.data.MultiResponseServiceRequest.execute(MultiResponseServiceRequest.java:144) 
at microsoft.exchange.webservices.data.ExchangeService.internalCreateItems(ExchangeService.java:464) 
at microsoft.exchange.webservices.data.ExchangeService.createItem(ExchangeService.java:535) 
at microsoft.exchange.webservices.data.Item.internalCreate(Item.java:215) 
at microsoft.exchange.webservices.data.EmailMessage.internalSend(EmailMessage.java:125) 
at microsoft.exchange.webservices.data.EmailMessage.send(EmailMessage.java:253) 
at com.aurora.trials.TestClass.testMethod(TestClass.java:43) 
at com.aurora.trials.TestClass.main(TestClass.java:17) 

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.internalCreateItems(ExchangeService.java:464) 
at microsoft.exchange.webservices.data.ExchangeService.createItem(ExchangeService.java:535) 
at microsoft.exchange.webservices.data.Item.internalCreate(Item.java:215) 
at microsoft.exchange.webservices.data.EmailMessage.internalSend(EmailMessage.java:125) 
at microsoft.exchange.webservices.data.EmailMessage.send(EmailMessage.java:253) 
at com.aurora.trials.TestClass.testMethod(TestClass.java:43) 
at com.aurora.trials.TestClass.main(TestClass.java:17) 

Ich konnte keine Lösung für dieses Problem finden. Bitte geben Sie alle Informationen an, von denen Sie glauben, dass sie für EWS authentifiziert werden können. Was verursacht diese Ausnahmen?

+0

Der EWS von Rockspace scheint NTLM für die Authentifizierung zu verwenden, und der Client verwendet Basic, wie aus den Konsolenausgaben auf Eclipse hervorgeht. – leventend

+0

Und sie sind nicht bereit, ihre Authentifizierung von Basic zu NTLM für uns zu ändern. – leventend

+0

Sie haben schließlich die Authentifizierung von Basic zu NTLM geändert, und es funktioniert jetzt. Nun, zumindest kann ich die Termine im Kalender ziehen, aber ich kann sie nicht erstellen. Ich kann jedoch die Termine auf dem Cloud-Konto erstellen. Ich werde das irgendwie herausfinden. Aber zumindest habe ich gelernt, dass das Problem nicht der Code war, sondern das serverseitige Authentifizierungsproblem. – leventend

Antwort

3

Ich hatte genau die gleichen Fehler und verschwendete 5 Stunden, um es zu reparieren. Meine Schlussfolgerung ist, dass Sie nicht mehr Zeit verschwenden sollten, um die EWS-Codebasis zum Funktionieren zu bringen, der EWS-Code ist verwirrt und Sie müssen unter die Haube gehen, um Fehler in dieser Bibliothek zu beheben.

Ich entschied mich für die Verwendung von javax.mail Implementierung, die das tut, was ich brauche. https://stackoverflow.com/a/18043717/445131

Verwandte Themen