在 ColdFusion 中找不到 Java 方法

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

任何帮助将不胜感激。谢谢!

最佳答案

假设您没有调用该方法,它可能正是它所说的意思。 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 中。

关于在 ColdFusion 中找不到 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17652902/

相关文章:

jquery - 如何将元素 ID 传递到 jQuery 函数中

html - 输入类型 ="image"与类型 ="submit"

ColdFusion 10 cffile 操作 ="upload"接受属性通配符不起作用

java - LWJGL/OpenGL 在 "Zoomed In"时禁用平滑纹理

java - LinkedList 的 add(int, E) 的 O(1) 复杂度如何?

java - 需要正则表达式模式来获取介于两者之间的所有内容

coldfusion - 无法再访问 CFADMIN

java - Eclipse 开发 - 根据 FieldEditorPreferencePage 内其他 FieldEditor 的新值更改 FieldEditor

hibernate - Coldfusion HQL 查询异常 - 意外标记

javascript - 每5分钟自动刷新