无法提供 key.p12 文件以连接到 Google Cloud Datastore

Can't provide a key.p12 File to connect to Google Cloud Datastore

我正在尝试连接到 Google Cloud Datastore,我正在学习本教程:

https://cloud.google.com/datastore/docs/getstarted/start_java/

我正在设法连接并检索我想要的所有信息,但我正在连接来自环境的选项,如下所示:

datastore = DatastoreFactory.get().create(DatastoreHelper.getOptionsfromEnv() .dataset(datasetId).build());

现在我正在尝试以编程方式提供选项。 据我了解,我可以通过像这样修改凭据来做到这一点:

datastore = DatastoreFactory.get() .create(DatastoreHelper .getOptionsfromEnv() .credential(credential) .dataset(datasetId).build());

以下是我声明凭据的方式:

String filename = "XXX/src/main/webapp/WEB-INF/XXX9f29f.p12";

    credential = new GoogleCredential.Builder()
                        .setTransport(HTTP_TRANSPORT)
                        .setJsonFactory(JSON_FACTORY)
                        .setServiceAccountId("XXXX@developer.gserviceaccount.com")
                        .setServiceAccountPrivateKeyFromP12File(new File(filename)).build();

我的问题是我从这一行得到一个 java.lang.NullPointerException :

.setServiceAccountPrivateKeyFromP12File(new File(filename))

我的应用程序可以 read/write 访问位于 webapp/WEB-INF 文件夹中的文件。

这是我的日志输出:

GRAVE: Unhandled exception
java.lang.NullPointerException
    at java.util.Collections$UnmodifiableCollection.<init>(Collections.java:1026)
    at java.util.Collections.unmodifiableCollection(Collections.java:1013)
    at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.<init>(GoogleCredential.java:208)
    at com.google.api.client.googleapis.auth.oauth2.GoogleCredential$Builder.build(GoogleCredential.java:368)
    at com.databerries.bidder.DataBaseHandler.setEnv(DataBaseHandler.java:78)
    at com.databerries.bidder.WebServer.lambda$start(WebServer.java:75)
    ...
    at java.lang.Thread.run(Thread.java:745)

感谢您的帮助:)

我的问题出在我创建凭据对象的方式上。

我现在不是从 scracth 创建它,而是像这样从 DatastoreHelper 获取它:

credential = DatastoreHelper.getServiceAccountCredential(serviceAccount, filename);