NullPointerException только после того, как у меня есть setServiceAccountUser () для объекта GoogleCredential (Grails / Java)

Я получаюNullPointerException с очень маленькой детализацией, когда я пытаюсьsetServiceAccountUser(ACCOUNT_TO_IMPERSONATE) на моемGoogleCredentialсоздайте объект службы Google Tasks, а затем попробуйте отправить запрос на список задач изACCOUNT_TO_IMPERSONATE.

def credential = new GoogleCredential.Builder()
    .setTransport(HTTP_TRANSPORT)
    .setJsonFactory(JSON_FACTORY)
    .setServiceAccountId(SERVICE_ACCOUNT_ID)
    .setServiceAccountPrivateKeyFromP12File(P12_FILE)
    .setServiceAccountScopes(GOOGLE_TASK_SCOPES)
    .setServiceAccountUser(ACCOUNT_TO_IMPERSONATE)
    .build()

    credential.refreshToken()
    log.debug("Google Credential Impersonating: ${credential.getServiceAccountUser()}")

    def service = new com.google.api.services.tasks.Tasks.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).build()

    return service

Обратите внимание, чтоcredential.getServiceAccountUser() выходит из ожидаемогоACCOUNT_TO_IMPERSONATE.

Была обнаружена похожая проблема вhttps://github.com/googleads/googleads-java-lib/issues/19

StackTrace :
Caused by: java.lang.NullPointerException at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkNotNull(Preconditions.java:191)
at com.google.api.client.util.Preconditions.checkNotNull(Preconditions.java:127)
at com.google.api.client.json.jackson2.JacksonFactory.createJsonParser(JacksonFactory.java:96)
at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:85)
at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:81)
at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:88)
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287)
at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307)
at com.google.api.client.auth.oauth2.Credential.executeRefreshToken(Credential.java:570)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:247)
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489)
at com.google.api.ads.common.lib.auth.OAuth2Helper.callRefreshToken(OAuth2Helper.java:70)
at com.google.api.ads.common.lib.auth.OfflineCredentials.generateCredential(OfflineCredentials.java:144)
...

Говорят, что отсутствие детализации в ошибке было проблемой в более старых версиях Google Tasks, но я обновил ее до последней версии и не вижу разницы.

compile "com.google.api-client:google-api-client:1.19.0"
compile 'com.google.apis:google-api-services-tasks:v1-rev41-1.19.0'

РЕДАКТИРОВАТЬ: После работы с кодом в консоли Grails в нашем веб-приложении я вижу, что выполнениеcredential.refreshToken() вызывает NPE, когдаServiceAccountUser установлено.

Когда я сбросилServiceAccountUser, refreshToken() успешно Кроме того, попытка получить список задач Google является успешной для учетной записи службы, когдаServiceAccountUser не установлен.

Любая помощь будет принята с благодарностью.

Ответы на вопрос(2)

Ваш ответ на вопрос