2014-09-03 3 views
1

J'ai créé un service Web REST, qui intercepterait les requêtes d'un client et interrogerait une table d'employés dans la base de données MySQL via Hibernate et retournerait le récupéré des lignes au client. Le service Web appelle une classe dans un autre projet qui traite uniquement de l'interaction avec la base de données MySQL en utilisant Hibernate. Pour l'activer, j'utilise Maven pour construire le projet de base de données dans un pot que je place ensuite dans le dossier WEB-INF du service web. Les structures de projet des trois projets sont jointes ci-joint.java.lang.NoSuchMethodError: org.jboss.logging.Logger.getMessageLogger dans JBoss

J'avais regroupé tous les fichiers requis par Hibernate dans les dépendances Maven. En conséquence, quand j'ai essayé d'appeler le service déployé à partir du client, il a lancé une exception dans JBoss en disant:

"Configuration resource: hibernate.cfg.xml Warning: Caught exception attempting to use SAX to load a SAX XMLReader Warning: Exception was: java.lang.ClassCastException: org.apache.xerces.parsers.SAXParser cannot be cast to org.xml.sax.XMLReader"

Après avoir parcouru beaucoup de solutions toutes pointant que cela est dû me Regrouper les En mode veille, j'ai supprimé les dépendances de Maven et j'ai placé les fichiers JAR dans le dossier lib du serveur JBoss sur lequel je déployais mon application. Cependant, maintenant, une nouvelle exception a surgi, et je suis en train de coller toute la pile.

14:10:46,788 ERROR [STDERR] java.lang.NoSuchMethodError:  org.jboss.logging.Logger.getMessageLogger(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object; 
14:10:46,789 SEVERE [ContainerResponse] The exception contained within MappableContainerException could not be mapped to a response, re-throwing to the HTTP container 
java.lang.ExceptionInInitializerError 
at com.employee.database.HibernateUtil.<clinit>(HibernateUtil.java:31) 
at com.employee.database.AccessEmployeeDatabase.getEmployeeList(AccessEmployeeDatabase.java:14) 
at com.alumnus.employeemanagement.EmployeeManagement.fetchEmployeeDetailsFromDB(EmployeeManagement.java:48) 
at com.alumnus.employeemanagement.EmployeeManagement.getEmployeeDetails(EmployeeManagement.java:28) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) 
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185) 
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) 
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302) 
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) 
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) 
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542) 
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473) 
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419) 
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409) 
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409) 
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:540) 
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:715) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190) 
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92) 
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126) 
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
at java.lang.Thread.run(Thread.java:744) 
Caused by: java.lang.NoSuchMethodError: org.jboss.logging.Logger.getMessageLogger(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object; 
at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:192) 
at com.employee.database.HibernateUtil.<clinit>(HibernateUtil.java:21) 
... 43 more 
14:10:46,791 ERROR [[Employee REST Service]] Servlet.service() for servlet Employee REST Service threw exception 
java.lang.NoSuchMethodError: org.jboss.logging.Logger.getMessageLogger(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object; 
at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:192) 
at com.employee.database.HibernateUtil.<clinit>(HibernateUtil.java:21) 
at com.employee.database.AccessEmployeeDatabase.getEmployeeList(AccessEmployeeDatabase.java:14) 
at com.alumnus.employeemanagement.EmployeeManagement.fetchEmployeeDetailsFromDB(EmployeeManagement.java:48) 
at com.alumnus.employeemanagement.EmployeeManagement.getEmployeeDetails(EmployeeManagement.java:28) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) 
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185) 
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) 
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302) 
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) 
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) 
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542) 
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473) 
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419) 
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409) 
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409) 
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:540) 
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:715) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190) 
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92) 
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126) 
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
at java.lang.Thread.run(Thread.java:744) 

J'ai longuement recherché cette exception aussi bien, et la seule solution que je peux trouver est qu'il peut y avoir deux pots d'exploitation différents sur le chemin de classe, et je dois retirer un d'entre eux. J'ai trouvé que JBoss 5.1.0.GA utilise le fichier jboss-logging-spi.jar pour sa consignation et qu'il ne peut pas être supprimé du dossier lib dans sa racine. J'ai ajouté jboss-logging-3.1.3.GA.jar dans le dossier lib du serveur de déploiement, et si je le supprime, ClassNotFoundExceptions sont lancées. Donc, je suis maintenant dans une solution. Je ne peux pas supprimer l'un d'entre eux, et si je n'en retire aucun, alors NoSuchMethodError se produit. S'il vous plaît aidez-moi à trouver une solution à cela.

+0

jetez un oeil à ma réponse –

Répondre

0

Essayez cette

Vous pouvez essayer: -verbose:class et vérifier les journaux de votre serveur géré pour vérifier si la classe est chargée correctement.

Un moyen efficace de confirmer quel pot intrusive pourrait se charger est en exécutant un whereis.jsp dans le même webcontext (à savoir JVM exemple) de cette application.

whereis.jsp

<%@ page import="java.security.*" %> 
<%@ page import="java.net.URL" %> 
<% 
Class cls = org.jboss.logging.Logger.class; 
ProtectionDomain pDomain = cls.getProtectionDomain(); 
CodeSource cSource = pDomain.getCodeSource(); 
URL loc = cSource.getLocation(); 
out.println(loc); 
// it should print something like "c:/jars/MyJar.jar" 
%> 

Se référer également ces liens, link1 et link2 et link3

Le problème peut être résolu à l'aide du jboss-déploiement structure.xml

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2"> 
<deployment> 
    <exclusions> 
    <module name="org.javassist" /> 
    <module name="org.slf4j" /> 
    <module name="org.jboss.logmanager" /> 
    </exclusions> 

<exclude-subsystems> 
    <subsystem name="logging" /> 
</exclude-subsystems> 

Qui peut être créé sous WEB-INF. Vous devriez également mettre votre log4j.jar in WEB-INF/lib ou autre.

+0

Ce sont toutes des réponses standard à la question, que j'avais déjà vécu comme je l'ai dit. Donc merci pour la réponse, mais je crains qu'ils n'aient pas fonctionné dans mon cas. – abhishek

Questions connexes