无法提供 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);
我正在尝试连接到 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);