转换异常:HttpsURLConnectionOldImpl v javax.net.ssl.HttpsURLConnection
Cast exception: HttpsURLConnectionOldImpl v javax.net.ssl.HttpsURLConnection
我遇到了一个繁琐的运行时错误:
java.lang.ClassCastException: com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl cannot be cast to javax.net.ssl.HttpsURLConnection
这是相关代码。
final SSLContext sslContext = SSLContext.getInstance(ALGORITHM_TLS_1_2);
sslContext.init(null, new TrustManager[] {new TrustAllCertificates()}, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
// Install the all-trusting host verifier
HttpsURLConnection.setDefaultHostnameVerifier(new TrustAllHosts());
// cookie connection
final URL authURL = new URL(data.getAuthURL());
final HttpsURLConnection httpsPost = (HttpsURLConnection) authURL.openConnection();
我尝试退回到 HttpURLConnection,但我的目标系统不喜欢它。
此代码在本地运行良好,但当我尝试将其实现为 ColdFusion 2018 服务器的附加组件时抛出运行时异常。
"URL"是java.net.URL,"data.getAuthURL()"是字符串(returns是String,要挑剔。)
我假设 authURL.openConnection() 是 "com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl"
如何说服它使用正确的实现? (或解决问题,否则如果我问的问题不对)
在这个特定实例中,我更改了
这个
final URL authURL = new URL(data.getAuthURL());
到这个
final URL authURL = new URL(null, data.getAuthURL(),new sun.net.www.protocol.https.Handler());
这还需要在构建时更新 JRE 中的访问策略。
问题出在环境上。当作为用户库加载到 ColdFusion 服务器上时,您不会获得您可能期望的协议实现,而是获得 ColdFusion 服务器正在使用的协议实现。
原始问题中的代码在大多数环境中都是正确的。这里需要拼凑,因为我不是 "allowed" 到 select 实施。
我遇到了一个繁琐的运行时错误:
java.lang.ClassCastException: com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl cannot be cast to javax.net.ssl.HttpsURLConnection
这是相关代码。
final SSLContext sslContext = SSLContext.getInstance(ALGORITHM_TLS_1_2);
sslContext.init(null, new TrustManager[] {new TrustAllCertificates()}, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
// Install the all-trusting host verifier
HttpsURLConnection.setDefaultHostnameVerifier(new TrustAllHosts());
// cookie connection
final URL authURL = new URL(data.getAuthURL());
final HttpsURLConnection httpsPost = (HttpsURLConnection) authURL.openConnection();
我尝试退回到 HttpURLConnection,但我的目标系统不喜欢它。
此代码在本地运行良好,但当我尝试将其实现为 ColdFusion 2018 服务器的附加组件时抛出运行时异常。
"URL"是java.net.URL,"data.getAuthURL()"是字符串(returns是String,要挑剔。)
我假设 authURL.openConnection() 是 "com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl"
如何说服它使用正确的实现? (或解决问题,否则如果我问的问题不对)
在这个特定实例中,我更改了
这个
final URL authURL = new URL(data.getAuthURL());
到这个
final URL authURL = new URL(null, data.getAuthURL(),new sun.net.www.protocol.https.Handler());
这还需要在构建时更新 JRE 中的访问策略。
问题出在环境上。当作为用户库加载到 ColdFusion 服务器上时,您不会获得您可能期望的协议实现,而是获得 ColdFusion 服务器正在使用的协议实现。
原始问题中的代码在大多数环境中都是正确的。这里需要拼凑,因为我不是 "allowed" 到 select 实施。