📜  尝试 googlenethttptransport 时未找到 jks - Java (1)

📅  最后修改于: 2023-12-03 15:25:23.136000             🧑  作者: Mango

介绍

在使用 Google API Client 连接谷歌 API 服务时,我们需要为 HttpTransport 配置要使用的证书文件,常见的证书文件格式是 Java KeyStore(.jks)格式。然而,在尝试使用 GoogleNetHttpTransport 时报错 未找到 jks - Java,这意味着我们需要手动添加 Java KeyStore 类库。

原因

Java KeyStore 类库不是默认包含在 Java 运行库中的。由于厂商和 JDK 版本之间可能存在差异,因此我们需要手动添加该类库来确保程序能够正常运行。

解决方案

  1. 下载 bcprov-jdk15on.jar 文件:https://www.bouncycastle.org/latest_releases.html

  2. 将下载的文件放到 Java 运行环境的 lib/ext 目录中,该目录默认位于 Java 安装目录下的 /jre/lib/ext/

    注意: 如果使用 JDK11 及以上版本,则需要将文件保存到 ${JAVA_HOME}/conf/security/ 目录下。

  3. 在代码中添加以下代码:

    Security.addProvider(new BouncyCastleProvider());
    
  4. 使用 GoogleNetHttpTransport.BuildernewTrustedTransport() 方法即可成功创建 HTTP 传输对象。

示例代码

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import java.security.Security;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class MyGoogleApiService {
  private static final HttpTransport HTTP_TRANSPORT;

  static {
    try {
      Security.addProvider(new BouncyCastleProvider());
      HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  // 省略其他代码
}

总结

在使用 Google API Client 时,如果我们遇到了 GoogleNetHttpTransport 找不到证书文件的问题,可以按照本文介绍的方法手动添加 Java KeyStore 类库,并在程序中增加代码以确保正确使用证书文件。