2012-11-02 6 views
12

Ho scritto un paio di servlet sul mio computer locale utilizzando eclipse. Li ho testati sulla mia macchina locale e tutto funziona perfettamente.Eccezione durante l'esecuzione del server Tomcat org.apache.catalina.deploy.WebXml addServlet

Ho quindi esportato il mio progetto come file .war e lo ho inserito nella directory webapps del mio tomcat in un'altra macchina a cui ho solo accesso ssh. Ho riavviato il server Tomcat e dopo aver guardato i file di log vedo che sta gettando il seguente eccezione:

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(AbstractSAXParser.java:604) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1759) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2915) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:625) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:819) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:748) 
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123) 
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1208) 
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:525) 
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1537) 
at org.apache.catalina.startup.ContextConfig.parseWebXml(ContextConfig.java:1875) 
at org.apache.catalina.startup.ContextConfig.getDefaultWebXmlFragment(ContextConfig.java:1472) 
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1250) 
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878) 
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:369) 
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:5173) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) 
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:968) 
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1646) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
at java.lang.Thread.run(Thread.java:679) 

Non ho idea di cosa significa questo?

+0

Questa discussione ti può aiutare. [collegamento] (http://stackoverflow.com/questions/6110660/porting-tomcat-6-to-7-problem-with-filter) –

+0

Ho visto quel thread, ma non sto usando Maven, né editing il web.xml. A mio avviso non avrei bisogno di web.xml in servlet3.0 perché sono sostituiti da annotazioni. Se questo è il motivo per cui sto ricevendo questo errore? – Roozbeh15

+0

Controlla se stai utilizzando la stessa versione in entrambi i posti. Di solito non dovrebbe importare. Quindi fornisci la versione della tua macchina e quella remota. Per favore pubblica anche il tuo snippet web.xml. Puoi vedere Xerces su tutta la traccia dello stack. C'è qualche servlet in web.xml che non può essere caricato. Arresta il server Tomcat remoto. Ripulisci le directory temporanee e di lavoro. Tomcat esplode i file di guerra una volta avviato. Puoi confermare che non ci sono file nella directory con lo stesso nome. – randominstanceOfLivingThing

risposta

20

Ho trovato la soluzione here.

Avevo ragione perché non è più necessario avere il web.xml. Puoi semplicemente usare le annotazioni per definire i percorsi per il tuo servlet. Ma il problema era che stavo includendo catalina.jar nella mia lib che stava causando problemi. Rimozione di catalina.jar sistemato le cose!

+1

Leggilo attentamente: http://stackoverflow.com/questions/4076601/how-do-i-import-the-javax-servlet-api-in-my-eclipse-project/4076706#4076706 Se hai posizionato 'catalina. jar' nel tuo '/ WEB-INF/lib' per qualche motivo non ovvio (per il quale non riesco a immaginare un errore ragionevole di avviamento come causa), allora potresti aver fatto anche qualche altra cosa sbagliata. – BalusC

+0

Avevo letto online che avrei dovuto mettere tutti i miei vasi sotto/WEB-INF/lib. Anche se avevo aggiunto tutti i vasi al mio progetto, non riuscivo a vederli in quella directory e pensavo che avrebbe potuto causare problemi in seguito. Quindi, ho praticamente copiato e incollato manualmente tutti i vasi in/WEB-INF/lib, cosa che non avrei dovuto possedere. Ma grazie a quel collegamento, aiutato. – Roozbeh15

+2

Indubbiamente intendeva i JAR specifici del webapp, non i JAR specifici del servlettaintainer. – BalusC

3

Ho incontrato questo problema dopo aver utilizzato Maven nel mio progetto. Come ha detto Adam, ho rimosso tutte le librerie di tomcat nelle dipendenze Maven e quindi il problema risolto.

Problemi correlati