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

时间:2011-10-07 14:25:19

标签: java java-ee base64

我正在开发一个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

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

8 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 :(得分:5)

某些Google工具(如GWT)具有嵌入式版本的commons-codec和1.4之前的Base64类。您可能需要通过重构项目来使代码无法访问这些工具JAR,以便只需要代码中需要该工具的部分就可以看到依赖项。

答案 3 :(得分:2)

下载this jar

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

答案 4 :(得分:1)

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

来解决了这个问题。

答案 5 :(得分:1)

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

答案 6 :(得分:0)

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

编码

  

Base64 ed = new Base64();

     

String encoded = new String(ed.encode(&#34; Hello&#34; .getBytes()));

替换&#34;你好&#34;将文本编码为字符串格式。

解码

  

Base64 ed = new Base64();

     

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

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

答案 7 :(得分:0)

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