我已使用Google Developer Console为我的服务帐户下载了公共/私人凭据的JSON
文件:
{
"private_key_id": "myPrivateKey",
"private_key": "-----BEGIN PRIVATE KEY-----\myPrivateKeyString\n-----END PRIVATE KEY-----\n",
"client_email": "myClientEmail@developer.gserviceaccount.com",
"client_id": "myClientEmailId.apps.googleusercontent.com",
"type": "service_account"
}
它们存储在类路径中名为serviceAccountCredentials.json
的文件中
当我尝试执行以下代码以返回GoogleCredential
示例时:
InputStream credentialsJSON = MyClass.class.getClassLoader().getResourceAsStream("serviceAccountCredentials.json");
JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
return GoogleCredential.fromStream(credentialsJSON ,httpTransport,JSON_FACTORY);
它将使用以下堆栈跟踪进行扩展:
Exception in thread "main" java.lang.IllegalArgumentException: no JSON input found
at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:92)
at com.google.api.client.util.Preconditions.checkArgument(Preconditions.java:49)
at com.google.api.client.json.JsonParser.startParsing(JsonParser.java:222)
at com.google.api.client.json.JsonParser.parse(JsonParser.java:379)
at com.google.api.client.json.JsonParser.parse(JsonParser.java:354)
at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:87)
at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:81)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.fromStream(GoogleCredential.java:250)
我可以使用以下代码将文件的内容打印到控制台:System.out.println(IOUtils.toString(credentialsJSON));
因此,我知道JSON
文件可访问并且包含内容。
因此,我们假设这个API从根本上被破坏了。
我倾向于使用JSON的解决方案。我不想使用P12
文件,因为:
1.我希望从类路径GoogleCredential.Builder
does not provide a method which consumes an InputStream
(仅File
)提供凭据,因此P12不是可接受的选项:
- Google在其创建凭据的UI中暗示
P12
是传统的身份验证方式,并且应该在第一个示例中使用JSON:
2条答案
按热度按时间voj3qocg1#
@pongrad已经调查了这个问题,并生成了代码,说明API在隔离状态下可以正常工作。
我放弃这个问题,因为它太孤立了(怀疑在我的其他项目依赖关系的上下文中存在Maven transient 依赖关系问题)。
hec6srdp2#
对于每一个更改,重新启动IDE。这是我犯的错误,在尝试不同的解决方案后没有重新启动IDE。我的filename.json文件在resource文件夹中。