Causé par: java.lang.NoClassDefFoundError: org/apache/log4j/Enregistreur


J'ai un problème intéressant dans lequel l'organisation.Apache.la classe log4j.Logger n'est pas trouvée pendant l'exécution. J'essaie d'être autorisé et c'est là que ça échoue:

OAuthAuthorizer oauthAuthorizer = new OAuthAuthorizer(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, SAML_PROVIDER_ID, userId);

J'utilise JDeveloper 11.1.1.6. Voici ce que je sais:

  1. J'ai regardé dans mon INTERFACE.le répertoire war/WEB-INF/lib et je vois le log4j-1.2.17.pot là.

  2. La classe qui s'en plaint est 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
    
  3. J' decomplied XMLConfigurator et curieusement, il n'importe pas org.Apache.log4j. Logger Il utilise org.slf4j. Logger qui se trouve également dans mon répertoire jars (slf4j-api-1.7.5.pot). Il est également intéressant de noter que la ligne 60 (voir trace de pile) est une ligne vide dans ma décompilation.

  4. Bien sûr, si j'ajoute Logger.xxxxx pendant le temps de conception, il le trouve très bien.

  5. J'utilise le code/jars directement à partir de l'exemple de code java, mais importé dans mon application existante.

J'ai j'ai parcouru le Web pour trouver des réponses et je crois que j'ai vérifié tous les domaines auxquels je peux penser. J'ai également fait référence à cette très bonne page: http://myarch.com/classnotfound/

Étant donné que l'autorisation est l'étape 1 de l'utilisation de l'API de développement Intuit, je suis un peu coincé.

Ajout de la sortie de @ jhadesdev suggestion:

Toutes les versions de log4j Enregistreur:

  • 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.bocal!/org/apache/log4j/Logger.classe

Toutes les versions de log4j visibles depuis le classloader de la classe OAuthAuthorizer:

  • 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.bocal!/org/apache/log4j/Logger.classe

Toutes les versions de XMLConfigurator: versions de XMLConfigurator visibles depuis le chargeur de classe de OAuthAuthorizer je travaille encore sur l'interprétation des résultats.

Author: grg, 2014-01-03

8 answers

Pendant l'exécution, votre application ne parvient pas à trouver le fichier jar.

Prises à partir de cette réponse par Jared:

Il est important de garder deux exceptions différentes dans notre tête dans ce cas:

  1. Java.lang.ClassNotFoundException Ceci un Exception, il indique que le la classe n'a pas été trouvée sur le chemin de classe. Cela indique que nous étions essayer de charger la définition de classe, et la classe n'existait pas sur le classpath.

  2. Java.lang.NoClassDefFoundError C'est Error, il indique que la JVM regardé dans sa structure de données de définition de classe interne pour le définition d'une classe et ne la trouvent pas. Ceci est différent de celui disant qu'il ne pouvait pas être chargé à partir du chemin de classe. Habituellement, cette indique que nous avons précédemment tenté de charger une classe à partir du classpath, mais il a échoué pour une raison quelconque - maintenant, nous essayons à nouveau, mais nous ne sommes pas va même essayer de le charger, parce que nous avons échoué chargement plus tôt. L'échec précédent pourrait être un ClassNotFoundException ou une ExceptionInInitializerError (indiquant une défaillance dans le bloc d'initialisation statique) ou de toute autre problème. Le fait est qu'une NoClassDefFoundError n'est pas nécessairement une classpath problème.

Les similitudes et les différences

 24
Author: Premraj, 2018-03-26 00:29:28

Vous pouvez utiliser la dépendance maven suivante dans votre fichier pom. Sinon, vous pouvez télécharger les deux fichiers jar suivants à partir de net et les ajouter à votre chemin de construction.

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.6.4</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.4</version>
</dependency>

Ceci est copié de mon projet de travail. Assurez-vous d'abord qu'il fonctionne dans votre projet. Ensuite, vous pouvez modifier les versions pour utiliser d'autres pots compatibles (versions).

Pour AggCat, vous pouvez vous référer au fichier POM de l'exemple java application.

Https://github.com/IntuitDeveloperRelations/IPP_Sample_Code/blob/master/CustomerAccountData/Java/AggCatSampleApplication/pom.xml

Merci

 7
Author: Manas Mukherjee, 2014-01-03 18:47:06

Enregistrement dans l'assemblage de déploiement,

J'ai la même erreur, lorsque je génère le fichier war avec la méthode "maven clean install" et que je le déploie manuellement, cela fonctionne bien, mais lorsque j'utilise l'environnement d'exécution (eclipse), les problèmes surviennent.

La solution pour moi (pour eclipse ID) va à: "propriétés proyect" - > "Assemblage de déploiement" - > "Ajouter" - > "le pot dont vous avez besoin", dans mon cas java "entrées de chemin de construction". Peut-être peut aider un peu!

 5
Author: perezmirabile, 2016-11-07 01:38:34

Basé sur la stacktrace, une classe intuit com.intuit.ipp.aggcat.util.Saml2assertigenerator a besoin d'un jar saml sur le chemin de classe.

Une organisation de classe saml.opensaml.XML.XMLConfigurator a besoin de son tour log4j, qui est à l'intérieur de la GUERRE mais ne peut pas le trouver.

Une explication à cela est que la classe XMLConfigurator qui a besoin de log4j n'a pas été trouvée dans WAR mais sur un classloader en aval. un pot saml pourrait-il manquer à la GUERRE?

La classe XMLConfigurator qui besoins log4j ne peut pas le trouver au niveau du chargeur de classe qui l'a chargé, et la version log4j sur la GUERRE n'est pas visible sur ce chargeur de classe particulier.

Afin de dépanner ceci, une manière est d'ajouter ceci avant l'appel oauth:

System.out.println("all versions of log4j Logger: " + getClass().getClassLoader().getResources("org/apache/log4j/Logger.class") );

System.out.println("all versions of XMLConfigurator: " + getClass().getClassLoader().getResources("org/opensaml/xml/XMLConfigurator.class") );

System.out.println("all versions of XMLConfigurator visible from the classloader of the OAuthAuthorizer class: " + OAuthAuthorizer.class.getClassLoader().getResources("org/opensaml/xml/XMLConfigurator.class") );

System.out.println("all versions of log4j visible from the classloader of the OAuthAuthorizer class: " + OAuthAuthorizer.class.getClassloader().getResources("org/apache/log4j/Logger.class") );

Aussi, si vous utilisez Java 7, jetez un oeil à jHades , c'est un outil que j'ai fait pour aider à résoudre ce type de problèmes.

Afin de voir ce qui se passe, pourriez-vous poster les résultats des requêtes classpath ci-dessus, pour quel conteneur cela se passe-t-il, tomcat, jetty? Il serait préférable de mettre la pile complète avec tous les by causés dans pastebin, juste au cas où.

 4
Author: Angular University, 2014-04-11 11:06:06

Avec les suggestions @jhadesdev et les explications des autres, j'ai trouvé le problème ici.

Après avoir ajouté le code pour voir ce qui était visible pour les différents chargeurs de classe, j'ai trouvé ceci:

All versions of log4j Logger: 
  zip:<snip>war/WEB-INF/lib/log4j-1.2.17.jar!/org/apache/log4j/Logger.class

All versions of log4j visible from the classloader of the OAuthAuthorizer class: 
  zip:<snip>war/WEB-INF/lib/log4j-1.2.17.jar!/org/apache/log4j/Logger.class

All versions of XMLConfigurator: 
  jar:<snip>com.bea.core.bea.opensaml2_1.0.0.0_6-1-0-0.jar!/org/opensaml/xml/XMLConfigurator.class
  zip:<snip>war/WEB-INF/lib/ipp-java-aggcat-v1-devkit-1.0.2.jar!/org/opensaml/xml/XMLConfigurator.class
  zip:<snip>war/WEB-INF/lib/xmltooling-1.3.1.jar!/org/opensaml/xml/XMLConfigurator.class

All versions of XMLConfigurator visible from the classloader of the OAuthAuthorizer class: 
  jar:<snip>com.bea.core.bea.opensaml2_1.0.0.0_6-1-0-0.jar!/org/opensaml/xml/XMLConfigurator.class
  zip:<snip>war/WEB-INF/lib/ipp-java-aggcat-v1-devkit-1.0.2.jar!/org/opensaml/xml/XMLConfigurator.class
  zip:<snip>war/WEB-INF/lib/xmltooling-1.3.1.jar!/org/opensaml/xml/XMLConfigurator.class

J'ai remarqué qu'une autre version de XMLConfigurator était peut-être récupérée. J'ai décompilé cette classe et je l'ai trouvée à la ligne 60 (où l'erreur était dans la trace de pile d'origine) private static final Logger log = Logger.getLogger(XMLConfigurator.class); et cette classe importait à partir de org.apache.log4j.Logger!

C'était donc cette classe qui était chargé et utilisé. Mon correctif était de renommer le fichier jar qui contenait ce fichier car je ne trouve pas où je le charge explicitement ou indirectement. Ce qui peut poser un problème lorsque je déploie réellement.

Merci pour toute l'aide et la leçon si nécessaire sur le chargement de classe.

 3
Author: lovebeer84, 2014-01-03 21:48:02

Avait le même problème, il a en effet été causé par weblogic utilisant bêtement sa propre implémentation opensaml. Pour le résoudre, vous devez lui dire de charger des classes à partir de WEB-INF/lib pour ce paquet dans weblogic.xml:

    <prefer-application-packages>
        <package-name>org.opensaml.*</package-name>
    </prefer-application-packages>

Peut-être que <prefer-web-inf-classes>true</prefer-web-inf-classes> fonctionnerait aussi.

 2
Author: Denis Tulskiy, 2014-05-05 07:05:50

Java.lang.ClassNotFoundException indique que la classe n'est pas trouvée dans le chemin de la classe. il se pourrait que la version de log4j ne soit pas compatible. vérifiez la version différente de log4j.

 1
Author: Dharmraj, 2014-01-03 17:51:43

J'ai eu le même problème, pour moi, cela a réglé le problème:
clic droit sur le projet ->maven -> mettre à jour le projet

maven - > mettre à jour le projet

 0
Author: user648026, 2018-09-13 18:31:38