java.lang.NoSuchMethodError: org.apache.commons.codec.binaires.Base64.encodeBase64String() dans une application Java EE
Je développe une application Java EE, dans laquelle j'ai besoin de l'Encodage Base64/Décodage
J'ai donc ajouté commons-codec-1.5.jar
dans WEB-INF/lib
dossier de mon application et utilisé
import org.apache.commons.codec.binary.Base64;
dans le fichier Java.
Au cours de la compilation, quand je tape Base64
, il montre encodeBase64String
méthode est disponible. Mais au cours de l'exécution, il est en train de lancer une exception comme ceci:
java.lang.NoSuchMethodError:org.apache.commons.codec.binary.Base64.encodeBase64String
J'ai le POT dans le buildpath, mais je ne comprends pas pourquoi il me lance l'erreur ci-dessus.
- Post comment vous appelez cette méthode.
Vous devez vous connecter pour publier un commentaire.
Que cette méthode a été introduit dans les Communes Codec 1.4. Cette exception indique que vous avez une version plus ancienne de Communes Codec quelque part d'autre dans la webapp d'exécution du classpath qui a mis la priorité, dans classloading. Vérifier tous les chemins couverts par la webapp d'exécution du classpath. Cela comprend entre autres l'
Webapp/WEB-INF/lib
,YourAppServer/lib
,JRE/lib
etJRE/lib/ext
. Enfin, supprimer ou mettre à jour la délinquance ancienne version.Mise à jour: selon les commentaires, vous n'arrivez pas à le localiser. Je ne peux que suggérer à outcomment le code à l'aide de cette nouvelle méthode, puis ajoutez la ligne suivante à la place:
Qui doit imprimer le chemin absolu vers le fichier JAR, où il a été chargé de cours de l'exécution.
Mise à jour 2: cela ne semble pointer vers le bon fichier. Désolé, je ne peux pas expliquer votre problème maintenant. Tout ce que je peux suggérer, c'est d'utiliser un autre
Base64
méthode commeencodeBase64(byte[])
et puis il suffit de construire unnew String(bytes)
vous-même. Ou vous pouvez déposer à la bibliothèque et utiliser un autre Base64 codeur, par exemple cette une.Base64
classe est été chargé de cours de l'exécution./WEB-INF/lib
? Peut-être l'un d'entre eux est le reconditionnement de Communes Codec. Même si j'avais attendu que le code de l'emplacement de la source aurait retourné..servlet.jar
certainement ne leur appartient pas. Le supprimer. Tomcat a déjà sa propre.Certains de Google outillage comme GWT a une version intégrée de communes-codec avec un pré-1.4 Base64 classe. Vous devrez peut-être faire un tel outillage Pots inaccessibles de votre code par la refactorisation de votre projet tel que seules les parties de votre code qui ont besoin que de l'outillage peut voir la dépendance.
@Adam Augusta est bon, Une chose de plus
Apache-client HTTP pots est également livré dans la même catégorie que certains de google api.
org.apache.httpcomponents.httpclient_4.2.jar
et commons-codec-1.4.jar à la fois sur le chemin de classe, Ce qui est très possible que vous obtiendrez ce problème.
Cette prouver à tous les pots qui sont à l'aide de la première version du commun-codec en interne et en même temps quelqu'un à l'aide de commun-codec explicitement sur classpath trop.
Télécharger ce pot
Il résolu mon problème, c'est de 1,7.
J'ai connu 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 commons-codec 1.6 pot en C:\jboss-4.2.3.GA\server\default\lib
Vous avez besoin de la Apache Commons bibliothèque de Codecs 1.4 ci-dessus dans votre classpath.
Cette bibliothèque contient Base64 mise en œuvre.
Essayez d'ajouter 'commons-codec-1.8.jar" dans votre dossier JRE!
Il suffit de créer un objet de Base64 et de l'utiliser pour encoder ou décoder, lors de l'utilisation de org.apache.commons.codec.binaires.Base64 bibliothèque
Pour Encoder
Remplacer "Bonjour" avec le texte encodé dans un Format de Chaîne.
Pour Décoder
Ici codée est la variable de Chaîne pour être décodé