Verursacht von: java.lang.NoClassDefFoundError: org / apache / log4j / Logger
Ich habe ein Interessantes problem, in dem die org.apache.log4j.Logger-Klasse wird nicht gefunden während der Laufzeit. Ich versuche, autorisiert und das ist, wo es andernfalls:
OAuthAuthorizer oauthAuthorizer = new OAuthAuthorizer(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, SAML_PROVIDER_ID, userId);
Ich bin mit JDeveloper 11.1.1.6. Hier ist was ich weiß:
-
Ist, habe ich mich in meinem UI.war/WEB-INF/lib-Verzeichnis, und ich sehe die log4j-1.2.17.jar es.
-
Der Klasse beschweren, es ist org.opensaml.xml.XMLConfigurator
Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Logger at org.opensaml.xml.XMLConfigurator.<clinit>(XMLConfigurator.java:60) at org.opensaml.DefaultBootstrap.initializeXMLTooling(DefaultBootstrap.java:195) at org.opensaml.DefaultBootstrap.bootstrap(DefaultBootstrap.java:91) at com.intuit.ipp.aggcat.util.SAML2AssertionGenerator.getSAMLBuilder(SAML2AssertionGenerator.java:156) at com.intuit.ipp.aggcat.util.SAML2AssertionGenerator.createSubject(SAML2AssertionGenerator.java:187) at com.intuit.ipp.aggcat.util.SAML2AssertionGenerator.buildAssertion(SAML2AssertionGenerator.java:114) at com.intuit.ipp.aggcat.util.SAML2AssertionGenerator.generateSignedAssertion(SAML2AssertionGenerator.java:83) at com.intuit.ipp.aggcat.util.SamlUtil.createSignedSAMLPayload(SamlUtil.java:156) at com.intuit.ipp.aggcat.util.OAuthUtil.getOAuthTokens(OAuthUtil.java:60) at com.intuit.ipp.aggcat.core.OAuthAuthorizer.<init>(OAuthAuthorizer.java:85) at com.incomemax.view.intuit.WebUtil.getAggCatService(WebUtil.java:91)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:305) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:246) ... 64 more
-
Ich decomplied XMLConfigurator und seltsamerweise ist es nicht importieren Sie org.apache.log4j.Logger verwendet Es org.slf4j.Logger, die ist auch in meinem jars-Verzeichnis (slf4j-api-1.7.5.jar). Interessant ist auch, dass die Linie 60 (siehe stack-trace) ist eine leere Zeile in meine dekompilieren.
-
Natürlich, wenn ich add-Logger.xxxxx während der design-Zeit, es findet es einfach nur gut.
-
Ich bin mit dem code/Gläser direkt aus dem sample-java-code, sondern importiert in meine bestehende Anwendung.
Ich habe scheuern im web für die Antworten, und ich glaube, ich habe es überprüft, alle Bereiche, die ich denken kann. Ich auch auf dieser sehr guten Seite: http://myarch.com/classnotfound/
Vollmacht ist Schritt 1 bei der Verwendung der Lexware Entwickler-API, bin ich irgendwie stecken.
Hinzufügen Ausgabe von @jhadesdev Vorschlag:
Alle Versionen von log4j Logger:
- zip:C:/Users/Chris/AppData/Roaming/JDeveloper/system11.1.1.6.38.61.92/DefaultDomain/servers/DefaultServer/tmp/_WL_user/j2ee-app/lt5l71/war/WEB-INF/lib/log4j-1.2.17.jar!/org/apache/log4j/Logger.class
Alle Versionen von log4j sichtbar von der classloader der OAuthAuthorizer Klasse:
- zip:C:/Users/Chris/AppData/Roaming/JDeveloper/system11.1.1.6.38.61.92/DefaultDomain/servers/DefaultServer/tmp/_WL_user/j2ee-app/lt5l71/war/WEB-INF/lib/log4j-1.2.17.jar!/org/apache/log4j/Logger.class
Alle Versionen von XMLConfigurator:
-
jar:file:/C:/Oracle/Middleware11116/modules/com.bea.core.bea.opensaml2_1.0.0.0_6-1-0-0.jar!/org/opensaml/xml/XMLConfigurator.class
-
zip:C:/Users/Chris/AppData/Roaming/JDeveloper/system11.1.1.6.38.61.92/DefaultDomain/servers/DefaultServer/tmp/_WL_user/j2ee-app/lt5l71/war/WEB-INF/lib/ipp-java-aggcat-v1-devkit-1.0.2.jar!/org/opensaml/xml/XMLConfigurator.class
-
zip:C:/Users/Chris/AppData/Roaming/JDeveloper/system11.1.1.6.38.61.92/DefaultDomain/servers/DefaultServer/tmp/_WL_user/j2ee-app/lt5l71/war/WEB-INF/lib/xmltooling-1.3.1.jar!/org/opensaml/xml/XMLConfigurator.class
Alle Versionen von XMLConfigurator sichtbar von der class-loader der OAuthAuthorizer Klasse:
-
jar:file:/C:/Oracle/Middleware11116/modules/com.bea.core.bea.opensaml2_1.0.0.0_6-1-0-0.jar!/org/opensaml/xml/XMLConfigurator.class
-
zip:C:/Users/Chris/AppData/Roaming/JDeveloper/system11.1.1.6.38.61.92/DefaultDomain/servers/DefaultServer/tmp/_WL_user/j2ee-app/lt5l71/war/WEB-INF/lib/ipp-java-aggcat-v1-devkit-1.0.2.jar!/org/opensaml/xml/XMLConfigurator.class
-
zip:C:/Users/Chris/AppData/Roaming/JDeveloper/system11.1.1.6.38.61.92/DefaultDomain/servers/DefaultServer/tmp/_WL_user/j2ee-app/lt5l71/war/WEB-INF/lib/xmltooling-1.3.1.jar!/org/opensaml/xml/XMLConfigurator.class
Ich arbeite noch an der Auswertung der Ergebnisse.
InformationsquelleAutor der Frage lovebeer84 | 2014-01-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Während der Laufzeit Ihrer Anwendung nicht finden kann, wird die jar.
Entnommen diese Antwort von Jared:
Gemeinsamkeiten und Unterschiede
InformationsquelleAutor der Antwort Premraj
Können Sie die folgenden maven-dependency in Ihrem pom-Datei. Andernfalls können Sie die folgenden zwei Gläser aus dem net und fügen Sie es in das build-Pfad.
Dies ist kopiert von meinem Projekt arbeiten. Zuerst stellen Sie sicher, es ist Arbeit in Ihrem Projekt. Dann Sie können ändern, die Versionen zu verwenden, eine andere(Versionen) kompatibel Gläser.
Für AggCat finden Sie die POM-Datei die Beispiel-java-Applikation.
https://github.com/IntuitDeveloperRelations/IPP_Sample_Code/blob/master/CustomerAccountData/Java/AggCatSampleApplication/pom.xml
Dank
InformationsquelleAutor der Antwort Manas Mukherjee
Basierend auf der stacktrace, ein intuit-Klasse Kom.intuit.ipp.aggcat.util.SAML2AssertionGenerator braucht eine saml-jar im classpath.
Einem saml-Klasse org.opensaml.xml.XMLConfigurator braucht es wiederum log4j, der sich im KRIEG, aber kann es nicht finden.
Eine Erklärung dafür ist, dass die Klasse XMLConfigurator, muss log4j gefunden wurde, die sich nicht im KRIEG, sondern auf einem downstream-classloader. könnte ein saml-jar fehlen aus dem KRIEG?
Klasse XMLConfigurator, muss log4j und kann es nicht finden auf der Ebene der classloader, das es geladen, und die log4j-version auf den KRIEG ist nicht sichtbar, dass insbesondere auf die classloader.
In Ordnung um dies zu beheben, eine Möglichkeit ist das hinzufügen dieses, bevor Sie die oauth-Aufruf:
Auch wenn Sie mit Java 7 haben Sie einen Blick auf jHadeses ist ein tool das ich gemacht, um Hilfe zur Problembehandlung für diese Art von Problemen.
Um zu sehen, was Los ist, könntest du die Ergebnisse posten der classpath-Abfragen vor, für die container ist das passiert, tomcat, jetty? Es wäre besser, um den vollständigen stacktrace mit allem verursacht durch die in pastebin, nur für den Fall.
InformationsquelleAutor der Antwort Angular University
Check-in Deployment Assembly,
Ich habe den gleichen Fehler, wenn ich die Generierung der war-Datei mit dem "maven-clean install" Weg und bereitstellen Händisch, funktioniert es einwandfrei, aber wenn ich das runtime-enviroment (eclipse) - die Probleme kommen.
Die Lösung für mich (für die eclipse-IDE) gehe zu: "proyect Eigenschaften" --> "Deployment Assembly" --> "Hinzufügen" --> "das Glas, das Sie benötigen", in meinem Fall java "build path entries".
Vielleicht kann dir dabei helfen, litle!
InformationsquelleAutor der Antwort perezmirabile
Den Anregungen @jhadesdev und die Erklärungen von anderen, die ich gefunden habe, das Problem hier.
Nachdem Sie den code, um zu sehen, was sichtbar war, zu der verschiedene class loader fand ich dies:
Bemerkte ich, dass eine andere version von XMLConfigurator war möglicherweise immer abgeholt.
Ich dekompiliert, die Klasse und fand diese in Zeile 60 (wo war der Fehler in den ursprünglichen stack-trace)
private static final Logger log = Logger.getLogger(XMLConfigurator.class);
und das war Klasse importieren vonorg.apache.log4j.Logger
!So war es dieser Klasse, die war geladen und verwendet. Mein fix war, benennen Sie die jar-Datei, die diese Datei kann ich nicht finden, wo ich explizit oder indirekt laden. Das kann ein problem sein, wenn ich tatsächlich bereitstellen.
Vielen Dank für alle Hilfe und das dringend benötigte Lektion, Klasse laden.
InformationsquelleAutor der Antwort lovebeer84
Hatte das gleiche problem, es war in der Tat verursacht von weblogic blöd mit seinen eigenen opensaml Umsetzung. Um es zu lösen, man muss es sagen, um Klassen zu laden, die aus
WEB-INF/lib
für dieses Paket inweblogic.xml
:vielleicht
<prefer-web-inf-classes>true</prefer-web-inf-classes>
würde auch funktionieren.InformationsquelleAutor der Antwort Denis Tulskiy
java.lang.ClassNotFoundException wird zeigen, dass die Klasse nicht gefunden in Klasse Weg.
es könnte die version von log4j ist nicht kompatibel.
überprüfen Sie für andere log4j-version.
InformationsquelleAutor der Antwort Dharmraj