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 プロファイルではjava.lang.NullPointerException: No authentication header informationが返されます。私はインターネットをサーフィンしましたが、彼らはこれがバグだと言いましたか? 彼らが行ったのは、AccessToken を手動でヘッダーに渡すことだけです。とにかくこの回避策はありますか?これを使用して Cron ジョブを実行し、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 サイト、Google ドライブなどの他のサービスのように内部的にREFRESH TOKENを行わないためです...

P12File を使用して Google Credential を作成する場合は、Google Credential の作成後にこの行を追加するだけです。

googleCredential.refreshToken();

ContactsService.setOAuth2Credentials() のバグだと思います。

于 2013-01-16T07:23:53.153 に答える