当前位置: 首页 > 知识库问答 >
问题:

Google drive API(Driver.Builder)身份验证问题:NullPointerException前置条件检查

李成礼
2023-03-14
public class GoogleDriveService {

/** Global instance of the JSON factory. */
private static final JsonFactory JSON_FACTORY =
  JacksonFactory.getDefaultInstance();

/** Global instance of the HTTP transport. */
private static HttpTransport HTTP_TRANSPORT;

/** Client Email */
private static final String SERVICE_ACCOUNT_EMAIL =
  "gdrive-p12@generator-dev.iam.gserviceaccount.com";

/** Path to the Service Account's Private Key file */
private static final String SERVICE_ACCOUNT_PKCS12_FILE_PATH = "/gdrive-p12.p12";

/**
 * Build and return an authorized Drive client service.
 * @return an authorized Drive client service
 * @throws IOException
 */
public static Drive getDriveService() throws IOException, GeneralSecurityException {

  GoogleCredential credential = new GoogleCredential.Builder()
    .setTransport(HTTP_TRANSPORT)
    .setJsonFactory(JSON_FACTORY)
    .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
    .setServiceAccountPrivateKeyFromP12File(new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH))
    .setServiceAccountScopes(Collections.singleton(DriveScopes.DRIVE))
    .build();

  System.out.println(credential);

  return new Drive.Builder(
    HTTP_TRANSPORT, JSON_FACTORY, credential)
    .build();
}

public static void main(String[] args) throws IOException, GeneralSecurityException {
  // Build a new authorized API client service.
  Drive service = getDriveService();

  // Print the names and IDs for up to 10 files.
  FileList result = service.files().list()
    .setPageSize(10)
    .setFields("nextPageToken, files(id, name)")
    .execute();
  List<File> files = result.getFiles();
  if (files == null || files.size() == 0) {
    System.out.println("No files found.");
  } else {
    System.out.println("Files:");
    for (File file : files) {
      System.out.printf("%s (%s)\n", file.getName(), file.getId());
    }
  }
}
Exception in thread "main" java.lang.NullPointerException
    at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkNotNull(Preconditions.java:213)
    at com.google.api.client.util.Preconditions.checkNotNull(Preconditions.java:127)
    at com.google.api.client.googleapis.services.AbstractGoogleClient$Builder.<init>(AbstractGoogleClient.java:333)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClient$Builder.<init>(AbstractGoogleJsonClient.java:74)
    at com.google.api.services.drive.Drive$Builder.<init>(Drive.java:7783)
    at com.lumos.xlsx_manager.es.da.services.GoogleDriveService.getDriveService(GoogleDriveService.java:59)
    at com.lumos.xlsx_manager.es.da.services.GoogleDriveService.main(GoogleDriveService.java:66)

共有1个答案

邓星光
2023-03-14

我想错误可能在这里:

/** Global instance of the HTTP transport. */
private static HttpTransport HTTP_TRANSPORT;

您没有将http_transport设置为任何内容,因此它保留为null。我猜这就是Google Drive API所抱怨的。

json_factoryservice_account_email不同,您也没有声明它final。如果这样做了,您可能会收到一个关于final字段从未初始化的编译器警告。

 类似资料:
  • 有人面对过这个问题吗?如果没有身份验证,spring-cloud-config-client可以很好地工作,但是如果启用了基本身份验证,相同的代码就不能工作了。 Spring Cloud Config Server应用程序。属性: Spring Cloud Config Client bootstrap.yml: 奇怪的是,记录器的输出是空白的,这意味着没有活动的配置文件。因此,很明显,这个boo

  • 问题内容: 我试图让我的自定义Java应用程序使用我们的Active Directory服务器进行身份验证,但由于某种原因我无法使其正常工作。谁能看到为什么呢?这是我的方法如下: 结果: 问题答案: 你尝试过这种方式吗? 也更换 与

  • 我正在开发一个Web应用程序 然而,我在尝试允许用户通过注册链接注册时遇到了一个问题。如果用户未经身份验证,则无法访问注册表的链接(“showRegistrationForm”) 有人能洞察为什么会发生这种情况吗?我在下面包含了我的安全配置中的代码片段

  • 尝试将ember应用程序连接到oauth2身份验证服务时,获得一个[error=“unauthorized”,error_description=“访问此资源需要完全身份验证”]。如有任何建议,我们将不胜感激。我花了几天时间想解决这个问题,但没有效果。 下面是app.js中的代码

  • 问题内容: 我正在使用Rails做一个单页应用程序。登录和注销时,使用ajax调用Devise控制器。我遇到的问题是当我1)登录2)退出然后再次登录时不起作用。 我认为这与CSRF令牌有关,该令牌在我退出时会重置(尽管它不应该出现),并且由于它是单页的,因此在xhr请求中发送了旧的CSRF令牌,从而重置了会话。 更具体地说,这是工作流程: 登入 登出 登录(成功201。但是在服务器日志中打印) 后

  • 我是Apache Shiro的初学者。我一直在跟踪文档和许多其他教程,博客等,但我就是无法使身份验证工作。当我尝试使用有效的用户名和密码登录时,总是会引发。我正在使用DynamoDB作为存储用户凭据的自定义领域,但我真的不认为这有什么关系。显然,我存储和/或执行凭据匹配的方式是不正确的。以下是我的设置: