将GoCardless Java库与ColdFusion一起使用时发生ClassCast异常

将GoCardless Java库与ColdFusion一起使用时发生ClassCast异常,java,coldfusion,coldfusion-10,Java,Coldfusion,Coldfusion 10,我正在将GoCardless Java库与ColdFusion一起使用,但遇到以下异常: com.sun.net.ssl.internal.www.protocol.https.httpsurlconnectionoldempl不能强制转换为javax.net.ssl.HttpsURLConnection 读过之后,GoCardless似乎是针对javax.net.ssl编写的,但是JVM正在处理com.sun.net.ssl 博客文章建议通过设置以下Java系统属性来解决此问题: -Djava

我正在将GoCardless Java库与ColdFusion一起使用,但遇到以下异常:

com.sun.net.ssl.internal.www.protocol.https.httpsurlconnectionoldempl不能强制转换为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实例上运行


这个问题还有别的解决办法吗?谢谢

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

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

阅读这篇文章-

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

<cfset sys = createObject("java", "java.lang.System")>
<cfset sys.setProperty("java.protocol.handler.pkgs", "javax.net.ssl")>

然后将其更改回(请参见下一个示例以检索当前设置):


您还可以读取当前系统属性,如下所示:

<cfset sys = createObject("java", "java.lang.System")>
<cfoutput>#sys.getProperty("java.protocol.handler.pkgs")#</cfoutput>

#sys.getProperty(“java.protocol.handler.pkgs”)#

(在我的ColdFusion 9.0.1服务器上读取该属性返回
com.sun.net.ssl.internal.www.protocol

我没有关于问题/不兼容的答案。但是,我认为该设置可能会影响任何能够进行ssl调用的标记或函数,例如
cfhttp
cfdocument
,等等。(显然,它会影响使用该jvm的所有应用程序)。您可以查看文档,看看API是否提供了任何机制来设置/更改所使用的默认安全提供程序(续)。有些库提供了自定义属性文件,如标准。你也可以给博客作者留下评论。询问他们是否遇到任何问题。值得一试…脚注:a现在可用。Miguel-F-不幸的是,这也是一个系统范围的属性。因此,它将具有与jvm标志相同的影响。我认为属性值实际上是从OP中的jvm标志读取的。要么是从
security.properties
读取的,要么是从最高优先级的提供程序读取的。因此,设置提供者的三种方法都是系统范围的。好的,除非库提供了这样做的机制,否则它不能在每个会话/应用程序的基础上进行更改。@Leigh-是的,我意识到它是系统范围的(因此我的免责声明)。我真的是在回答OP在另一篇博文上发布的一个问题。也就是说,您可以更改设置,然后再将其更改回来。我试图在我的回答中揭示这一点,但我想我失败了……米盖尔-F:不,我的错。你很清楚。。我有点心烦意乱,当我浏览并回答时;-)我应该补充的是,它仍然有风险,因为它是一个全系统的财产。仍然有可能影响jvm上的其他应用程序,因为。这让我使用它不太舒服。(这就是为什么我没有在评论中提出这个建议。)+1@Leigh我同意,但几乎没有发布。我确实发布了帖子,以便OP了解该选项,但我的免责声明不是很好。
<cfset sys = createObject("java", "java.lang.System")>
<cfoutput>#sys.getProperty("java.protocol.handler.pkgs")#</cfoutput>