1

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

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 已经存在,所以我不确定这个错误意味着什么。

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

4

1 回答 1

3

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

至于原因,当类路径中存在多个版本的jar时,jvm只能选择其中一个。它可能选择了 ColdFusion 附带的旧版本,它可能没有这种方法。请参阅:确定从哪个 jar 加载类...

加载较新版本的 jar 最简单的方法是删除 中的旧 jar /lib,用较新版本替换它,然后重新启动 CF。请记住,CF 本身也使用该库,因此如果较新版本不向后兼容,您将面临破坏某些东西的风险。另一种选择是使用 CF10 的动态类加载功能。它基本上是Mark Mandel 的 JavaLoader.cfc 的翻版,只是捆绑到 CF 中。

于 2013-07-15T12:33:07.647 回答