2015-04-06 19 views
0

我在加載JSF頁面時遇到了下面提到的錯誤。頁面被成功加載,並且頁面上的所需操作也完成,但是出現此錯誤。java.util.zip.DataFormatException:錯誤的數據檢查

JSF頁面包含標籤面板,如果我嘗試包括從現有的項目包括項目的一些項目中,錯誤出現。以下是列表的XHTML。

<a4j:outputPanel id="selectItems"> 
    <div id="div_selectItems" class="scroll_container"> 
     <s:div styleClass="dialogueAttribute"> 
      <rich:listShuttle sourceValue="#{itemReportEditor.itemsList}" 
           targetValue="#{itemReportEntry.itemReportData}" 
           var="items" 
           listsHeight="28em" 
           sourceListWidth="45em" 
           targetListWidth="45em" 
           sourceCaptionLabel="Available Items" 
           targetCaptionLabel="Included Items" 
           removeAllControlLabel="Remove all" 
           removeControlLabel="Remove" 
           copyControlLabel="Add" 
           copyAllControlLabel="Add all" 
           fastOrderControlsVisible="true" 
           orderControlsVisible="true" 
           converter="#{itemReportEditor.itemReportDataModelConverter}"> 
       <rich:column> 
        <f:facet name="header"> 
         <h:outputText title="Performance item name" 
             value="Name"/> 
        </f:facet> 
        <h:outputText value="#{items['itemName']}"></h:outputText> 
       </rich:column> 

       <rich:column> 
        <f:facet name="header"> 
         <h:outputText title="Performance Item Protocol" 
             value="Protocol"/> 
        </f:facet> 
        <h:outputText value="#{items['protocol']}"></h:outputText> 
       </rich:column> 

       <a4j:support event="onlistchanged" 
          action="#{itemReportEntry.updateItemsList()}" 
          reRender="la" 
          oncomplete="resizeScrollBox2();" 
          status="workingStatus" 
          eventsQueue="ajaxQueue"/> 
      </rich:listShuttle> 
     </s:div> 
    </div> 
</a4j:outputPanel> 

我試圖使用清單班車從左手邊一些項目添加到右側,我收到以下異常(僅在FireFox瀏覽器,沒有觀察到在谷歌瀏覽器這個問題)的日誌(能夠正確應用所有更改,只是得到以下例外)。我的FireFox版本是35.0.1

2015-04-06 15:42:34,272 ERROR [http-0.0.0.0-8080-8] org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/client].[Faces Servlet] 
Servlet.service() for servlet Faces Servlet threw exception 

javax.faces.FacesException: Error decode resource data 
    at org.ajax4jsf.resource.ResourceBuilderImpl.decrypt(ResourceBuilderImpl.java:627) 
    at org.ajax4jsf.resource.ResourceBuilderImpl.getResourceDataForKey(ResourceBuilderImpl.java:369) 
    at org.ajax4jsf.resource.InternetResourceService.serviceResource(InternetResourceService.java:156) 
    at org.ajax4jsf.resource.InternetResourceService.serviceResource(InternetResourceService.java:141) 
    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:488) 
    at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56) 
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
    at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60) 
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
    at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433) 
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92) 
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126) 
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: java.util.zip.DataFormatException: incorrect data check 
    at java.util.zip.Inflater.inflateBytes(Native Method) 
    at java.util.zip.Inflater.inflate(Inflater.java:238) 
    at java.util.zip.Inflater.inflate(Inflater.java:256) 
    at org.ajax4jsf.resource.ResourceBuilderImpl.decrypt(ResourceBuilderImpl.java:621) 
    ... 30 more 

使用谷歌搜索我發現「問題似乎是像'!'這樣的字符由FireFox轉換爲'%21',以下過濾器會將%21轉換回'!'這樣的資源可以在服務器」

在我的情況可以發現,我剛開始在日誌中的異常,但所有的源加載成功

爲了消除異常,我添加了過濾器

package juno.sa.server; 

import java.io.IOException; 
import java.io.UnsupportedEncodingException; 
import java.net.URLDecoder; 

import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletRequestWrapper; 

public class RichFacesFirefox11Filter implements Filter { 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     chain.doFilter(new HttpServletRequestWrapper((HttpServletRequest) request) { 
      @Override 
      public String getRequestURI() { 
       try { 
        return URLDecoder.decode(super.getRequestURI(), "UTF-8"); 
       } catch (UnsupportedEncodingException e) { 

        throw new IllegalStateException("Cannot decode request URI.", e); 
       } 
      } 
     }, response); 
    } 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
     // do nothing 
    } 

    @Override 
    public void destroy() { 
     // do nothing 
    } 
} 
<filter> 
    <filter-name>RichFacesFirefox11Filter</filter-name> 
    <filter-class>juno.sa.server.RichFacesFirefox11Filter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>RichFacesFirefox11Filter</filter-name> 
    <url-pattern>*.seam</url-pattern> 
</filter-mapping> 
+0

因此,如果您的資源被加載並且過濾器阻止了異常,那麼問題是什麼? – Makhiel 2015-04-07 08:30:21

+0

資源被加載,但我在日誌中得到異常,我不希望有異常 – priti 2015-04-07 10:10:30

回答

0

即使我收到了這樣的例外。 產生的原因:java.util.zip.ZipException:不正確的數據校驗 在java.util.zip.InflaterInputStream.read(InflaterInputStream.java:147)

但在我的情況下,根本原因將其IAM試圖流讀取使用flate編碼器壓縮,因此試圖解壓縮的流是InflaterInputStream。

在我的情況下發生的是出現在最後一個字節是不是EOF參數的實際數據中的數據,EOF參數存在最後一個字節之前某處流。因此,當數據流傳遞塊數據的最後一個字節時,無法找到eof,從而引發錯誤的數據檢查。

也許驗證它在你的最終...它可以在你到底有同樣的問題了。