在ColdFusion中找不到Java方法

时间:2013-07-15 11:12:12

标签: java coldfusion coldfusion-10

我正在使用他们的Java库将GoCardless实现到我的ColdFusion应用程序中,并遇到以下错误:

  

java.lang.NoSuchMethodError:org.apache.commons.codec.binary.Base64.encodeBase64String([B] Ljava / lang / String;

正如GoCardless文档中所解释的,他们的库依赖于Apache Commons Codec库(以及其他)。当我将GoCardless JAR放入我的ColdFusion lib文件夹时,我注意到Apache Commons Codec JAR已经存在,所以我不确定这个错误意味着什么。

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:3)

假设您没有调用该方法,它可能意味着它所说的内容。 jvm加载的编解码器版本不包含具有该签名的方法。您可以通过创建org.apache.commons.codec.binary.Base64类的实例并使用cfdump检查可用方法来验证它。 (可能也是类加载器冲突,但前者更有可能。)

就原因而言,当类路径中存在多个版本的jar时,jvm只能选择其中一个版本。它可能选择了ColdFusion附带的旧版本,可能没有这种方法。见:Identifying which jar a class was loaded from..

加载较新jar版本的最简单方法是删除/lib中的旧jar,将其替换为较新版本,然后重新启动CF.请记住,CF本身也使用库,因此如果较新版本不向后兼容,则存在破坏某些内容的风险。另一种选择是使用CF10的dynamic class loading feature。它基本上只是Mark Mandel's JavaLoader.cfc的一小部分,只是捆绑在CF中。