我正在开发一个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,但我仍然不明白为什么它会抛出上述错误。
答案 0 :(得分:73)
该方法在Commons Codec 1.4中为introduced。此异常表示您在webapp的运行时类路径中的其他位置有一个旧版本的Commons Codec,它在类加载中优先。检查webapp的运行时类路径所涵盖的所有路径。其中包括Webapp/WEB-INF/lib
,YourAppServer/lib
,JRE/lib
和JRE/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文件夹中!