2012-05-25 8 views
6

Irgendeine Idee, warum ich diesen Fehler zur Laufzeit bekomme? Ich versuche, ein AsyncServlet auf Jetty bereitzustellen.java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.startAsync

java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.startAsync(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)Ljavax/servlet/AsyncContext; 
     at my.server.SlowServlet.doGet(SlowServlet.java:16) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:705) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:814) 
     at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:547) 
     at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:480) 
     at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) 
     at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:520) 
     at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227) 
     at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:941) 
     at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:409) 
     at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186) 
     at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:875) 
     at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) 
     at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250) 
     at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149) 
     at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110) 
     at org.eclipse.jetty.server.Server.handle(Server.java:345) 
     at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:441) 
     at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:919) 
     at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:582) 
     at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:218) 
     at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:51) 
     at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:586) 
     at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:44) 
     at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598) 
     at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533) 
     at java.lang.Thread.run(Thread.java:680) 

Ich habe die folgenden Maven Abhängigkeiten in meinem pom.xml

<dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-server</artifactId> 
     <version>${jettyVersion}</version> 
    </dependency> 


    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-servlet</artifactId> 
     <version>${jettyVersion}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-servlets</artifactId> 
     <version>${jettyVersion}</version> 
    </dependency> 


    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-webapp</artifactId> 
     <version>${jettyVersion}</version> 
    </dependency>  
+2

Konnten Sie dieses Problem lösen? Ich stoße auf das gleiche Problem und ich frage mich, ob Sie es beheben konnten. – Dawood

+0

Ich habe das Problem gefunden. Es gab einen Konflikt in meinem CLASSPATH mit Servlet-API von geromino-servlet_2.5_spec-1.1.2. –

Antwort

8

Ich vermute, der Server die falsche Version der Servlet-Spezifikation verwendet. AsyncContext ist nur seit der Servlet-Spezifikation 3.0 verfügbar. Sie haben wahrscheinlich die richtige Version in Ihrer Entwicklungsumgebung, aber Ihr Server verwendet eine veraltete Version der API, daher der Fehler zur Laufzeit.

+0

Irgendeine Idee, wie ich das debuggen kann. Ich benutze Maven und ich dachte, dass es sich um Entwicklungs- und Laufzeitabhängigkeiten kümmern sollte. –

+0

maven tut, musst du es gute Informationen geben ... versuche mit> mvn -X install und das sollte dir den Abhängigkeitsbaum geben, du bekommst 2.5 transitiv von irgendwo, in diesem Fall musst du nur einen Ausschluss hinzufügen –

+0

danke. Ich habe das Plugin benutzt, um die Duplikate zu finden und sie durch einen Ausschluss ersetzt. com.ning.maven.plugins maven-duplicate-finder-plugin. Das hat mein Problem jedoch immer noch nicht gelöst. –