2012-05-25 14 views
6

Każdy pomysł, dlaczego pojawia się ten błąd w czasie wykonywania? Próbuję wdrożyć AsyncServlet na Jetty.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) 

mam następujące Maven współzależności w moim 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

Czy byłeś w stanie rozwiązać ten problem? Pracuję nad tym samym problemem i zastanawiałem się, czy byłeś w stanie to naprawić. – Dawood

+0

Znalazłem problem. W moim CLASSPATH wystąpiło zderzenie z serwletem apis z geromino-servlet_2.5_spec-1.1.2. –

Odpowiedz

8

Zgaduję serwer wykorzystuje złą wersję specyfikacji Servlet. AsyncContext jest dostępny tylko od wersji Servlet spec v 3.0. Prawdopodobnie masz odpowiednią wersję w swoim środowisku programistycznym, ale twój serwer używa przestarzałej wersji api, stąd błąd w czasie wykonywania.

+0

Każdy pomysł, jak mogę to debugować. Używam Mavena i pomyślałem, że powinien on zająć się zarówno zależnościami programistycznymi, jak i runtime. –

+0

maven, musisz podać mu dobre informacje ... spróbuj użyć> mvn -X install, a to powinno dać ci drzewo zależności, możesz dostać 2.5 przechodnie skądś skądś, w takim przypadku wystarczy dodać wykluczenie –

+0

dzięki. Użyłem wtyczki, aby znaleźć duplikaty i zastąpić je wykluczeniem. com.ning.maven.plugins maven-duplicate-finder-plugin. Jednak to nadal nie rozwiązało mojego problemu. –