我收到一个NullPointerException
当我尝试时,细节很少setServiceAccountUser(ACCOUNT_TO_IMPERSONATE)
on my GoogleCredential
,构建一个 Google 任务服务对象,然后尝试发送来自以下位置的任务列表请求: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 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'
编辑:在我们的 Web 应用程序中修改 grails 控制台中的代码后,我可以看到执行credential.refreshToken()
导致 NPE 时ServiceAccountUser
已设置。
当我取消设置时ServiceAccountUser
, refreshToken()
是成功的。此外,当以下情况发生时,尝试检索服务帐户的 Google 任务列表会成功:ServiceAccountUser
未设置。
任何帮助将不胜感激。