Пристань - java.lang.IllegalStateException: файл zip закрыт

Я получаю сообщение об ошибке при подключении к нашему веб-серверу.

Я видел, что ошибка, вызывающая это, была решена в 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)

5 ответов

Решение

Есть 2 основные причины для этого.

  1. Плохой / поврежденный файл JAR в вашем пути к классам.
  2. Запрещается встроенное в JVM кэширование URL.

Для плохого / поврежденного JAR-файла вам придется самостоятельно его изолировать, выяснить, какой он есть. Может быть, просто расставив все по очереди, пока не найдете проблемный.

Что касается кэширования URL-адресов JVM, то это, кажется, вызывает проблемы с динамическими загрузчиками классов, такими как OSGi или сценарии горячего развертывания.

Для этого сценария вы можете указать причалу, чтобы установить URLConnection.setUseCaches(boolean) для каждой попытки соединения URLC самостоятельно.

Чтобы отключить кэши JVM, добавьте следующий фрагмент XML в свой etc/jetty.xml

<Set class="org.eclipse.jetty.util.resource.Resource"
     name="defaultUseCaches">false</Set>

У меня была та же проблема после развертывания войны Дженкинса; все, что мне нужно было сделать, это перезапустить сервер после развертывания. Надеюсь, поможет.

Эта проблема также может возникнуть, если вы делаете свое собственное отражение в этом пути кода.

Вам не нужно проверять все файлы, чтобы убедиться в их правильности. Просто установите точку останова на java.util.zip.ZipFile.ensureOpen(ZipFile.java:632) и проверьте поле имени в классе ZipFile: private final String name

У меня была та же самая проблема из-за того, что фактическая ВОЙНА была повреждена. Попробуйте перезапустить mvn clean install и перераспределить.

У меня была такая же проблема, после удаления всех .jar файлы и построить путь ко всем .jar подать еще раз. Теперь работает нормально

Другие вопросы по тегам