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

问题描述 投票:38回答:8

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

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

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

在Java文件中。

在编译期间,当我输入Base64时,它显示encodeBase64String方法可用。但是在运行时它会抛出这样的异常:

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

我在buildpath中有JAR,但我仍然不明白为什么它会抛出我上面的错误。

java java-ee base64
8个回答
73
投票

这种方法是Commons Codec 1.4中的introduced。此异常表示您在webapp的运行时类路径中的其他位置有一个旧版本的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 one


6
投票

一些谷歌工具,如GWT,有一个嵌入式版本的commons-codec,带有1.4之前的Base64类。您可能需要通过重构项目使代码无法访问这些工具JAR,这样只有代码中需要该工具的部分才能看到依赖项。


6
投票

@Adam Augusta是对的,还有一件事

Apache-HTTP客户端jar也与google-apis属于同一类别。

类路径上的org.apache.httpcomponents.httpclient_4.2.jar和commons-codec-1.4.jar,这很可能会出现这个问题。

这证明了所有在内部使用早期版本的common-codec并且同时在classpath上明确使用common-codec的jar。


2
投票

下载this jar

它解决了我的问题,这是1.7。


1
投票

在部署我的Web应用程序时,我遇到了与JBoss 4.2.3 GA相同的问题。我通过将我的commons-codec 1.6 jar复制到C:\ jboss-4.2.3.GA \ server \ default \ lib解决了这个问题


1
投票

您需要在类路径中使用Apache Commons Codec库1.4或更高版本。该库包含Base64实现。


1
投票

尝试将'commons-codec-1.8.jar'添加到您的JRE文件夹中!


0
投票

使用org.apache.commons.codec.binary.Base64库时,只需创建一个Base64对象并用它来编码或解码

To Encode

Base64 ed = new Base64();

String encoded = new String(ed.encode(“Hello”.getBytes()));

将“Hello”替换为要以字符串格式编码的文本。

To Decode

Base64 ed = new Base64();

String decoding = new String(ed.decode(encoded.getBytes()));

这里编码的是要解码的String变量

© www.soinside.com 2019 - 2024. All rights reserved.