Its not that anything is missing per se, but if you run your output writer in a 
separate thread, then the rest of your processing is free to continue and in 
your case I'm guessing that the processing has finished before your output 
writing has completed. When your servlet finishes, the last thing that happens 
is the output stream gets closed. Try doing the write outside of a thread and 
see if you get the same exception.

Russ

> Date: Mon, 10 Aug 2009 15:03:13 +0300
> Subject: Re: Output to input stream for streaming?
> From: [email protected]
> To: [email protected]
> 
> Well well.. I do not understand why it is not possible, in principle.
> The input is there. The output is there... what's missing?
> 
> **
> Martin
> 
> 2009/8/10 Russell Simpkins <[email protected]>:
> >
> > Martin,
> >
> > I don't think you can do this in a thread because that lets the 
> > HttpServletResponse end and close your ServletOutputStream.
> >
> > Russ
> >
> >> Date: Mon, 10 Aug 2009 14:49:58 +0300
> >> Subject: Output to input stream for streaming?
> >> From: [email protected]
> >> To: [email protected]
> >>
> >> Hi!
> >>
> >> I have a HSSF document which can be written to an output stream.
> >> However, I want to stream it to the website visitor, which requires an
> >> inputstream... I have tried the following, but it somehow doesn't seem
> >> to work.
> >>
> >> Anybody know what can be done to fix it?
> >>
> >>     final PipedInputStream inputStream = new PipedInputStream();
> >>     final PipedOutputStream out;
> >>     try {
> >>       out = new PipedOutputStream(inputStream);
> >>     } catch (IOException e) {
> >>       throw new RuntimeException(e);
> >>     }
> >>     Executors.newSingleThreadExecutor().execute(new Runnable() {
> >>       @Override
> >>       public void run() {
> >>         try {
> >>           wb.write(out);
> >>         } catch (IOException e) {
> >>           MarkupUtils.handleUnexpectedException(e);
> >>         }
> >>       }
> >>     });
> >>
> >>     IResourceStream resourceStream = new IResourceStream() {
> >>       /**
> >>        * @see org.apache.wicket.util.resource.IResourceStream#close()
> >>        */
> >>       public void close() throws IOException {
> >>         inputStream.close();
> >>       }
> >>
> >>       /**
> >>        * @see 
> >> org.apache.wicket.util.resource.IResourceStream#getContentType()
> >>        */
> >>       public String getContentType() {
> >>         return getAlternateContentType();
> >>       }
> >>
> >>       /**
> >>        * @see 
> >> org.apache.wicket.util.resource.IResourceStream#getInputStream()
> >>        */
> >>       public InputStream getInputStream()
> >>           throws ResourceStreamNotFoundException {
> >>         return inputStream;
> >>       }
> >>
> >>       /**
> >>        * @see org.apache.wicket.util.resource.IResourceStream#getLocale()
> >>        */
> >>       public Locale getLocale() {
> >>         throw new IllegalAccessError("Method not implemented.");
> >>       }
> >>
> >>       /**
> >>        * @see org.apache.wicket.util.resource.IResourceStream#length()
> >>        */
> >>       public long length() {
> >>         try {
> >>           return inputStream.available();
> >>         } catch (IOException e) {
> >>           MarkupUtils.handleUnexpectedException(e);
> >>         }
> >>         return 0;
> >>       }
> >>
> >>       /**
> >>        * @see 
> >> org.apache.wicket.util.resource.IResourceStream#setLocale(java.util.Locale)
> >>        */
> >>       public void setLocale(Locale locale) {
> >>         throw new IllegalAccessError("Method not implemented.");
> >>       }
> >>
> >>       /**
> >>        * @see org.apache.wicket.util.watch.IModifiable#lastModifiedTime()
> >>        */
> >>       public Time lastModifiedTime() {
> >>         return 
> >> Time.milliseconds(DatabaseServices.getCurrentTimestamp().getTime());
> >>       }
> >>
> >>     };
> >>
> >> java.io.IOException: Pipe closed
> >>       at java.io.PipedInputStream.checkStateForReceive(Unknown Source)
> >>       at java.io.PipedInputStream.receive(Unknown Source)
> >>       at java.io.PipedOutputStream.write(Unknown Source)
> >>       at java.io.OutputStream.write(Unknown Source)
> >>       at 
> >> org.apache.poi.poifs.storage.BigBlock.doWriteData(BigBlock.java:55)
> >>       at 
> >> org.apache.poi.poifs.storage.DocumentBlock.writeData(DocumentBlock.java:220)
> >>       at 
> >> org.apache.poi.poifs.storage.BigBlock.writeBlocks(BigBlock.java:86)
> >>       at 
> >> org.apache.poi.poifs.filesystem.POIFSDocument$BigBlockStore.writeBlocks(POIFSDocument.java:603)
> >>       at 
> >> org.apache.poi.poifs.filesystem.POIFSDocument.writeBlocks(POIFSDocument.java:275)
> >>       at 
> >> org.apache.poi.poifs.filesystem.POIFSFileSystem.writeFilesystem(POIFSFileSystem.java:390)
> >>       at 
> >> org.apache.poi.hssf.usermodel.HSSFWorkbook.write(HSSFWorkbook.java:1168)
> >>
> >>
> >>
> >> **
> >> Martin
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [email protected]
> >> For additional commands, e-mail: [email protected]
> >>
> >
> > _________________________________________________________________
> > Get back to school stuff for them and cashback for you.
> > http://www.bing.com/cashback?form=MSHYCB&publ=WLHMTAG&crea=TEXT_MSHYCB_BackToSchool_Cashback_BTSCashback_1x1
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 

_________________________________________________________________
Get free photo software from Windows Live
http://www.windowslive.com/online/photos?ocid=PID23393::T:WLMTAGL:ON:WL:en-US:SI_PH_software:082009

Reply via email to