1

我正在使用带有 ColdFusion 的 GoCardless Java 库,但出现以下异常:

com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl 无法转换为 javax.net.ssl.HttpsURLConnection

阅读这篇博文后,似乎 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 实例上运行。

有没有其他方法可以解决这个问题?谢谢!

4

1 回答 1

2

我阅读了您对引用的博客文章的评论。在其中您询问是否有办法将 -Djava.protocol.handler.pkgs 临时设置为 javax.net.sll ,然后将其切换回 com.sun.net.ssl.internal.www.protocol。我相信有。

免责声明 - 我没有尝试过,我不确定后果。例如,当您更改此设置时,多个请求可能同时运行。

阅读这篇文章 -可以通过 ColdFusion 设置 Java 系统属性

因此,理论上,您可以像这样更改设置:

<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

于 2013-07-16T19:55:07.530 回答