Hi!

I have a custom service that downloads images/files from a DB:

  public void service(IRequestCycle cycle) throws IOException
  {
    // extract node-ref
    String nodeUID = cycle.getParameter("node");
    NodeRef nodeRef = new NodeRef(NODE_REF_PREFIX + nodeUID);

    try {
      // login to DB
      // ...
      content = ...;

      // get stream to content
      InputStream contentStream = content.getContent();
      response.setContentType(content.getContentMimeType());
response.setContentLength(new Long(content.getContentSize ()).intValue());
      ServletOutputStream out = response.getOutputStream();

      // transmit
      final int SIZE = 10 * 1024;
      byte[] buffer = new byte[SIZE];
      int i;
      while ((i = contentStream.read(buffer)) != -1)
        out.write(buffer, 0, i);
      contentStream.close();
      out.close();

    } catch (Exception e) {
throw new ApplicationRuntimeException("Could not deliver file "+ nodeRef + ".", e);
    }
  }

When I heavily load files (clicking reload many times in fast succession), I get

ERROR http-80-Processor21 org.apache.catalina.core.ContainerBase. [Catalina].[localhost].[/kc].[kc] - Servlet.service() for servlet kc threw exception java.lang.IllegalStateException: getOutputStream() has already been called for this response at org.apache.catalina.connector.Response.getWriter (Response.java:601) at org.apache.catalina.connector.ResponseFacade.getWriter (ResponseFacade.java:196) at org.apache.tapestry.web.ServletWebResponse.getPrintWriter (ServletWebResponse.java:116) at $WebResponse_1178d289d55.getPrintWriter ($WebResponse_1178d289d55.java) at $WebResponse_1178d289ccb.getPrintWriter ($WebResponse_1178d289ccb.java) at org.apache.tapestry.services.impl.DefaultResponseBuilder.renderResponse( DefaultResponseBuilder.java:140) at org.apache.tapestry.services.impl.ResponseRendererImpl.renderResponse (ResponseRendererImpl.java:33) at $ResponseRenderer_1178d289ce3.renderResponse ($ResponseRenderer_1178d289ce3.java) at org.apache.tapestry.error.ExceptionPresenterImpl.presentException (ExceptionPresenterImpl.java:48) at $ExceptionPresenter_1178d289cd4.presentException ($ExceptionPresenter_1178d289cd4.java) at $ExceptionPresenter_1178d289cd3.presentException ($ExceptionPresenter_1178d289cd3.java) at org.apache.tapestry.engine.AbstractEngine.activateExceptionPage (AbstractEngine.java:117) at org.apache.tapestry.engine.AbstractEngine.service (AbstractEngine.java:269) at org.apache.tapestry.services.impl.InvokeEngineTerminator.service (InvokeEngineTerminator.java:54) at $WebRequestServicer_1178d289d2d.service ($WebRequestServicer_1178d289d2d.java) at $WebRequestServicer_1178d289d29.service ($WebRequestServicer_1178d289d29.java) at org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.servi ce(WebRequestServicerPipelineBridge.java:61) at $ServletRequestServicer_1178d289d0f.service ($ServletRequestServicer_1178d289d0f.java) at org.apache.tapestry.request.DecodedRequestInjector.service (DecodedRequestInjector.java:55) at $ServletRequestServicerFilter_1178d289d0b.service ($ServletRequestServicerFilter_1178d289d0b.java) at $ServletRequestServicer_1178d289d11.service ($ServletRequestServicer_1178d289d11.java) at org.apache.tapestry.multipart.MultipartDecoderFilter.service (MultipartDecoderFilter.java:52) at $ServletRequestServicerFilter_1178d289d09.service ($ServletRequestServicerFilter_1178d289d09.java) at $ServletRequestServicer_1178d289d11.service ($ServletRequestServicer_1178d289d11.java) at org.apache.tapestry.services.impl.SetupRequestEncoding.service (SetupRequestEncoding.java:53) at $ServletRequestServicerFilter_1178d289d0d.service ($ServletRequestServicerFilter_1178d289d0d.java) at $ServletRequestServicer_1178d289d11.service ($ServletRequestServicer_1178d289d11.java) at $ServletRequestServicer_1178d289d03.service ($ServletRequestServicer_1178d289d03.java) at org.apache.tapestry.ApplicationServlet.doService (ApplicationServlet.java:126) at org.apache.tapestry.ApplicationServlet.doGet (ApplicationServlet.java:103)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)


Does anybody know what could be the reason for this? It does not occur when I
do one request after the other with pauses in between.

It seems to be something tapestry-specific as I am not calling getOutputStream() stream
twice! Or is my service() called twice? But why?

Many thanks in advance for any pointers!
Kaspar

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

Reply via email to