Я пытаюсь экспортировать/импортировать контакты google с помощью gdata + Oauth2 в своем веб-приложении. Приложение имеет клиентскую сторону на стороне js и java-сервера, обмениваясь данными через REST API. Сторона js выполняет auathorization через google, получая следующие данные
{
state:"38c4ebb6-b763-4e98-969c-16a86221ec71",
access_token:"ya29.BwEGCaDeWTzGqIwewwlmWreAMZdgNNexN1efOVGDcyY0f-gzXUot51F-Tzy5BX39CwGpbrL3JGjQ",
token_type:"Bearer",
expires_in:"3600"
}
Я пытаюсь использовать access_token, чтобы получить контакты следующим образом
ContactsService myService = new ContactsService(APP_NAME);
myService.setHeader("Authorization", "Bearer " + accessToken);
return GoogleDataUtils.getContactList(getContactFeed(myService));
где
private ContactFeed getContactFeed(ContactsService myService) throws ServiceException, IOException {
URL feedUrl = new URL(URL_FOR_FEED);
Query myQuery = new Query(feedUrl);
myQuery.setMaxResults(Integer.MAX_VALUE);
ContactFeed resultFeed = myService.getFeed(myQuery, ContactFeed.class);
return resultFeed;
}
Но я получаю
Exception in thread "main" java.lang.NullPointerException: No authentication header information
at com.google.gdata.util.AuthenticationException.initFromAuthHeader(AuthenticationException.java:96)
at com.google.gdata.util.AuthenticationException.<init>(AuthenticationException.java:67)
at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:608)
at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:564)
at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:560)
at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:538)
at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:536)
at com.google.gdata.client.Service.getFeed(Service.java:1135)
at com.google.gdata.client.Service.getFeed(Service.java:1077)
at com.google.gdata.client.GoogleService.getFeed(GoogleService.java:676)
at com.google.gdata.client.Service.getFeed(Service.java:1034)
Я нашел разрешенный вопрос для SpreadsheetService
gdata-java-client + oauth2 + access_token secret
Но это не сработало для меня.
Не могли бы вы указать мне, что я делаю неправильно? Любая помощь будет оценена
благодаря
Проблема была в области видимости на стороне JS - она не была установлена. Пробовал на Oauth игровой площадке от Google, получил токен и просто закодировал его - это сработало. После добавления области действия к стороне JS (любая библиотека JS Oauth поддерживает ее), я преуспел в аутентификации. Я рекомендую всем, кто сталкивается с такой проблемой, попытаться выполнить аутентификацию с помощью токена, созданного на игровой площадке Oauth, которая поможет устранить неполадки и найти проблему. благодаря
Добавьте это обходное решение в блок initService
myService.getRequestFactory().setHeader("User-Agent", applicationName);
accessToken
на стороне Java?