You are viewing a plain text version of this content. The canonical link for it is here.
Posted to taglibs-dev@jakarta.apache.org by bu...@apache.org on 2004/08/01 16:57:49 UTC

DO NOT REPLY [Bug 30427] New: - Response contents can be truncated prematurely

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=30427>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=30427

Response contents can be truncated prematurely

           Summary: Response contents can be truncated prematurely
           Product: Taglibs
           Version: 1.0
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: IO Taglib
        AssignedTo: taglibs-dev@jakarta.apache.org
        ReportedBy: david.goodenough@btconnect.com


I think I have found a problem in the IO taglib.   
 
I have a site where I use JSP with JSTL and the IO taglibs to provide a 
web frount end to a servlet which takes XML requests and delivers 
XML responses (this is used by some embedded systems as well as 
the web UI). 
 
Every now and then I get a null response back from the servlet when 
using the IO taglib.  The embedded systems never hit this problem. 
The log at the Servlet indicates that a response was sent, and ethereal 
concures. 
 
Originally the servlet only accepted https requests, even from the 
web UI, and this is where I hit this problem first.   I changed the 
servlet so that it would accept http requests from localhost and  
the problem diminished but did not go away. 
 
The problem - I think - is in the org.apache.taglibs.io.PipiHelper 
class, in the pipe routine.  It currently reads:- 
 
            while (true) { 
                int size = input.read( buffer ); 
                if ( size <= 0 ) { 
                    return; 
                } 
                output.write( buffer, 0, size ); 
 
The problem is that size can be zero, especially for https 
sessions when the stream is not at end of file.  The only 
real end of file is when size == -1. 
 
The code should read:- 
 
            while (true) {  
                int size = input.read( buffer );  
                if ( size < 0 ) {  
                    return;  
                }  
                else if( size == 0)  { 
                        Thread.sleep( 1); 
                } 
                else { 
                         output.write( buffer, 0, size );  
                } 
 
I am not sure whether the Thread sleep is necessary, but it does 
give the scheduler a chance when the request is to a local source 
in the same process (i.e. to a Tomcat servlet).

---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: taglibs-dev-help@jakarta.apache.org