我正在使用带ColdFusion的GoCardless Java库,但我得到以下异常:
com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl无法强制转换为javax.net.ssl.HttpsURLConnection
阅读this blog post后,似乎GoCardless是针对javax.net.ssl编写的,但JVM正在处理com.sun.net.ssl。
博文建议通过设置以下Java系统属性来修复此问题:
-Djava.protocol.handler.pkgs=javax.net.ssl
我对更改JVM设置缺乏经验,并想知道更改上面的设置是否可能导致其他地方出现问题,也许本机ColdFusion方法依赖于com.sun.net.ssl?如果可能出现问题,那么我无法通过更改JVM设置来实际解决问题,因为我在同一个ColdFusion实例上运行了多个应用程序。
这个问题还有其他方法吗?谢谢!
答案 0 :(得分:2)
我在引用的博客文章中阅读了您的评论。在其中你问有没有办法暂时将-Djava.protocol.handler.pkgs设置为javax.net.sll,然后将其切换回com.sun.net.ssl.internal.www.protocol 。我相信有。
免责声明 - 我没有尝试过,我不确定其后果。例如,当您更改此设置时,可能会同时运行多个请求。
阅读这篇文章 - You can set Java system properties via ColdFusion
因此,从理论上讲,您可以像这样更改设置:
<cfset sys = createObject("java", "java.lang.System")>
<cfset sys.setProperty("java.protocol.handler.pkgs", "javax.net.ssl")>
然后将其更改回来(请参阅下一个示例以检索当前设置):
<cfset sys = createObject("java", "java.lang.System")>
<cfset sys.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol")>
您还可以像这样阅读当前的系统属性:
<cfset sys = createObject("java", "java.lang.System")>
<cfoutput>#sys.getProperty("java.protocol.handler.pkgs")#</cfoutput>
(在我的ColdFusion 9.0.1服务器上读取该属性返回com.sun.net.ssl.internal.www.protocol
)