2013-04-05 27 views
8

Chúng tôi đang sử dụng API Java EWS để sử dụng lịch xem trên ứng dụng Java của chúng tôi. Tôi đang gặp sự cố xác thực trên EWS.Cách xác thực EWS Java API

Tôi đã thử ứng dụng trên tài khoản triển vọng đám mây được cung cấp bởi rackspace và mọi thứ hoạt động tốt để tôi biết thông tin đăng nhập là chính xác.

Đây là mã:

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 cho Rackspace là: https://connect.emailsrvr.com/EWS/Exchange.asmx Khi tôi đặt tên người dùng và mật khẩu cho tài khoản này và nó hoạt động, tôi thấy giao diện điều khiển khạc nhổ ra cái này:

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

Khách hàng của chúng tôi đang sử dụng ExchangeVersion.Exchange2007_SP1 trong khi Rackspace đang sử dụng ExchangeVersion.Exchange2010 Nhưng khi tôi sử dụng thông tin xác thực (tên người dùng, mật khẩu và url) mà khách hàng của chúng tôi cung cấp, tôi gặp lỗi này:

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) 

Tôi không thể tìm thấy giải pháp nào cho vấn đề này. Vui lòng cung cấp bất kỳ thông tin nào mà bạn cho rằng tôi có thể được xác thực cho EWS. Điều gì gây ra những ngoại lệ này?

+0

không gian đá EWS dường như đang sử dụng NTLM để xác thực và máy khách đang sử dụng Cơ bản vì nó có thể được nhìn thấy từ các kết quả đầu ra của bàn điều khiển trên Eclipse. – leventend

+0

Và họ không sẵn sàng thay đổi xác thực của họ từ Cơ bản sang NTLM cho chúng tôi. – leventend

+0

Cuối cùng họ đã thay đổi xác thực từ Basic thành NTLM, và nó hoạt động ngay bây giờ. Vâng, ít nhất tôi có thể kéo các cuộc hẹn trong Lịch nhưng tôi không thể tạo ra chúng. Tôi có thể tạo các cuộc hẹn trên tài khoản đám mây. Tôi sẽ tìm ra cái đó bằng cách nào đó. Nhưng ít nhất tôi đã học được rằng vấn đề không phải là mã, đó là vấn đề xác thực phía máy chủ. – leventend

Trả lời

3

Tôi đã gặp lỗi chính xác và lãng phí 5 giờ cố sửa lỗi. Kết luận của tôi là bạn không nên lãng phí nhiều thời gian hơn khi cố gắng để mã EWS hoạt động, mã EWS bị nhầm lẫn và bạn sẽ phải đi vào dưới mui xe để sửa các lỗi trong thư viện đó.

Tôi đã quyết định sử dụng triển khai javax.mail để thực hiện những gì tôi cần. https://stackoverflow.com/a/18043717/445131

Các vấn đề liên quan