API профилей Google Apps: java.lang.NullPointerException: нет информации заголовка аутентификации
public ContactFeed retrieveContacts(ContactsService service,
Credential credential) throws Exception {
URL url = new URL("https://www.google.com/m8/feeds/profiles/domain/my.domain.com/full");
service.setOAuth2Credentials(credential);
service.useSsl();
service.setHeader("GData-Version", "3.0");
ContactFeed contactFeed = new ContactFeed();
do {
ContactFeed feedResult = service.getFeed(url, ContactFeed.class);
contactFeed.getEntries().addAll(feedResult.getEntries());
if (feedResult.getNextLink() != null && feedResult.getNextLink().getHref() != null
&& !feedResult.getNextLink().getHref().isEmpty()) {
url = new URL(feedResult.getNextLink().getHref());
} else {
url = null;
}
} while (url != null);
return contactFeed;
}
Это мой код для получения профилей. При запуске этой линии
ContactFeed feedResult = service.getFeed(query, ContactFeed.class);
Это даст java.lang.NullPointerException: нет ошибки информации заголовка аутентификации.
У меня есть Сайты Google, Google Диск, Предоставление Служб Google, Настройки электронной почты Google, которые хорошо работают с OAuth2. Но профиль Служб Google с OAuth2 дает исключение java.lang.NullPointerException: нет информации заголовка аутентификации. Я бродил по интернету, они сказали, что это ошибка? Все, что они сделали, это вручную передали AccessToken в заголовок. Есть ли что-нибудь для этой работы? Потому что я использую это для запуска в Cron Job и использую служебную учетную запись OAuth2.
====
Редактировать:
Я попытался перебором с помощью set header:
service.setHeader("GData-Version", "3.0");
service.setUserCredentials(myusername, mypassword);
Это работает просто отлично. У service.setOAuth2Credentials() внутренняя ошибка.
2 ответа
Я нашел причину, по которой service.setOAuth2Credentials() не работает при создании новых учетных данных Google (сборка с использованием P12File).
Это связано с тем, что service.setOAuth2Credentials() не обновляет внутренний токен, как другие сервисы на сайтах Google, Google Drive и т. Д.
Если вы создаете учетные данные Google с помощью P12File, просто добавьте эту строку после создания учетных данных Google.
googleCredential.refreshToken();
Я предполагаю, что это ошибка для ContactsService.setOAuth2Credentials().
У меня была эта проблема при использовании SecureSociale для аутентификации.
В моем случае проблема была связана с областью, определенной в конфигурации SecureSociale.
Не забудьте проверить, что вы используете правильную область действия для данного токена.