Google Apps配置文件API:java.lang.NullPointerException:无身份验证标头信息

时间:2013-01-16 03:35:16

标签: google-profiles-api

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 Apps配置,Google电子邮件设置,可与OAuth2配合使用。但是,使用OAuth2的Google Apps配置文件提供了 java.lang.NullPointerException:无身份验证标头信息。我在网上冲浪,他们说这是一个错误?他们所做的就是手动将AccessToken传递到标头中。无论如何还有这项工作吗?因为我使用它在Cron Job上运行而我正在使用OAuth2服务帐户。

====

编辑:

我尝试使用set header强制它,如下所示:

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

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

2 个答案:

答案 0 :(得分:4)

我发现service.setOAuth2Credentials()无法用于构建新的Google Credential(使用P12File构建)。

这是因为service.setOAuth2Credentials()在内部不像Google协作平台,Google云端硬盘等其他服务那样刷新令牌 ......

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

googleCredential.refreshToken();

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

答案 1 :(得分:0)

使用SecureSociale进行身份验证时出现此问题。

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

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