Je reçois l'exception suivante dans mon application web:java.lang.NoMethodError: org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString
java.util.concurrent.ExecutionException: java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString([B)Ljava/lang/String;
Le commons-codec-1.5.jar est ajouté dans mon classpath. Je le construis en utilisant Ant et ai ajouté les dépendances manuellement. Grâce à d'autres discussions sur le même sujet, j'ai découvert que l'ajout de la source de cette bibliothèque peut résoudre le problème, mais cela n'a pas fonctionné pour moi. J'ai également lu qu'avoir une autre bibliothèque avec la même classe peut causer le conflit et peut-être que cette classe peut ne pas avoir cette méthode qui a comme conséquence l'erreur. Cependant, j'ai vérifié qu'il n'y a pas d'autre version de la même bibliothèque. Est-il possible qu'une autre bibliothèque ait la même classe? Si oui, comment puis-je identifier cela et résoudre le problème?
Merci beaucoup @StuPointerException J'ai été capable de trouver le même paquet dans le fichier csrfguard jar. Mais le fichier csrfguard contient une version plus récente - 1.9 du fichier common-codec jar et a la méthode encodeBase64URLSafeString() pour laquelle j'obtiens le NoSuchMethodError. Mon pot est de la version 1.5 qui a aussi la méthode. Est-ce que cela cause vraiment le problème? –
Etrange, en regardant l'API, la méthode a été ajoutée en 1.4 et la signature n'a pas changé depuis, donc je ne pense pas. – StuPointerException
Je n'ai pas pu trouver la cause première de ce problème. Cependant, j'ai résolu le problème en ajoutant le code source pour le codec-commons dans mon projet. Ainsi, lorsque la guerre est emballée, les fichiers de classe pour Base64 seront dans les classes WEB-INF \. Le chargeur de classe va scanner cet emplacement avant WEB-INF \ lib et ainsi éviter le conflit dû aux pots. –