我收到一些与我们的网络服务器连接的错误。
我看到在Jetty 7.6中解决了造成这种情况的错误。是的,我们在Jetty 7.5.4下运行的应用程序上出现此错误,但我们也会在新版本9上运行其他应用程序。
你知道这可能是什么吗?
我们随机收到此错误:
java.lang.IllegalStateException: zip file closed
at java.util.zip.ZipFile.ensureOpen(ZipFile.java:632)
at java.util.zip.ZipFile.access$200(ZipFile.java:56)
at java.util.zip.ZipFile$1.hasMoreElements(ZipFile.java:485)
at java.util.jar.JarFile$1.hasMoreElements(JarFile.java:239)
at org.eclipse.jetty.util.resource.JarFileResource.exists(JarFileResource.java:163)
at org.eclipse.jetty.webapp.WebAppContext$Context.getResource(WebAppContext.java:1223)
at org.eclipse.jetty.servlet.DefaultServlet.getResource(DefaultServlet.java:366)
at org.eclipse.jetty.server.ResourceCache.lookup(ResourceCache.java:188)
at org.eclipse.jetty.servlet.DefaultServlet.doGet(DefaultServlet.java:445)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
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:483)
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:219)
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:722)
答案 0 :(得分:6)
有两个主要原因。
对于一个糟糕/损坏的JAR文件,您必须自己隔离它,找出它是哪一个。也许只是一个接一个地解除所有这些问题,直到找到问题所在。
至于JVM URL缓存,这似乎是最cause problems with dynamic classloaders like OSGi or hot-deploy scenarios。
对于这种情况,您可以告诉jetty为其自己的每次URLConnection尝试设置URLConnection.setUseCaches(boolean)
。
要禁用JVM缓存,请将以下XML片段添加到etc/jetty.xml
<Set class="org.eclipse.jetty.util.resource.Resource"
name="defaultUseCaches">false</Set>
答案 1 :(得分:1)
您不需要测试所有文件以确保它们的正确性。只需在java.util.zip.ZipFile.ensureOpen(ZipFile.java:632)中设置一个断点并检查ZipFile类中的name字段:private final String name
答案 2 :(得分:1)
在部署詹金斯战争后我遇到了同样的问题;我所要做的就是在部署后重启服务器。 希望它有所帮助。
答案 3 :(得分:0)
由于实际的WAR已损坏,我遇到了同样的问题。尝试重新运行mvn clean install
并重新部署。
答案 4 :(得分:0)
如果您在该代码路径中执行任何自己的反射,也会发生此问题。
答案 5 :(得分:0)
删除所有.jar
文件并再次构建所有.jar
文件的路径后,我遇到了同样的问题。现在它可以正常工作