Hey Leute,

habs nun schon in mehreren Foren probiert ohne ne Antwort zu erhalten, vielleicht fällt euch was
dazu ein:

ich komm bei folgendem Problem nicht weiter, und zwar krieg ich folgende Exception:

Code:
     
java.util.zip.ZipException: invalid stored block lengths
   at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:140)
   at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:87)
   at java.io.FilterInputStream.read(FilterInputStream.java:90)
   at com.wincornixdorf.filetransfer.sfr.jobs.DataFileReceiver.checkParams(Unknown Source)
   at com.wincornixdorf.filetransfer.sfr.jobs.DataFileReceiver.processFile(Unknown Source)
   at com.wincornixdorf.filetransfer.sfr.servlet.Receiver.doPost(Unknown Source)
   at com.wincornixdorf.filetransfer.sfr.servlet.Receiver.service(Unknown Source)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
   at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199)
   at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)
   at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:754)
   at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:684)
   at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:876)
   at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
   at java.lang.Thread.run(Thread.java:595)

Zu dieser Exception kommt es folgendermaßen:

Ich übertrage zwischen 2 Servlets Dateien (sowohl binär als auch Text), in dem ich diese einfach base64-kodiert an die Url anhänge, bzw. per Post übertrage. Das ganze läuft dazu noch SSL-verschlüsselt über die Kombination Apache2 + mod_jk + Tomcat.

Das klappt auch soweit wunderbar, nur wenn ich versuche die Datei mittels GZIP zu komprimieren und wieder zu dekomprimieren krieg ich diese Exception.

Nun hab ich über google rausgefunden, das es da wohl mal einen Bug in der JVM gab, der aber in allen Versionen >= 1.4 gefixt sein sollte (ich verwende 1.5).

Schätzungweise hängt es also an mir.........
Ich sehe aber nicht wirklich einen Fehler:

Auf der Sender-Seite lese ich die Datei so ein:

Code:
     
         byte[] dataFileContent = readFile(myFile);

         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         GZIPOutputStream zos;
         try {
            zos = new GZIPOutputStream(baos);
            for(int i = 0; i < dataFileContent.length; i++) {
                baos.write(dataFileContent[i]);
            }
         
             baos.close();
             zos.close();
         } catch (IOException e) {
            e.printStackTrace();
         }
         
         urlParamsEncoded += "fileContent=" +
                        URLEncoder.encode(new String(base64.encode(baos.toByteArray())), "UTF-8");

Losgeschickt wird das ganze dann einfach mittels:

Code:
     
   protected boolean send(HttpURLConnection httpConn, String urlParams) {
   
      OutputStreamWriter oStreamWriter;
      try {
         oStreamWriter = new OutputStreamWriter(httpConn.getOutputStream());
           oStreamWriter.write(urlParams, 0, urlParams.length());
           oStreamWriter.flush();
           oStreamWriter.close();
      } catch (IOException e) {
         logger.error(e.getMessage());
         logger.error(e);
         return false;
      }
      return true;
   }

Drüben versuche ich mir den Inhalt zu holen mit:

Code:
     	
      ByteArrayInputStream dataContent = new ByteArrayInputStream(
                                    base64.decode(
                                          request.getParameter(
                                                fileContent).getBytes()
                                                   ));
      GZIPInputStream zis = null;
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      byte[] buffer = new byte[ 8192 ];
       try {
          zis = new GZIPInputStream(dataContent);
         for(int len; (len = zis.read(buffer)) != -1; ) {
             baos.write(len);
         }
         zis.close();
         baos.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
      byte[] fileContent = baos.toByteArray();
So, und die Exception krieg ich auf Empfänger-Seite genau hier:


Code:
     
         for(int len; (len = zis.read(buffer)) != -1; ) {
             baos.write(len);
         }

Hat jemand ne Idee was du schief läuft?

Bin für jede Hilfe überaus dankbar!