In meiner Grails-Anwendung, ich habe:Wie überprüft man den Inhalt des Antwortobjekts in Tomcat?
response.outputStream << resultBytes; //result bytes contains my data
dies den Inhalt im CSV-Format lädt der Response-Header ist:
["Content-disposition": "attachment; filename=\"${fileName}\""]
In Entwicklung sind environement Daten heruntergeladen in Ordnung, aber in anderen Umgebungen wie Produktion, Die gleiche Menge an Datendownload verursacht die Ausnahme für unterbrochene Pipes. Ich denke, das ist eine Art Tomcat-Problem (konnte den Puffer nicht löschen oder Streams in einigen Fällen schließen.) Ich bin mir nicht sicher, was genau das Problem verursacht. Bitte helfen Sie.
Die Ausnahme ist:
2017-07-13 14:51:59,751 [http-nio-8453-exec-16] ERROR StackTrace Full Stack Trace:
org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:393)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:344)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:418)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:406)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:97)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:90)
at org.codehaus.groovy.runtime.IOGroovyMethods.leftShift(IOGroovyMethods.java:256)
at org.codehaus.groovy.runtime.dgm$839.invoke(Unknown Source)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:274)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:56)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at com.deerwalk.exs.SearchReportDirectController.doSearchExport(SearchReportDirectController.groovy:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:210)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:59)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:174)
at com.deerwalk.exs.AbstractReportController.doCsvExport(AbstractReportController.groovy:36)
at com.deerwalk.exs.AbstractReportController.doCsvExport(AbstractReportController.groovy)
at org.grails.core.DefaultGrailsControllerClass$MethodHandleInvoker.invoke(DefaultGrailsControllerClass.java:222)
at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:187)
at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:88)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
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:648)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
Mögliches Duplikat [How java.net.SocketException zu reparieren: Gebrochenes Rohr?] (https://stackoverflow.com/questions/2309561/how-to-fix-java-net-socketexception-broken-pipe) –
Ich schätze den Benutzer hat den Browser geschlossen, bevor der Download abgeschlossen wurde, was zu einer fehlerhaften PipeException führt –