使用okhttp3,提示【clientBuilder.sslSocketFactory(SSLSocketFactory) not supported on JDK 9+】

升级到JDK 1.8.0_251后,使用okhttp3报错【clientBuilder.sslSocketFactory(SSLSocketFactory) not supported on JDK 9+】。问题源于Platform.get().trustManager()在Jdk9Platform中判断错误,因1.8.0_251及以上版本含有特定于JDK9的方法。解决方案是回退到旧版JDK。
部署运行你感兴趣的模型镜像

1.错误代码

果然,换新电脑就是问题多。

今天从官网下载了jdk 1.8.0_251版本,之前用的是jdk 1.8.0_188版本,然后在执行下面代码时,就报错了!

new OkHttpClient().newBuilder()
  .sslSocketFactory(sslContext.getSocketFactory(), Platform.get().trustManager(sslContext.getSocketFactory()))
                .build();

报错:

clientBuilder.sslSocketFactory(SSLSocketFactory) not supported on JDK 9+

我这是新电脑,从没装过啥jdk 9。

2.分析

打个断点调试一下,发现是在执行 Platform.get().trustManager() 时报错了,这个get()方法会返回 Platform对象。

public class Platform {
  private static final Platform PLATFORM = findPlatform();
  public static final int INFO = 4;
  public static final int WARN = 5;
  private static final Logger logger = Logger.getLogger(OkHttpClient.class.getName());

  public static Platform get() {
    return PLATFORM;
  }
}

而这个对象有4个子类:

在我使用jdk8的正常情况下,不需要返回期中的任何一个子类,它却返回了Jdk9Platform对象。

 

再进行Jdk9Platform里看看:

它是通过JDK的SSLParameters这个类里有没有setApplicationProtocols方法和SSLSocket类中有没有getApplicationProtocol()方法来判断是不是属于jdk9, 很可惜在jdk 1.8.0_251及后续版本里都有上面两个方法,因此导致判断错误。而在jdk 1.8.0_188中是没有上述几个方法。这应该属于okhttp的bug.

因此,换到之前的版本就没问题了~

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值