我正在尝试构建(在 Eclipse 中)并使用这个旧线程中的代码:
但是我在编译它时遇到问题,因为这一行导致编译器标记错误:
SSLContext sslContext = SSLContexts.custom().loadKeyMaterial(
MutualHttpsMain.class.getResource(TEST_CLIENT_KEYSTORE_RESOURCE),
storePassword,
keyPassword,
(aliases, socket) -> aliases.keySet().iterator().next()
).build();
错误是:
error: lambda expressions are not supported in -source 1.7
我的理解是 Java/JDK 1.7 不支持 lambda 表达式,所以 Eclipse(或 Maven)似乎认为编译器是 1.8,但我已经完成了 Eclipse 配置,所有内容似乎都配置为使用 JDK 1.8,所以我不知道为什么我仍然收到错误,所以我想知道:是否可以转换该行,使其不再是 lambda 表达式?
这里有人可以帮忙吗?
编辑:抱歉,我必须更正上面错误的文本...正确的错误消息是
1.7
而不是 7
。
假设您使用最新版本的 Apache HttpCore 4.4.16 中的方法,只需实现匿名类的实例
PrivateKeyStrategy
:
SSLContext sslContext = SSLContexts.custom().loadKeyMaterial(
MutualHttpsMain.class.getResource(TEST_CLIENT_KEYSTORE_RESOURCE),
storePassword,
keyPassword,
new PrivateKeyStrategy() {
@Override
public String chooseAlias(Map<String, PrivateKeyDetails> aliases, Socket socket) {
return aliases.keySet().iterator().next();
}
}
).build();
弃用说明:如果您使用已弃用的 Apache HttpClient
org.apache.http.conn.ssl.SSLContextBuilder
,请考虑迁移到 Apache HttpCore org.apache.http.ssl.SSLContextBuilder
。