2015-04-06 3 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 браузере, не заметил эту проблему в Google Chrome) в журналах (в состоянии применить все изменения правильно, просто получив следующее исключение). Моя 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

+0

Ресурс загружен, но я получаю исключение в журналах, я не хочу, чтобы это исключение – priti

ответ

0

Даже я получаю такое исключение. Вызванные: java.util.zip.ZipException: некорректные проверки данных на java.util.zip.InflaterInputStream.read (InflaterInputStream.java:147)

Но в моей случае первопричине бы поток, который IAM пытается чтение сжато с использованием кодека flate, поэтому поток, который пытается разжать, - InflaterInputStream.

Что происходит в моем случае - данные, присутствующие в последнем байте, не являются параметрами eof, а фактическими данными, параметр eof присутствует в потоке где-то до последнего байта. Поэтому, когда поток перехватывает последний байт данных блока, он не может найти eof, следовательно, делает неправильную проверку данных.

Возможно, это подтвердится на вашем конце ... это может быть такая же проблема и в вашем конце.

Смежные вопросы