Je migre mon application Web de Jboss 4.2 vers Tomcat 7.
Après avoir utilisé Tomcat 7, je suis confronté à l'exception suivante.
Java.lang.NoSuchMethodException: org.Apache.catalina.deploy.WebXml addServlet
at org.Apache.Tomcat.util.IntrospectionUtils.callMethod1(IntrospectionUtils.Java:855)
at org.Apache.Tomcat.util.digester.SetNextRule.end(SetNextRule.Java:201)
at org.Apache.Tomcat.util.digester.Digester.endElement(Digester.Java:1051)
at com.Sun.org.Apache.xerces.internal.parsers.AbstractSAXParser.endElement(Unknown Source)
at com.Sun.org.Apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
at com.Sun.org.Apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.Sun.org.Apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.Sun.org.Apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.Sun.org.Apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.Sun.org.Apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.Sun.org.Apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.Sun.org.Apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.Sun.org.Apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.Apache.Tomcat.util.digester.Digester.parse(Digester.Java:1537)
at org.Apache.catalina.startup.ContextConfig.parseWebXml(ContextConfig.Java:1883)
at org.Apache.catalina.startup.ContextConfig.getDefaultWebXmlFragment(ContextConfig.Java:1469)
at org.Apache.catalina.startup.ContextConfig.webConfig(ContextConfig.Java:1246)
at org.Apache.catalina.startup.ContextConfig.configureStart(ContextConfig.Java:878)
at org.Apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.Java:376)
at org.Apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.Java:119)
at org.Apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.Java:90)
at org.Apache.catalina.core.StandardContext.startInternal(StandardContext.Java:5269)
at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:150)
at org.Apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.Java:1559)
at org.Apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.Java:1549)
at Java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at Java.util.concurrent.FutureTask.run(Unknown Source)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at Java.lang.Thread.run(Unknown Source)
J'ai essayé de supprimer le catalina.jar
(selon la solution donnée pour la même exception) de la bibliothèque pour résoudre le problème mais cela n'a pas fonctionné.
Je ne trouve aucun moyen de résoudre ce problème si quelqu'un peut aider s'il vous plaît sur cette question.
Dans votre pom.xml Si vous avez inclus des dépendances telles que Tomcat-catalina, Mettez la portée comme prévu
<dependency>
<groupId>org.Apache.Tomcat</groupId>
<artifactId>Tomcat-catalina</artifactId>
<version>7.0.47</version>
<scope>provided</scope>
</dependency>
Le conteneur (ici, Tomcat) lui-même fournit certaines dépendances (comme Tomcat-catalina jar) lorsque vous déployez votre application. Donc, vous n'avez pas besoin de les inclure dans votre application. Mais les pots sont nécessaires pour la compilation. Ceci est réalisé en définissant le périmètre comme "fourni"
Je crois que cette erreur concerne le déploiement de l’Assemblée. Vous n'avez pas besoin du catalina.jar
dans l'assembly de déploiement.
Pour ceux comme moi confrontés à ce problème avec Spring Boot, l’ajout de cette dépendance a résolu le problème:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
<scope>provided</scope>
</dependency>
Pour moi, cette erreur était générée car mon implémentation dérivée de ServletContextListener avait un paramètre PARAMETERCONCTRUCTOR. Apparemment, Spring/Java/Whatever ne peut pas le charger si vous avez des paramètres ctor, même s'ils ont des valeurs dans le contexte de l'application.
J'espère que cela aide les autres.