Sre*_*ram 40 java base64 java-ee
我正在开发一个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,但我仍然不明白为什么它会抛出我上面的错误.
Bal*_*usC 73
该方法是在Commons Codec 1.4中引入的.此异常表示您在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编码器,例如这个.
一些谷歌工具,如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.
| 归档时间: | 
 | 
| 查看次数: | 92955 次 | 
| 最近记录: |