3
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错误。

我的 Google 协作平台、Google 云端硬盘、Google Apps 配置、Google 电子邮件设置在 OAuth2 中运行良好。但是带有 OAuth2 的 Google Apps Profile 给出了java.lang.NullPointerException: No authentication header information。我在网上冲浪,他们说这是一个错误?他们所做的只是手动将 AccessToken 传递到标头中。反正有这个工作吗?因为我使用它在 Cron Job 上运行并且我使用的是 OAuth2 服务帐户。

====

编辑:

我试图用这样的设置标题来暴力破解它:

service.setHeader("GData-Version", "3.0");
service.setUserCredentials(myusername, mypassword);

这非常完美。service.setOAuth2Credentials() 内部似乎有错误。

4

2 回答 2

4

我找到了为什么 service.setOAuth2Credentials() 不适用于构建新的 Google Credential(使用 P12File 构建)的原因。

这是因为 service.setOAuth2Credentials() 不会像 Google Sites、Google Drive 等中的其他服务那样在内部刷新令牌...

如果您使用 P12File 构建 Google Credential,只需在构建 Google Credential 后添加此行。

googleCredential.refreshToken();

我猜这是 ContactsService.setOAuth2Credentials() 的错误。

于 2013-01-16T07:23:53.153 回答
0

我在使用 SecureSociale 进行身份验证时遇到了这个问题。

就我而言,问题与 SecureSociale 配置中定义的范围有关。

不要忘记检查您是否为给定的令牌使用了正确的范围。

于 2016-08-01T19:00:59.827 回答