Je développe une application Java EE dans laquelle j'ai besoin du codage/décodage Base64
J'ai donc ajouté commons-codec-1.5.jar
dans le dossier WEB-INF/lib
de mon application et utilisé
import org.Apache.commons.codec.binary.Base64;
dans le fichier Java.
Pendant la compilation, lorsque je tape Base64
, il indique que la méthode encodeBase64String
est disponible. Mais pendant l'exécution, une exception comme celle-ci est lancée:
Java.lang.NoSuchMethodError:org.Apache.commons.codec.binary.Base64.encodeBase64String
J'ai le fichier JAR dans le chemin de construction, mais je ne comprends toujours pas pourquoi il me renvoie l'erreur ci-dessus.
Cette méthode a été introduite dans le codec Commons 1.4. Cette exception indique que vous avez une ancienne version de Commons Codec ailleurs dans le chemin d'accès aux classes d'exécution de l'application Web, qui était prioritaire dans le chargement de classes. Vérifiez tous les chemins couverts par le classpath d'exécution de l'application Web. Ceci inclut entre autres les Webapp/WEB-INF/lib
, YourAppServer/lib
, JRE/lib
et JRE/lib/ext
. Enfin, supprimez ou mettez à niveau l'ancienne version incriminée.
Update: selon les commentaires, vous ne pouvez pas sembler le localiser. Je ne peux que suggérer de supprimer le code en utilisant cette méthode plus récente, puis de mettre en place la ligne suivante:
System.out.println(Base64.class.getProtectionDomain().getCodeSource().getLocation());
Cela devrait afficher le chemin absolu du fichier JAR à partir duquel il a été chargé lors de l'exécution.
Update 2: cela semblait pointer vers le bon fichier. Désolé, je ne peux plus expliquer votre problème maintenant. Tout ce que je peux suggérer est d'utiliser une méthode Base64
différente, telle que encodeBase64(byte[])
, puis de construire vous-même une new String(bytes)
. Vous pouvez également supprimer cette bibliothèque et utiliser un autre encodeur Base64, par exemple celui-ci .
@Adam Augusta a raison, encore une chose
Les fichiers client Apache-HTTP appartiennent également à la même catégorie que certains google-apis.
org.Apache.httpcomponents.httpclient_4.2.jar et commons-codec-1.4.jar les deux sur le chemin d'accès aux classes, il est très possible que vous rencontriez ce problème.
Cela prouve à tous les fichiers qui utilisent la version précédente de common-codec en interne et en même temps, quelqu'un utilisant common-codec explicitement sur classpath too.
Certains outils Google, tels que GWT, intègrent une version intégrée de commons-codec avec une classe antérieure à 1.4 Base64. Vous devrez peut-être rendre ces fichiers JAR d'outils inaccessibles à votre code en restructurant votre projet de sorte que seules les parties de votre code ayant besoin de cet outil puissent voir la dépendance.
Télécharger ce pot
Cela a résolu mon problème, c'est 1.7.
J'ai rencontré le même problème avec JBoss 4.2.3 GA lors du déploiement de mon application Web. J'ai résolu le problème en copiant mon fichier jar commons-codec 1.6 dans C:\jboss-4.2.3.GA\server\default\lib
Vous avez besoin de la bibliothèque Apache Commons Codec 1.4 ou supérieure dans votre chemin de classe . Cette bibliothèque contient l’implémentation Base64.
Essayez d'ajouter «commons-codec-1.8.jar» dans votre dossier JRE!
Créez simplement un objet de Base64 et utilisez-le pour encoder ou décoder, lorsque vous utilisez org.Apache.commons.codec.binary.Base64 library
Base64 ed = nouveau Base64 ();
String encoded = new String (ed.encode ("Hello" .getBytes ()));
Remplacez "Hello" par le texte à encoder au format String.
Base64 ed = nouveau Base64 ();
Chaîne décodée = nouvelle chaîne (ed.decode (encoded.getBytes ()));
Ici est encodée la variable String à décoder