2013-04-05 1 views
8

우리는 Java 응용 프로그램에서 Outlook 일정을 사용하기 위해 EWS Java API를 사용하고 있습니다. EWS에 인증 문제가 있습니다.EWS Java API를 인증하는 방법

랙 스페이스에서 제공하는 클라우드 아웃룩 계정에서 애플리케이션을 시험해 보았습니다. 모든 것이 올바르게 작동하므로 신임 정보가 정확하다는 것을 알고 있습니다. 여기

코드입니다 :

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(); 
     } 

    } 

} 

랙 스페이스의 URL은 다음과 같습니다 https://connect.emailsrvr.com/EWS/Exchange.asmx 나는이 계정의 사용자 이름과 비밀번호를 넣고 그것이 내가이 하나의 콘솔 침을 참조 작동 :

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

클라이언트가 ExchangeVersion.Exchange2007_SP1을 사용하고 있는데 반해 Rackspace는 ExchangeVersion.Exchange2010을 사용하지만 클라이언트가 제공 한 자격 증명 (사용자 이름, 암호 및 URL)을 사용하면이 오류가 발생합니다.

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) 

이 문제에 대한 해결책을 찾을 수 없습니다. EWS에 대한 인증을받을 수 있다고 생각하는 정보를 제공해주십시오. 이 예외의 원인은 무엇입니까?

+0

rockspace EWS는 인증을 위해 NTLM을 사용하는 것으로 보입니다. 클라이언트는 Eclipse의 콘솔 출력에서 ​​볼 수있는 것처럼 Basic을 사용하고 있습니다. – leventend

+0

그들은 기본 인증에서 NTLM 인증으로 변경할 의사가 없습니다. – leventend

+0

그들은 결국 기본에서 NTLM으로 인증을 변경했으며 현재 작동합니다. 음, 최소한 캘린더에서 약속을 가져올 수는 있지만 만들 수는 없습니다. 그래도 클라우드 계정으로 약속을 만들 수 있습니다. 어떻게 든 그걸 알아낼 것입니다. 하지만 최소한 문제는 코드가 아니라 서버 측 인증 문제였습니다. – leventend

답변

3

나는 똑같은 오류가있어서 그것을 고치려고 5 시간을 낭비했습니다. 결론적으로, EWS 코드베이스를 작동 시키려고 노력할 때 더 많은 시간을 낭비해서는 안되며, EWS 코드가 혼란스럽고, 라이브러리의 버그를 수정하기 위해 들어가야 할 것입니다.

내가 필요한 것을 수행하는 javax.mail 구현을 사용하여 해결했습니다. https://stackoverflow.com/a/18043717/445131