仅在我为 GoogleCredential 对象设置了 setServiceAccountUser() 之后才出现 NullPointerException (Grails/Java)

2024-02-18

我收到一个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未设置。

任何帮助将不胜感激。


我发现了我们所经历的行为的原因,但仍然感谢您的建议,user1807337 和 Srinivasan。

我们需要让应用程序的用户将域范围的权限委托给我们的应用程序。这可以由组织的 Google Apps 管理员按照标题为的小节中的说明来完成将域范围的权限委派给服务帐户

https://developers.google.com/accounts/docs/OAuth2ServiceAccount https://developers.google.com/accounts/docs/OAuth2ServiceAccount

这是同一资源中给出的解释: “如果您已将域范围内的访问权限委托给服务帐户,并且想要模拟用户帐户,请使用 GoogleCredential 工厂的 setServiceAccountUser 方法指定用户帐户的电子邮件地址...”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅在我为 GoogleCredential 对象设置了 setServiceAccountUser() 之后才出现 NullPointerException (Grails/Java) 的相关文章

随机推荐

  • SQL:级联UNION和JOIN

    我在两个表之间进行联合操作 SELECT ID 1 name 1 surname 1 FROM T ONE UNION SELECT ID 2 name 2 surname 2 FROM TABLE 2 我想加入这个结果UNION与另一个表
  • 为什么我构建flutter web时会出现白屏

    我想构建一个 flutter web 应用程序 所以我输入 webdev build 命令 操作完成后 我打开位于构建目录中的 index html 文件 它只是一个白屏 我在一个新项目上尝试过 问题仍然存在 开发过程中没有问题 这是我的
  • PHP post_max_size 与 upload_max_filesize 有什么区别?

    当尝试上传PDF通过为此创建的管理区域创建的 15mb 文件 没有任何反应 没有成功或错误消息 但PDF没有上传 然后我认为这可能是一个问题php ini设置 果然 当我查看文件时 发现限制被设置为8m 我假设这意味着 8mb 帖子最大大小
  • Rails 3.1rc4 defaults.js 未找到

    我有一个全新的 Rails 3 1rc4 项目 生成脚手架 迁移并创建新条目后 我注意到我无法销毁刚刚创建的条目 结果发现 assets defaults js 找不到 所以没有弹出销毁确认对话框 我认为这可能与新的资产管道有关 但寻找解决
  • UINavigationBar 左侧有两个按钮

    我知道在 stackoverflow 上有很多类似的问题 但我的有点不同 我将用图像来展示这一点 因为它更容易理解 使用我从中获取的代码here http www mattdipasquale com blog 2010 11 02 how
  • 用户表单多页禁用选项卡单击

    我有一个带有多页选项卡的用户窗体 每个选项卡内都有一个 下一个 命令按钮 如果没有错误 您可以使用该按钮移动到下一个选项卡 如果有错误 它会提示用户并将焦点设置为该选项卡上出现错误 当用户窗体打开时 我可以单击选项卡来跳转 而无需完成任何违
  • django.template.library.InvalidTemplateLibrary:指定的模板库无效

    我正在尝试构建一个博客应用程序 运行 makemigrations 和 migrate 并创建超级用户 但我在运行服务器时遇到以下错误 django template library InvalidTemplateLibrary 指定的模板
  • 枚举变体可以具有恒定的关联值吗? [复制]

    这个问题在这里已经有答案了 我有代码 use std collections HashMap We have some arbitrary struct given values just placeholders struct SomeS
  • 如何使用基本身份验证设置 标签

    我想在我的网页上显示来自网络摄像机的图像 但该图像位于 HTTP 基本身份验证服务器后面 在 Firefox 和 Chrome 中我可以这样做 img width 320 height 200 src 但在 Internet Explore
  • 窗口句柄中的 .net 类名

    我正在开发一个应用程序来监视 Windows 计算机上运行的内容 如果在自动化过程中弹出某些对话框 它将用于发出警报 我正在使用 Windows API 来获取现有窗口的类名 效果很好 但是 如果这些是 NET 应用程序 那么我得到的不是
  • 在 React 中调用函数

    我是 React 的初学者 对于在 React 中调用函数有点困惑 我看到了以下方法 但我不知道何时使用每种方法以及哪种方法 handleAddTodo this handleAddTodo handleAddTodo this handl
  • 如何在 WinForms ListBox 上设置多个选定项

    我有一个处于多重选择模式的 System Windows Forms ListBox 和一组我想要选择的项目 我怎么做 Test public void SetListBox var listBox new ListBox var item
  • 旧 iphone 3g 上的 HTTPS 请求

    其他任何人在旧 iPhone 上获取 https 请求时遇到问题 从连接确实失败并出现错误 错误消息如下 连接错误 错误域 NSURLErrorDomain 代码 1202 此服务器的证书无效 您可能正在连接到冒充 www ourwesbi
  • 在 REST/WCF 服务中将数据集从 LINQ 返回到 SQL

    我有一个 WCF REST Web 服务 正在考虑使用 Linq to SQL 返回数据库信息 对表进行基本查询并返回行非常容易 例如 WebGet UriTemplate public List
  • 格式为 mm/dd/yyyy 但采用本地格式的最佳方式是什么?

    Excel 似乎没有这个功能 除非我错过了 但我们对此有需求 由于我们尝试匹配 Excel 的单元格格式语法 因此我想以一种有意义的方式添加它 那么 关于如何指定您想要在本地布局中格式化的短 中 长日期 时间 日期时间有什么建议吗 换句话说
  • 返回我的时间线中的所有推文

    我希望返回我在时间线上发布的所有推文 我正在使用Linq 到 Twitter https linqtotwitter codeplex com wikipage title Querying 20the 20User 20Timeline图
  • 将 C/C++ 代码从 Linux 移植到 Windows 的最佳环境

    我想让我的一个大项目可以在 Windows 平台上构建 该项目本身是用 C C 编写的 遵循 POSIX 标准 具有一些库依赖项 例如 libxml2 libcurl 等 我更像是一名 Linux 开发人员而不是 Windows 开发人员
  • 升级到 Azure SDK 2.6 后无法在 Windows 通用应用程序中加载共享“项目”

    我刚刚安装了2015 年 4 月发布 Azure SDK http azure microsoft com en gb downloads archive net downloads 它是 2 6 版本 之前我使用的是 2 5 版本 现在我
  • 将整个数据库的空字符串更新为 NULL

    我正在执行一些数据库清理 并注意到有很多列在各个列中同时具有空字符串和 NULL 值 是否可以编写一条 SQL 语句来将数据库中每个表的每一列的空字符串更新为 NULL 除了不允许 NULL 的列之外 我看过information sche
  • 仅在我为 GoogleCredential 对象设置了 setServiceAccountUser() 之后才出现 NullPointerException (Grails/Java)

    我收到一个NullPointerException当我尝试时 细节很少setServiceAccountUser ACCOUNT TO IMPERSONATE on my GoogleCredential 构建一个 Google 任务服务对