2016-08-01 53 views
0

geschlossen Wie unten Fehler resove:java.io.IOException: UT010029: Stream ist

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(); 
+0

Niemand sieht, was man in der 'createSummaryTable()' Methode tun. Es ist sehr seltsam, dass Sie diese PDF in zwei Durchgängen erstellen müssen. Es wäre sehr einfach, die Einstellungen des Betrachters festzulegen und das JavaScript in der 'createSummaryTable()' Methode hinzuzufügen. Wie auch immer, du versuchst etwas in einen 'ServletOutputStream' zu schreiben, der bereits geschlossen wurde. Das ist kein iText-Problem. Das ist ein elementares Servlet-Problem. –

+0

Auch wenn Sie den 'ServletOutputStream' nirgends explizit schließen, kann er vom Server geschlossen werden, z. aufgrund einer Zeitüberschreitung. Außerdem sieht es so aus, als würde direkt in 'HttpServletResponse.getOutputStream()' geschrieben werden, ist ein falsches Muster in Ihrem Framework: Das Framework scheint selbst zu versuchen, eine Antwort zu schreiben. Überprüfen Sie daher Ihre Verwendung Ihres Frameworks, insbesondere des Spring Web Frameworks. – mkl

+0

Wo ist die Zeile "verursacht durch" in Ihrem Stack-Trace? – kolossus

Antwort

1

Sie schließen o1 und danach lesen Sie es wieder verwenden:

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

OutputStream os2 = httpServletResponse.getOutputStream(); 
os2.write(os1.toByteArray()); //<--- use os1 
+0

Dies ist zwar nicht gut Stil, es ist nicht die Ursache für das Problem bei der Hand ist als 'os1' ist ein' 'ByteArrayOutputStream' und ByteArrayOutputStream.close()' wird implementiert, um ein nicht-Betriebsverfahren. Vgl. seine JavaDocs: * „. Schließen einer' ByteArrayOutputStream' hat keine Auswirkung Die Methoden dieser Klasse aufgerufen werden kann, nachdem der Strom einen 'IOException' ohne Erzeugung geschlossen wurde“ * – mkl

+0

Vielen Dank für die Reply..I versucht, diese Lösung auch aber Ich bekomme den gleichen Fehler .. – Thamaraikkannan