it-swarm.com.de

java.lang.NoSuchMethodError: org.Apache.commons.codec.binary.Base64.encodeBase64String () in Java EE-Anwendung

Ich entwickle eine Java EE-Anwendung, in der ich Base64 Encoding/Decoding benötige

Also habe ich commons-codec-1.5.jar im WEB-INF/lib-Ordner meiner Anwendung hinzugefügt und verwendet 

import org.Apache.commons.codec.binary.Base64;

in der Java-Datei.

Wenn ich während der Kompilierzeit Base64 eingebe, wird angezeigt, dass die encodeBase64String-Methode verfügbar ist. Zur Laufzeit wird jedoch eine Ausnahme wie diese ausgelöst:

Java.lang.NoSuchMethodError:org.Apache.commons.codec.binary.Base64.encodeBase64String

Ich habe den JAR im Buildpath, verstehe aber immer noch nicht, warum ich den obigen Fehler bekomme.

36
Sreeram

Diese Methode wurde eingeführt in Commons Codec 1.4. Diese Ausnahme weist darauf hin, dass Sie eine ältere Version von Commons Codec im Laufzeitklassenpfad der Webanwendung haben, die beim Laden von Klassen Vorrang hat. Überprüfen Sie alle Pfade, die vom Laufzeitklassenpfad der Webanwendung abgedeckt werden. Dies beinhaltet unter anderem den Webapp/WEB-INF/lib, YourAppServer/lib, JRE/lib und JRE/lib/ext. Schließlich entfernen oder aktualisieren Sie die anstößige ältere Version.


Update : Wie aus den Kommentaren hervorgeht, können Sie es nicht finden. Ich kann nur vorschlagen, den Code mit dieser neueren Methode zu kommentieren und dann die folgende Zeile einzufügen:

System.out.println(Base64.class.getProtectionDomain().getCodeSource().getLocation());

Das sollte den absoluten Pfad zu der JAR-Datei ausgeben, von der es während der Laufzeit geladen wurde.


Update 2 : Dies schien auf die richtige Datei zu verweisen. Entschuldigung, ich kann Ihr Problem momentan nicht mehr erklären. Ich kann nur vorschlagen, eine andere Base64 -Methode wie encodeBase64(byte[]) zu verwenden und dann einfach new String(bytes) selbst zu erstellen. Oder Sie können diese Bibliothek löschen und einen anderen Base64-Encoder verwenden, z. B. dieser .

73
BalusC

@Adam Augusta hat recht, noch etwas 

Apache-HTTP-Client-Gläser kommen auch in die gleiche Kategorie wie einige Google-APIs.

org.Apache.httpcomponents.httpclient_4.2.jar und commons-codec-1.4.jar beides auf classpath.

Dies beweist allen Gläsern, die eine frühe Version von common-codec verwenden, und gleichzeitig jemand, der common-codec explizit auf classpath verwendet.

6
pkm1986

Einige Google-Tools wie GWT verfügen über eine eingebettete Version von Commons-Codec mit einer Base64-Klasse vor 1.4. Möglicherweise müssen Sie solche Tool-JARs für Ihren Code unzugänglich machen, indem Sie Ihr Projekt so umgestalten, dass nur die Teile des Codes, die dieses Tool benötigen, die Abhängigkeit erkennen können.

5
Adam Augusta

Laden Sie dieses Glas

Es hat mein Problem gelöst, das ist 1.7.

2
asifaftab87

Bei der Bereitstellung meiner Webanwendung hatte ich mit JBoss 4.2.3 GA das gleiche Problem. Ich habe das Problem gelöst, indem ich meinen 1.6-Jar von commons-codec in C:\jboss-4.2.3.GA\server\default\lib kopiert habe

1
Ktonneh

Sie benötigen die Apache Commons Codec-Bibliothek 1.4 oder höher in Ihrem Klassenpfad . Diese Bibliothek enthält die Base64-Implementierung.

1
Mikhail Tanaev

Fügen Sie 'commons-codec-1.8.jar' in Ihren JRE-Ordner ein!

0

Erstellen Sie einfach ein Objekt von Base64 und verwenden Sie es zum Codieren oder Decodieren, wenn Sie die Bibliothek org.Apache.commons.codec.binary.Base64 verwenden

Zu kodieren

Base64 ed = new Base64 ();

String encoded = new String (ed.encode ("Hello" .getBytes ()));

Ersetzen Sie "Hello" durch den Text, der im String-Format codiert werden soll.

Zu decodieren

Base64 ed = new Base64 ();

String decoded = new String (ed.decode (encoded.getBytes ()));

Hier ist die zu decodierende String-Variable codiert

0
Karan