Hi all,

I'm trying to send a zip file using attachments. In fact it works. My only problem is that I can't open the zip file I saved on the server.

This is my code:

////////////////////////////////////////////////////////////////////////////////////////////////

       InputStream is = null;
       FileOutputStream os = null;
try
       {
           // File names vector
           Vector fileInfo = (Vector) obj;
// Get all the attachments
           AttachmentPart[] attachments = getMessageAttachments();
// Put the logic in a loop for totalAttachments for multiple attachments.
           int totalAttachments = attachments.length;
System.out.println("Total Attachments Received Are: " + totalAttachments); // Extract the first attachment. (Since in this case we have only one attachment sent)
           DataHandler dh = attachments[0].getDataHandler();
// Extract the file name of the first attachment.
           String name = (String) fileInfo.get(0);
           System.out.println("File received on server is: " + name);
// An input stream on the uploaded file
           is = dh.getInputStream();
.....
           String contentDirectory = "...............";
           .....
File file = new File(contentDirectory, name);
           os = new FileOutputStream(file);
           int i = 0;
           while (i != -1)
           {
               i = is.read();
               os.write(i);
           }
           is.close();
           os.close();
//dh = null; System.out.println("file.getName() = " + file.getName()); // -> return the good name System.out.println("file.getPath() = " + file.getPath()); // -> return the good path System.out.println("file.isFile() = " + file.isFile()); // -> return true System.out.println("file.length() = " + file.length()); // -> return the good length System.out.println("file.canRead() = " + file.canRead()); // -> return true System.out.println("file.canWrite() = " + file.canWrite()); // -> return true FileInputStream fis = new FileInputStream(contentDirectory + "/" + name); CheckedInputStream checksum = new CheckedInputStream(fis, new Adler32()); ZipInputStream zis = new ZipInputStream(new BufferedInputStream(checksum));
           ZipEntry zEntry;
while ((zEntry = zis.getNextEntry()) != null)
           {
               if (!zEntry.isDirectory())
               {
                   //InputStream isz = zFile.getInputStream(zEntry);
OutputStream osz = new BufferedOutputStream(new FileOutputStream(contentDirectory.getAbsolutePath() + "/" + zEntry.getName()));
                   byte[] buffer = new byte[2048];
                   int len = 0;
                   int count;
                   //while ((len = isz.read(buffer)) >= 0)
while ((count = zis.read(buffer, 0, buffer.length)) != -1)
                   {
                       osz.write(buffer, 0, count);
                   }
                   osz.close();
                   zis.close();
               }
               else
               {
new File(contentDirectory.getAbsolutePath() + "/" + zEntry.getName()).mkdir();
               }
           }
}
       catch (Exception e)
       {
           status = "File Could Not Be Saved: " + e.getMessage();
           System.out.println("In Impl: " + e);
           System.out.println("Message: " + e.getMessage());
           e.printStackTrace();
       }
return status;

////////////////////////////////////////////////////////////////////////////////////////////////

I get an exception on line :

while ((zEntry = zis.getNextEntry()) != null)

The exception is:

java.io.IOException: Stream closed
       at java.util.zip.ZipInputStream.ensureOpen(ZipInputStream.java:43)
       at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:67)
at com.wimba.cgng.bb.ws.cgimport.WebServiceImport.getSaveCourse(WebServiceImport.java:159)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397) at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186) at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323) at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
       at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
       at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)
       at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)


I read here:
http://marc.info/?l=axis-user&m=109603822200704&w=2

that there is a solution, but I wanted to know if there is a "cleaner" one.... I'm using Axis 1.4.

Thank you,
Phil


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to