4

How to Resove below Error:

ERROR [com.test.filter.AuthenticationFilter] (default task-6) displayUpdateUser:Error occurred while displaying the Update User page.: java.io.IOException: UT010029: Stream is closed
    at io.undertow.servlet.spec.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:136)
    at java.io.ByteArrayOutputStream.writeTo(ByteArrayOutputStream.java:167)
    at org.springframework.web.servlet.view.AbstractView.writeToResponse(AbstractView.java:468)
    at org.springframework.web.servlet.view.document.AbstractPdfView.renderMergedOutputModel(AbstractPdfView.java:82)
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1243)
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1027)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:971)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:968)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:870)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:86)
    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:130)
    at com.test.filter.AuthenticationFilter.doFilter(AuthenticationFilter.java:66)
    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)
    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
    at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:85)
    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
    at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
    at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
    at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
    at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58)
    at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:72)
    at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
    at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet.handlers.ServletInitialHandler.jrHandle(ServletInitialHandler.java)
    at org.zeroturnaround.javarebel.integration.servlet.undertow.cbp.ServletInitialHandlerCBP.handleRequest(ServletInitialHandlerCBP.java:101)
    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:282)
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:261)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:80)
    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:172)
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:199)
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:774)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

code:

    document.open();
    PDFGenerator.createSummaryTable(document, table, dataList, relPath);
    document.close();
    pdfWriter.close();
    os.flush();
    os.close();

    byte b[] = os.toByteArray();
    ByteArrayOutputStream os1 = new ByteArrayOutputStream();
    PdfReader pdfReader = new PdfReader(b);
    PdfStamper pdfStamper = new PdfStamper(pdfReader, os1);
    pdfStamper.setViewerPreferences(PdfWriter.PDFXNONE);
    pdfStamper.setViewerPreferences(PdfWriter.HideMenubar);
    pdfStamper.setViewerPreferences(PdfWriter.HideToolbar);
    pdfStamper.setViewerPreferences(PdfWriter.HideWindowUI);
    PdfWriter pdfWriter1 = pdfStamper.getWriter();

    pdfWriter1.addJavaScript(getPrintJS());
    pdfReader.close();
    pdfStamper.close();
    os1.flush();
    os1.close();

    OutputStream os2 = httpServletResponse.getOutputStream();
    os2.write(os1.toByteArray());
    os2.flush();
    os2.close();
Jens
  • 67,715
  • 15
  • 98
  • 113
Thamaraikkannan
  • 41
  • 1
  • 1
  • 2
  • No one sees what you're doing in the `createSummaryTable()` method. It's very strange that you need to create this PDF in two passes. It would be very easy to set the viewer preferences and to add the JavaScript in the `createSummaryTable()` method. Anyway, you are trying to write something to a `ServletOutputStream` that has already been closed. That is not an iText problem. That's an elementary servlet problem. – Bruno Lowagie Aug 01 '16 at 06:28
  • Even if you nowhere explicitly close the `ServletOutputStream`, it might be closed by the server, e.g. due to a timeout. Furthermore it looks like directly writing to `HttpServletResponse.getOutputStream()` is a wrong pattern in your framework: The framework appears itself to eventually try and write a response. Thus, please verify your use of your framework, in particular the Spring web framework. – mkl Aug 01 '16 at 13:00
  • Where's the "caused by" line in your stack trace? – kolossus Aug 12 '16 at 13:01

1 Answers1

3

You Close o1 and after that you read use it again:

os1.close(); //<--- close

OutputStream os2 = httpServletResponse.getOutputStream();
os2.write(os1.toByteArray());  //<--- use os1
Jens
  • 67,715
  • 15
  • 98
  • 113
  • 1
    While this is not good style, it is not the cause of the issue at hand as `os1` is a `ByteArrayOutputStream` and `ByteArrayOutputStream.close()` is implemented a no-operation method. Cf. its JavaDocs: *"Closing a `ByteArrayOutputStream` has no effect. The methods in this class can be called after the stream has been closed without generating an `IOException`."* – mkl Aug 01 '16 at 12:48
  • Thanks for the Reply..I tried that solution also but i am getting the same error.. – Thamaraikkannan Aug 19 '16 at 13:31