2012-11-02 14 views
12

Napisałem kilka serwletów na moim lokalnym komputerze za pomocą środowiska Eclipse. Przetestowałem je na moim lokalnym komputerze i wszystko działa idealnie.Wyjątek podczas uruchamiania serwera Tomcat org.apache.catalina.deploy.WebXml addServlet

Następnie wyeksportowałem mój projekt jako plik .war i umieściłem go w katalogu webapps mojego tomcat na innej maszynie, do której mam dostęp tylko ssh. I ponownie uruchomić mój serwer Tomcat i po pobycie w plikach dziennika widzę, że rzuca następujący wyjątek:

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) 

Nie mam pojęcia co to oznacza?

+0

Ten wątek może ci pomóc. [link] (http://stackoverflow.com/questions/6110660/porting-tomcat-6-to-7-problem- withfilter) –

+0

Widziałem tę nitkę, ale nie używam maven ani edycji plik web.xml. W moim rozumieniu nie powinienem potrzebować pliku web.xml w servlet3.0, ponieważ są one zastępowane adnotacjami. Jeśli tak, to dlaczego otrzymuję ten błąd? – Roozbeh15

+0

Sprawdź, czy używasz tej samej wersji w obu miejscach. Zwykle nie powinno to mieć znaczenia. Podaj wersję swojej i zdalnej maszyny. Proszę również zamieścić swój fragment web.xml. Możesz zobaczyć Xerces na całym śladzie stosu. W pliku web.xml znajduje się aplet, którego nie można załadować. Zatrzymaj swój zdalny serwer tomcat. Oczyść swoje katalogi tymczasowe i robocze. Tomcat eksploduje pliki wojenne po uruchomieniu. Czy możesz potwierdzić, że w katalogu o tej samej nazwie nie ma plików? – randominstanceOfLivingThing

Odpowiedz

20

Znalazłem rozwiązanie here.

Miałem rację, ponieważ nie musisz już mieć pliku web.xml. Możesz po prostu użyć adnotacji, aby zdefiniować ścieżki dla swojego serwletu. Ale problem polegał na tym, że włączałem plik catalina.jar do mojej biblioteki, co powodowało problemy. Usunięcie catalina.jar naprawiło błędy!

+1

Przeczytaj uważnie: http://stackoverflow.com/questions/4076601/how-do-i-import-the-javax-servlet-api-in-my-eclipse-project/4076706#4076706 Jeśli umieściłeś 'catalina. słoik 'w twoim'/WEB-INF/lib' z jakiegoś nieoczywistego powodu (dla którego nie potrafię wyobrazić sobie żadnego uzasadnionego błędu startera jako przyczyny), mógłbyś również zrobić coś złego. – BalusC

+0

Czytałem w Internecie, że powinienem umieścić wszystkie moje słoiki pod/WEB-INF/lib. Mimo że dodałem wszystkie słoiki do mojego projektu, nie widziałem ich w tym katalogu i uważałem, że może to powodować problemy później. Zasadniczo skopiowałem i wkleiłem wszystkie słoiki do/WEB-INF/lib ręcznie, czego nie powinienem mieć. Ale dzięki temu linkowi pomogło. – Roozbeh15

+2

Niewątpliwie oznaczało to pliki JAR specyficzne dla aplikacji WWW, a nie specyficzne dla serwletu pliki JAR. – BalusC

3

Ten problem został rozwiązany po użyciu go w moim projekcie. Jak powiedział Adam, usunąłem wszystkie biblioteki tomcat w zależnościach, a następnie problem został naprawiony.

Powiązane problemy