当前位置: 首页 > 面试题库 >

java.lang.NoSuchMethodError:Java EE应用程序中的org.apache.commons.codec.binary.Base64.encodeBase64String()

芮星海
2023-03-14
问题内容

我正在开发需要Base64编码/解码的Java EE应用程序

所以我commons-codec-1.5.jarWEB-INF/lib应用程序的文件夹中添加并使用了

import org.apache.commons.codec.binary.Base64;

在Java文件中。

在编译期间,当我输入时Base64,它表明encodeBase64Stringmethod可用。但是在运行时,它将引发如下异常:

java.lang.NoSuchMethodError:org.apache.commons.codec.binary.Base64.encodeBase64String

我在构建路径中有JAR,但我仍然不明白为什么它会引发上述错误。


问题答案:

该方法在Commons Codec
1.4中引入。此异常表示您在Web应用程序的运行时类路径中的其他位置具有Commons
Codec的较旧版本,该版本在类加载中具有优先权。检查webapp运行时类路径覆盖的所有路径。这包括除其他外Webapp/WEB- INF/libYourAppServer/libJRE/libJRE/lib/ext。最后删除或升级有问题的旧版本。

更新 :根据评论,您似乎无法找到它。我只能建议使用该较新的方法对代码进行注释,然后将以下行放在适当的位置:

System.out.println(Base64.class.getProtectionDomain().getCodeSource().getLocation());

那应该打印到运行时从中加载JAR文件的绝对路径。

更新2
:这似乎指向正确的文件。抱歉,我现在无法解释您的问题。我所建议的只是使用其他Base64类似的方法encodeBase64(byte[]),然后new String(bytes)自己构建一个。或者,您可以删除该库并使用其他Base64编码器,例如this。



 类似资料:
  • 我们有一个应用程序,利用在应用程序计费。我们看到的问题如下: 当使用较高版本代码的构建被上传到Play Developer控制台时,In App Billing将停止在设备上的应用程序(使用较低版本代码)上工作,表示“应用程序未配置为计费”。 这很好,在测试的时候,但问题是--当应用程序在Google Play商店中时,会有什么行为?当您替换应用程序(以执行更新)时,处于野生状态(具有较低版本代码

  • 我有一个Winforms应用程序,它目前正在使用application Insights SDK捕获错误日志、事件、异常、表单视图和另一个遥测。App Center现在支持WinForms应用程序,它还支持将遥测数据导出到应用程序洞察中。我现在的问题是,我是否应该从WinForms应用程序中删除Application Insights SDK,而使用AppCenter SDK?这样做有什么好处吗?

  • 我遇到的问题是filter方法永远不会执行,并且上下文也没有设置。我已经确认Webfilter是在启动时加载的。还有什么需要让过滤器工作吗?

  • 有人能给我解释一下这个LogCat输出以及如何解决它吗?我用手机(三星Galaxy Nexus)测试我的Android应用程序,就这样;系统强制拘留并将此打印在日志中...

  • 我明白了,我必须提到Proguard属性文件中的外部库。我该怎么提才是问题所在。 请查看我的proguard文件

  • 使用在TypeScript React应用程序中是有意义的,还是这只是“皮带和吊带”的一种情况? 由于组件类是使用类型参数声明的: 添加有什么真正的好处吗 对类的定义?