9

我在连接到我们的 Web 服务器时遇到了一些错误。

我看到导致此问题的错误已在 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)
4

6 回答 6

7

这有两个主要原因。

  1. 类路径中的错误/损坏的 JAR 文件。
  2. JVM 内置的 URL 缓存阻碍了。

对于一个坏/损坏的 JAR 文件,您必须自己隔离它,找出它是哪个。也许只需将它们一一解开,直到找到有问题的那一个。

至于 JVM URL 缓存,这似乎最容易导致 OSGi 等动态类加载器或热部署场景出现问题

对于这种情况,您可以告诉 jetty 为URLConnection.setUseCaches(boolean)它自己的每个 URLConnection 尝试设置。

要禁用 JVM 缓存,请将以下 XML 片段添加到您的etc/jetty.xml

<Set class="org.eclipse.jetty.util.resource.Resource"
     name="defaultUseCaches">false</Set>
于 2013-10-01T21:00:36.223 回答
1

您无需测试所有文件以确保它们的正确性。只需在 java.util.zip.ZipFile.ensureOpen(ZipFile.java:632) 处设置一个断点并检查 ZipFile 类中的名称字段: private final String name

于 2015-02-12T13:35:17.500 回答
1

部署詹金斯战争后我遇到了同样的问题;我所要做的就是在部署后重新启动服务器。希望能帮助到你。

于 2017-02-05T23:25:51.440 回答
1

如果您在该代码路径中进行任何自己的反射,也可能会出现此问题。

于 2018-05-26T01:44:29.170 回答
0

由于实际的 WAR 已损坏,我遇到了同样的问题。尝试重新运行mvn clean install并重新部署。

于 2017-07-05T11:18:15.027 回答
0

在删除所有文件并再次.jar构建所有文件的路径后,我遇到了同样的问题。.jar现在它工作正常

于 2019-04-04T08:50:37.370 回答