parseRequest randomly throws Stream ended unexpectedly ------------------------------------------------------
Key: FILEUPLOAD-106 URL: http://issues.apache.org/jira/browse/FILEUPLOAD-106 Project: Commons FileUpload Type: Bug Versions: Nightly Builds Environment: The client and server environments are all Solaris 9, Java 1.4.2_05, JBoss 3.2.5 running Tomcat 5.0.26 using the default 8080 connector, and separated by a few LANs with very low latency (2ms). Reporter: Gerald Turner Hello, I have an application using FileUpload which intermittently encounters this error as well, about once every 100 uploads. It's a simple servlet that writes posted files to disk. The client application that is posting to this FileUpload servlet is using Jakarta Commons HttpClient 3.0.1 with features such as MultipartRequestEntity and MultiThreadedHttpConnectionManager. Typically the posts contain two to three FileParts, a few 20KB audio/x-wav files accompanied by a 15KB application/voicexml+xml file. The servlet is actually running on two different servers, and the single client posts to both of them, this occasional "Stream ended unexpectedly" error will occur on one server and still succeed on the other. The client and server environments are all Solaris 9, Java 1.4.2_05, JBoss 3.2.5 running Tomcat 5.0.26 using the default 8080 connector, and separated by a few LANs with very low latency (2ms). It's interesting to note that the FileUpload servlet catches the "Stream ended unexpectedly" exception during parseRequest and is still able to HttpServletResponse.send(500, e.getMessage()), which the client receives and there are no other errors leading me to indicating the socket connection was ganked. I've applied a patch to the latest FileUpload 1.2-SNAPSHOT in SVN for including the root cause in exceptions, e.g.: +++ src/java/org/apache/commons/fileupload/FileUploadBase.java @@ -381,9 +381,9 @@ } catch (IOException e) { - throw new FileUploadException( - "Processing of " + MULTIPART_FORM_DATA - + " request failed. " + e.getMessage()); + throw (FileUploadException) new FileUploadException( + "Processing of " + MULTIPART_FORM_DATA + + " request failed. " + e.getMessage()).initCause(e); } Here is a stacktrace of one of the random "Stream ended unexpectedly" exceptions: 2006-05-16 16:59:03,947 ERROR [com.xo.nextgen.fileupload.FileUploadServlet] doPost: Failed to parse uploads from request: Processing of multipart/form-data request failed. Stream ended unexpectedly org.apache.commons.fileupload.FileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:384) at com.xo.nextgen.fileupload.FileUploadServlet.doPost(FileUploadServlet.java:278) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:72) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) at org.jboss.web.tomcat.security.JBossSecurityMgrRealm.invoke(JBossSecurityMgrRealm.java:275) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) at java.lang.Thread.run(Thread.java:534) Caused by: org.apache.commons.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly at org.apache.commons.fileupload.MultipartStream.readBodyData(MultipartStream.java:540) at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:371) ... 31 more The other server happily accepted the same upload: 2006-05-16 16:59:03,929 DEBUG [com.xo.nextgen.fileupload.FileUploadServlet] doPost: Received file /NTI/9992/voice/test/Voice/4vg85qUY.wav (size=25182) 2006-05-16 16:59:03,932 DEBUG [com.xo.nextgen.fileupload.FileUploadServlet] doPost: Wrote file /web/voiceweb/htdocs/NTI/9992/voice/test/Voice/4vg85qUY.wav 2006-05-16 16:59:03,933 DEBUG [com.xo.nextgen.fileupload.FileUploadServlet] doPost: Received file /NTI/9992/voice/test/Voice/8AyWrP3j.wav (size=37168) 2006-05-16 16:59:03,936 DEBUG [com.xo.nextgen.fileupload.FileUploadServlet] doPost: Wrote file /web/voiceweb/htdocs/NTI/9992/voice/test/Voice/8AyWrP3j.wav 2006-05-16 16:59:03,937 DEBUG [com.xo.nextgen.fileupload.FileUploadServlet] doPost: Received file /NTI/9992/xml/JUnit-4ubjoyNf-0.vxml (size=11120) 2006-05-16 16:59:03,939 DEBUG [com.xo.nextgen.fileupload.FileUploadServlet] doPost: Wrote file /web/voiceweb/htdocs/NTI/9992/xml/JUnit-4ubjoyNf-0.vxml 2006-05-16 16:59:03,940 DEBUG [com.xo.nextgen.fileupload.FileUploadServlet] doPost: Stored 3 files from 3 request content parts in 0:00:00.135 -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]