Javatpoint Logo

java.lang.IllegalStateException: getOutputStream() has already been called for this response

By: camkcd*** On: Tue Oct 07 09:16:17 IST 2014     Question Reputation21 Answer Reputation15 Quiz Belt Series Points0  36Blank User
Hi,

Please help me to resolve the below error. I am trying to invoke Crystal Reports Using JSP it is invoking report fine but it is throwing the below error.

The Error Stack Trace is:


java.lang.IllegalStateException: getOutputStream() has already been called for this response

at org.apache.catalina.connector.Response.getWriter(Response.java:638)

at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:214)

at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)

at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)

at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:190)

at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:126)

at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:80)

at org.apache.jsp.ExportPdf_jsp._jspService(ExportPdf_jsp.java:155)

at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)

at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)

at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)

at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)

at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)

at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)

at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)

at java.lang.Thread.run(Thread.java:662)





Thanks

Penchal
Up0Down

 
Hi Mallik,

So how can i resolve the problem.

Here is my code:

reportPath = request.getParameter("_reportName");

/*

* Instantiate ReportClientDocument and specify the Java Print Engine as the report processor.

* Open a rpt file and export to PDF. Stream PDF back to web browser.

*/

reportClientDocument.setReportAppServer(ReportClientDocument.inprocConnectionString);

reportClientDocument.open(reportPath, OpenReportOptions._openAsReadOnly);





reportSource = reportClientDocument.getReportSource();

session.setAttribute("ReportSource", reportSource);

System.out.println("hi+temp+final");

byteArrayInputStream = (ByteArrayInputStream) reportClientDocument

.getPrintOutputController().export(ReportExportFormat.PDF);



response.reset();

response.setHeader("Content-disposition", "inline;filename=crreport.pdf");

response.setContentType("application/pdf");

System.out.println("Hello");

byteArray = new byte[1024];

while((bytesRead = byteArrayInputStream.read(byteArray)) != -1) {

response.getOutputStream().write(byteArray, 0, bytesRead);

}

//response.getOutputStream().flush();

response.getOutputStream().close();

reportClientDocument.close();

Thanks
Penchal
Image Created0Down

By: [email protected] On: Tue Oct 07 17:27:00 IST 2014 Question Reputation21 Answer Reputation15 Belt Series Points0 36User Image
Are You Satisfied :0Yes0No
 
1
down vote


Add the following inside the end of the try/catch to avoid the error that appears when the JSP engine flushes the response via getWriter()

out.clear(); // where out is a JspWriter
out = pageContext.pushBody();

This isn't best practice, but it avoids the errors in your logs. Ideally we should do this in Servlet and not in JSP. If you still needs it in JSP, follow above code to get rid off the error.
Image Created0Down

By: [email protected] On: Sat May 16 11:54:40 IST 2015 Question Reputation0 Answer Reputation0 Belt Series Points0 0User Image
Are You Satisfied :0Yes0No