2011-10-10 78 views
4

我的JSF Web應用程序給予隨機錯誤:訪問文件時的「zip文件關閉」(如圖像,CSS,JS )。它部署在Jetty 7上。它看起來像是其中一些文件沒有加載(一些圖像在頁面上丟失)。在Jetty上的JSF2給出隨機'zip文件關閉',但從maven碼頭插件運行時(碼頭:運行)

java.lang.IllegalStateException: zip file closed 
    at java.util.zip.ZipFile.ensureOpen(ZipFile.java:403) 
    at java.util.zip.ZipFile.entries(ZipFile.java:298) 
    at java.util.jar.JarFile.entries(JarFile.java:217) 
    at org.eclipse.jetty.util.resource.JarFileResource.list(JarFileResource.java:261) 
    at org.eclipse.jetty.util.resource.ResourceCollection.list(ResourceCollection.java:421) 
    at org.eclipse.jetty.util.resource.Resource.getListHTML(Resource.java:509) 
    at org.eclipse.jetty.servlet.DefaultServlet.sendDirectory(DefaultServlet.java:741) 
    at org.eclipse.jetty.servlet.DefaultServlet.doGet(DefaultServlet.java:564) 

當我從Maven插件(7.x版)與碼頭運行:運行或碼頭:運行戰爭然後我沒有得到任何錯誤。 更重要的是,訪問Web上下文的根路徑只會在獨立碼頭上運行時發出「zip文件關閉」錯誤,但在從Maven插件運行時不會出現此類錯誤,則是那些目錄視圖。

我的web.xml:

<servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>/faces/*</url-pattern> 
    </servlet-mapping> 

的pom.xml:

.... 
    <dependencies> 
    <dependency> 
     <groupId>com.sun.faces</groupId> 
     <artifactId>jsf-api</artifactId> 
     <version>2.1.3</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.faces</groupId> 
     <artifactId>jsf-impl</artifactId> 
     <version>2.1.3</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 
    <dependency> 
     <groupId>taglibs</groupId> 
     <artifactId>standard</artifactId> 
     <version>1.1.2</version> 
    </dependency> 
</dependencies> 
.... 
<plugin> 
     <groupId>org.mortbay.jetty</groupId> 
     <artifactId>jetty-maven-plugin</artifactId> 
     <version>7.5.1.v20110908</version> 

     <configuration> 
      <scanIntervalSeconds>10</scanIntervalSeconds> 
     </configuration> 
     <dependencies> 
      <dependency> 
       <groupId>com.sun.faces</groupId> 
       <artifactId>jsf-api</artifactId> 
       <version>2.1.3</version> 
      </dependency> 
      <dependency> 
       <groupId>com.sun.faces</groupId> 
       <artifactId>jsf-impl</artifactId> 
       <version>2.1.3</version> 
      </dependency>      
     </dependencies> 
    </plugin> 

任何想法可能是什麼?

+0

我們正在經歷的SUSE Linux企業服務器11 SP1同樣的問題,我們試圖降級碼頭.maven.plugin到7.2.2,但問題仍然存在。 zip錯誤是隨機的,瀏覽器中的重新加載可以修復用戶的問題(意味着丟失了img或css)。但是,對我們來說這不是一個解決方案。我們已經驗證資源是在文件系統上解壓的,並且Jetty有權訪問它們。任何有同樣問題的人,或者最好是解決方案? – HoleInVoid

回答

1

Jetty在WEB-INF/lib的jar文件中查找您的資源。當它搜索jsf-impl.jar時,它可能通過JSF請求關閉。也許jsf做自己的資源處理和文件本身的混亂。

無論如何,解決方案似乎是將jsf jars移出war文件。將你的jsf依賴範圍設置爲提供,以便maven不會將它們打包到war文件中,並將它們放在服務器上,可能在jetty standalone的lib文件夾中。

1

我有同樣的問題,並設法去etc\webdefault.xml和改變這個參數去false來解決它:

<init-param> 
    <param-name>gzip</param-name> 
    <param-value>true</param-value> 
</init-param> 
6

issue已被固定在碼頭,7.6.0.RC2。該錯誤是由JVM緩存jar url連接流引起的。

根據bug報告,你將需要也將添加以下到的jetty.xml:

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

我正在使用'jetty-serverlet',它的7.6.16會解決這個問題嗎? –

+0

根據問題跟蹤器,應該修復版本> = 7.5.4。你在7.6.16中看到了嗎? – kldavis4

相關問題