You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Hsin-Tang Pai <hp...@psi-it.com> on 2007/01/11 23:56:21 UTC

download/export a file: to reset response buffer: Committed

Hi,
I tried to a EngineService to download/export a file
(application/octet-stream).
Because THE file is from FTP site, I cannot get actual link form
getLink() method.
So I tried to do directly download as following:

Call Page:
    @InjectPage("DownloadOutput")
    public abstract DownloadOutput getDownloadOutput();
    
    public void CallPage(IRequestCycle cycle) {
     DownloadOutput results = getDownloadOutput();
     results.activate(fileInputStream, file.getName(),
(int)file.length());
    }
    
DownloadOutput page:
    public void activate(FileInputStream fis, String fileName, int
fileLength)

 FileInputStream fis = new FileInputStream(file);
 in = new BufferedInputStream(fis);

 WebResponse response =
getPage().getRequestCycle().getInfrastructure().getResponse();
 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 int c;
 while ( ( c = fis.read() ) != -1 ) {
 baos.write( c );
 }
 fis.close();
 outputStrem = response.getOutputStream(new
ContentType("application/octet-stream"));
 response.setDateHeader("max-age", 0);
 response.setHeader("Content-transfer-encoding", "binary");
 response.setHeader("Content-disposition", "attachment; filename="
 + fileName);
 response.setContentLength(fileLength);
 response.setHeader("Connection", "keep-alive");
 response.setHeader("Expires", "600000");
 response.setHeader("Cache-Control", "public, post-check=0,
pre-check=0");

 outputStrem.write(baos.toByteArray());
 outputStrem.flush();
 outputStrem.close();
 in.close();
 in = null;
 
 getRequestCycle().activate(this);
    }

And I got Error:
[java] 17:24:38,888 ERROR ServletWebResponse:132 - Unable to reset
response buffer: Committed
[java] java.lang.IllegalStateException: Committed
[java] at
org.mortbay.jetty.servlet.ServletHttpResponse.resetBuffer(ServletHttpRes
ponse.jav
a:212)
[java] at
org.mortbay.jetty.servlet.ServletHttpResponse.reset(ServletHttpResponse.
java:221)

[java] at
org.apache.tapestry.web.ServletWebResponse.reset(ServletWebResponse.java
:128)
[java] at
org.apache.tapestry.web.ServletWebResponse.getPrintWriter(ServletWebResp
onse.java
:90)
[java] at
$WebResponse_1100e16f32a.getPrintWriter($WebResponse_1100e16f32a.java)
[java] at
$WebResponse_1100e16f1fe.getPrintWriter($WebResponse_1100e16f1fe.java)
[java] at
org.apache.tapestry.services.impl.ResponseRendererImpl.renderResponse(Re
sponseRen
dererImpl.java:67)
[java] at
$ResponseRenderer_1100e16f21a.renderResponse($ResponseRenderer_1100e16f2
1a.java)
[java] at
org.apache.tapestry.error.ExceptionPresenterImpl.presentException(Except
ionPresen
terImpl.java:46)
[java] at
$ExceptionPresenter_1100e16f208.presentException($ExceptionPresenter_110
0e16f208.
java)
[java] at
org.apache.tapestry.engine.AbstractEngine.activateExceptionPage(Abstract
Engine.ja
va:121)
[java] at
org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:28
0)
[java] at
org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeE
ngineTerm
inator.java:60)
[java] at
$WebRequestServicer_1100e16f262.service($WebRequestServicer_1100e16f262.
java)
[java] at
org.apache.tapestry.services.impl.DisableCachingFilter.service(DisableCa
chingFilt
er.java:4Cool
[java] at
$WebRequestServicerFilter_1100e16f264.service($WebRequestServicerFilter_
1100e16f2
64.java)
[java] at
$WebRequestServicer_1100e16f266.service($WebRequestServicer_1100e16f266.
java)
[java] at
$WebRequestServicer_1100e16f25e.service($WebRequestServicer_1100e16f25e.
java)...

I cannot find any support documents on the web. I even don't know what
if that mean.
Please Help....

Thank you very much