找不到javax.servlet.http.HttpServletResponse.getStatus()

我正在使用嵌入式Jetty服务器,部署Jersey REST api,我正在尝试使用log4J记录错误。 发生错误时,例如找不到URL,控制台日志显示以下错误:

java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I at org.eclipse.jetty.server.handler.ErrorHandler.doError(ErrorHandler.java:142) at org.eclipse.jetty.server.handler.ErrorHandler.handle(ErrorHandler.java:78) at org.eclipse.jetty.server.Response.sendError(Response.java:655) at org.glassfish.jersey.servlet.internal.ResponseWriter.callSendError(ResponseWriter.java:225) at org.glassfish.jersey.servlet.internal.ResponseWriter.commit(ResponseWriter.java:194) at org.glassfish.jersey.server.ContainerResponse.close(ContainerResponse.java:413) at org.glassfish.jersey.server.ServerRuntime$Responder.release(ServerRuntime.java:810) at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:515) at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:334) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) at org.glassfish.jersey.internal.Errors.process(Errors.java:315) at org.glassfish.jersey.internal.Errors.process(Errors.java:297) at org.glassfish.jersey.internal.Errors.process(Errors.java:267) at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473) at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:841) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:535) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) at org.eclipse.jetty.server.Server.handle(Server.java:564) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:317) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110) at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124) at org.eclipse.jetty.util.thread.Invocable.invokePreferred(Invocable.java:128) at org.eclipse.jetty.util.thread.Invocable$InvocableExecutor.invoke(Invocable.java:222) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:294) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:126) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:673) at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:591) at java.lang.Thread.run(Thread.java:748) 

有我的依赖:

   ${project.groupId} api-ejb ${project.parent.version}   javax.ws.rs javax.ws.rs-api 2.1-m09   org.mongodb mongodb-driver 3.2.2   com.sun.jersey jersey-core 1.19   org.glassfish.jersey.media jersey-media-multipart 2.19   com.google.code.gson gson 2.3.1   org.apache.solr solr-solrj 6.4.2   org.eclipse.jetty jetty-server 9.4.6.v20170531   org.eclipse.jetty jetty-servlet 9.4.6.v20170531   org.glassfish.jersey.core jersey-server 2.26-b02   org.glassfish.jersey.containers jersey-container-servlet-core 2.26-b01   javax javaee-web-api 7.0   

和服务器初始化代码:

 ServletContextHandler servletContextHandler = new ServletContextHandler(); ResourceConfig resourceConfig = new ResourceConfig(); resourceConfig.register(MultiPartFeature.class); resourceConfig.register(GsonMessageBodyHandler.class); resourceConfig.register(PrivateAPI.class); resourceConfig.register(MalformedURLExceptionMapper.class); ServletContainer sc = new ServletContainer(resourceConfig); ServletHolder holder = new ServletHolder(sc); servletContextHandler.addServlet(holder, "/*"); Server server = new Server(new InetSocketAddress(args[0], Integer.parseInt(args[1]))); HandlerCollection handlerCollection = new HandlerCollection(); handlerCollection.setHandlers(new Handler[] {servletContextHandler, new RequestLogHandler(), new DefaultHandler()}); server.setHandler(handlerCollection); server.start(); server.join(); 

你的项目中有一个非常古老的servlet-api jar。

Servlet 3.0中添加了javax.servlet.http.HttpServletResponse#getStatus()

添加以下内容:

  javax.servlet javax.servlet-api 3.1.0  

转储您的依赖项并validation您没有多个版本的servlet-api jar存在(这很常见,因为servlet-api jar的maven坐标空间在过去10年中已经改变了几次)

 $ mvn dependency:tree