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: No authentication header information error。
我有谷歌网站,谷歌驱动器,谷歌应用程序配置,谷歌电子邮件设置运行良好与OAuth2。但是Google Apps Profile with OAuth2给出了java.lang。NullPointerException: No authentication header information。我上网查了一下,他们说这是个bug?他们所做的只是手动将AccessToken传递到header中。这个工作还有别的出路吗?因为我使用这个来运行在Cron作业,我使用OAuth2服务帐户。
= = = =
编辑:我试着像这样强行使用set header:
service.setHeader("GData-Version", "3.0");
service.setUserCredentials(myusername, mypassword);
这工作刚刚好。service.setOAuth2Credentials()内部似乎有bug
我发现了service.setOAuth2Credentials()不能与构建新的Google凭据(使用P12File构建)一起工作的原因。
这是因为service.setOAuth2Credentials()不刷新TOKEN内部像其他服务在Google Sites, Google Drive等…
如果您使用P12File构建Google Credential,只需在构建Google Credential后添加这一行。
googleCredential.refreshToken();
我猜这是一个错误的ContactsService.setOAuth2Credentials()。
我在使用securesocial进行身份验证时遇到了这个问题。
在我的例子中,这个问题与securesocial配置中定义的范围有关。
不要忘记检查你是否为给定的标记使用了正确的作用域。