2017-06-23 4 views
1

Ich arbeite mit einem eingebetteten Jetty-Server, eine Jersey REST API implementieren, und ich versuche, die Fehler mit Log4J zu protokollieren. Wenn ein Fehler auftritt, beispielsweise eine URL nicht gefunden, und das Konsolenprotokoll zeigt den folgenden Fehler:javax.servlet.http.HttpServletResponse.getStatus() nicht gefunden

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) 

Da meine Abhängigkeiten sind:

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

Und der Server-Initialisierung Code:

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(); 
+0

Mögliches Duplikat von [NoSuchMethodError beim Aufruf von res ponse.getStatus()] (https://stackoverflow.com/questions/27257459/nosuchmethoderror-while-calling-response-getstatus) – Pau

Antwort

2

Sie haben ein wirklich altes Servlet-Api-Glas in Ihrem Projekt.

javax.servlet.http.HttpServletResponse#getStatus() wurde in Servlets 3.0

hinzugefügt folgendes hinzufügen:

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.1.0</version> 
</dependency> 

Ihre Abhängigkeiten Dump und stellen Sie sicher, dass Sie nicht mehrere Versionen der Servlet-api Gläser vorhanden ist (das ist nicht unüblich, Da der Maven-Koordinatenraum für die Servlet-API-Gläser in den letzten 10 Jahren einige Male geändert wurde)

$ mvn dependency:tree