Try insert some debug statements just before the out.write.
System.out.println("bytesRead: " + bytesRead) would be interesting.

In fact this is kind of my-first-debugging and you don't even mention you did 
try it.

Ronald.


Op dinsdag, 24 november 2009 17:57 schreef geoff...@fileflow.com:



Hi everyone.
I'm stuck with a problem I don't understand. We have a tomcat server and after redeploying our war file, we get this error: java.lang.ArrayIndexOutOfBoundsException
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:346)
at 
org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:764)
at 
org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:118)
at 
org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:573)
at org.apache.coyote.Response.doWrite(Response.java:560)
at 
org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:325)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:381)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:370)
at 
org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
at com.fileflow.downloader.Downloader.doGet(Downloader.java:123)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)
Notice that there are no number on the first line and it is usually the case.
The code that is "responsible is:


private ServletOutputStream out;
private InputStream in;
...
in = new FileInputStream(tmp);
...
out = response.getOutputStream();
byte[] buf = new byte[8 * 1024]; // 8K buffer
int bytesRead;
while((bytesRead = in.read(buf)) > 0) {
out.write(buf, 0, bytesRead);
}
The updated code didn't change anything in that Servlet so I really have no clue what happened. It happens on tomcat 6.0.18 and 6.0.20. Java is 1.6.0_11. Thanks for any help.

Best Regards
Geoffrey






Reply via email to