Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java EE应用程序中的java.lang.NoSuchMethodError:org.apache.commons.codec.binary.Base64.encodeBase64String()_Java_Jakarta Ee_Base64 - Fatal编程技术网

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

java EE应用程序中的java.lang.NoSuchMethodError:org.apache.commons.codec.binary.Base64.encodeBase64String(),java,jakarta-ee,base64,Java,Jakarta Ee,Base64,我正在开发一个Java EE应用程序,其中需要Base64编码/解码 因此,我在应用程序的WEB-INF/lib文件夹中添加了commons-codec-1.5.jar,并使用 import org.apache.commons.codec.binary.Base64; 在Java文件中 在编译期间,当我键入Base64时,它显示encodeBase64String方法可用。但在运行时,它会引发如下异常: java.lang.NoSuchMethodError:org.apache.commo

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

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

import org.apache.commons.codec.binary.Base64;
在Java文件中

在编译期间,当我键入
Base64
时,它显示
encodeBase64String
方法可用。但在运行时,它会引发如下异常:

java.lang.NoSuchMethodError:org.apache.commons.codec.binary.Base64.encodeBase64String
我在构建路径中有JAR,但我仍然不明白它为什么会抛出上述错误。

该方法在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文件的绝对路径,JAR文件在运行时从中加载



更新2:这似乎指向了正确的文件。对不起,我现在无法解释你的问题。我所能建议的就是使用不同的
Base64
方法,比如
encodeBase64(byte[])
,然后自己构造一个
新字符串(bytes)
。或者,您可以删除该库并使用不同的Base64编码器,例如。

一些Google工具(如GWT)有一个嵌入式版本的commons编解码器,带有1.4之前的Base64类。您可能需要重构您的项目,使您的代码无法访问这些工具jar,以便只有代码中需要该工具的部分才能看到依赖关系。

@Adam Augusta是正确的,还有一件事

ApacheHTTP客户端JAR也与一些谷歌API属于同一类别

org.apache.httpcomponents.httpclient_4.2.jarcommons-codec-1.4.jar都在类路径上,这很可能会导致这个问题


这证明了所有JAR都在内部使用早期版本的通用编解码器,同时也有人在类路径上明确使用通用编解码器

在部署web应用程序时,我遇到了JBoss 4.2.3 GA的同样问题。通过将我的commons codec 1.6 jar复制到C:\jboss-4.2.3.GA\server\default\lib中,我解决了这个问题。在类路径中需要Apache commons codec库1.4或更高版本。 此库包含Base64实现。

下载


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

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

编码 Base64 ed=新的Base64()

字符串编码=新字符串(ed.encode(“Hello.getBytes())

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

破译 Base64 ed=新的Base64()

已解码字符串=新字符串(ed.decode(encoded.getBytes())


此处encoded是要解码的字符串变量

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

感谢回复BalusC。我在整个系统中搜索了这个jar。我在系统中的任何地方都找不到任何旧jar。我所拥有的只是我的Webapp/WEB-INF/libI中的commons-codec-1.5.jar,它用一行代码更新了我的答案,这会让你进一步了解
Base64
类实际上是从哪里加载的运行时。@BalusC上面的System.out.printed以下文件:/C:/Program Files/Apache Software Foundation/Tomcat 7.0/webapps/Project_name/WEB-INF/lib/commons-codec-1.5.jar另一种确定所选类是否相同或不同的策略是使用反射打印所有Base64类的公共方法。@BalusC-I清理并构建了该项目。然后我将WAR部署到tomcat中。有趣的是,它开始正常工作。请参阅我关于java Post如何调用此方法的另一个问题。这解决了我的问题。我正在使用JBoss 5.1.0 GA并在此服务器上部署一个EAR。我需要一个项目中包含的api的commons编解码器1.6。JBoss服务器的lib文件夹中有一个commons codec 1.3 jar。我希望在ear中部署我的项目所需的所有LIB,否则会发生此错误。当我复制lib文件夹中的commons codec 1.6(旧的仍然存在)时,它可以工作。