【发布时间】:2015-07-08 08:55:35
【问题描述】:
我想使用 de java Google 电子表格 API 访问 Google Drive 上的电子表格。过去我使用客户端登录方法登录,但现在已弃用此方法。 现在我正在尝试使用服务帐户在不与用户交互的情况下进行身份验证,因为该工具在后台运行,我需要自动化。但我无法让它工作。这些是我现在的代码。
List<String> SCOPES_ARRAY = Arrays.asList(
"https://www.googleapis.com/auth/drive.file",
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/userinfo.profile",
"https://docs.google.com/feeds",
"https://spreadsheets.google.com/feeds");
credential = new GoogleCredential.Builder()
.setTransport(transport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(
"xxxxxx@developer.gserviceaccount.com")
.setServiceAccountScopes(SCOPES_ARRAY)
.setServiceAccountPrivateKeyFromP12File(p12)
.setServiceAccountUser("me@gmail.com")
.build();
service = new SpreadsheetService("MonitorV3");
service.setOAuth2Credentials(credential);
SPREADSHEET_FEED_URL = new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full");
worksheetFeed = service.getFeed(spreadsheet.getWorksheetFeedUrl(),
WorksheetFeed.class);
但是在执行最后一行时我得到了一个空指针异常。刷新令牌出了点问题。有人看到我做错了吗?
我做了一个独立的简单应用程序,现在我收到以下详细错误:
Exception in thread "main" com.google.gdata.util.AuthenticationException: Failed to refresh access token: 401 Unauthorized
at com.google.gdata.client.GoogleAuthTokenFactory$OAuth2Token.refreshToken(GoogleAuthTokenFactory.java:260)
at com.google.gdata.client.GoogleAuthTokenFactory.handleSessionExpiredException(GoogleAuthTokenFactory.java:702)
at com.google.gdata.client.GoogleService.handleSessionExpiredException(GoogleService.java:738)
at com.google.gdata.client.GoogleService.getFeed(GoogleService.java:649)
at com.google.gdata.client.Service.getFeed(Service.java:1017)
at JavaApplication20.printDocuments(JavaApplication20.java:50)
at main.main(main.java:35)
【问题讨论】:
-
您是否授予服务帐户访问工作表的权限?
-
感谢您的快速回复。您如何授予服务帐户访问权限?在 serviceaccountuser 中拥有电子邮件的用户有权访问电子表格。我什至与驱动器的所有者一起尝试过,但结果相同。我想我做错了什么或忘记了什么。当我调试线程时。我看到在 getfeed 之后它将进入 sessionExpiredException ,然后在出现空指针的 de refreshtoken 方法中。我需要设置一个refreshtoken还是什么?
-
获取服务帐户电子邮件地址并像其他用户一样授予它访问权限。
-
我试过这个但结果相同:nullpointer。我编辑了我的帖子并添加了空指针发生位置的图像
标签: java google-api google-spreadsheet-api