The following comment has been added to this issue:
Author: Michael Glavassevich
Created: Sun, 3 Oct 2004 9:43 AM
Body:
The Javadoc for InputStream.read(byte[] b, int off, int len) says:
"...
This method blocks until input data is available, end of file is detected, or an
exception is thrown.
If b is null, a NullPointerException is thrown.
If off is negative, or len is negative, or off+len is greater than the length of the
array b, then an IndexOutOfBoundsException is thrown.
If len is zero, then no bytes are read and 0 is returned; otherwise, there is an
attempt to read at least one byte. If no byte is available because the stream is at
end of file, the value -1 is returned; otherwise, at least one byte is read and stored
into b.
..."
Zero bytes will only be read if the length specified is zero, otherwise at least one
byte will be read. When the length parameter is non-zero a *conforming* InputStream
must return at least one byte or -1 if the end of the stream has been reached. It
sounds like the InputStream you are using is violating this condition and returning 0
instead of -1 at the end of the stream. This is a bug in the InputStream, not the
parser. This should be fixed at the source. When the input stream is broken the parser
shouldn't be guessing what the stream is trying to tell it.
---------------------------------------------------------------------
View this comment:
http://issues.apache.org/jira/browse/XERCESJ-1015?page=comments#action_53644
---------------------------------------------------------------------
View the issue:
http://issues.apache.org/jira/browse/XERCESJ-1015
Here is an overview of the issue:
---------------------------------------------------------------------
Key: XERCESJ-1015
Summary: Zero byte read on InputStream causes false SAXParseException when LF at
end of file
Type: Bug
Status: Unassigned
Priority: Major
Project: Xerces2-J
Components:
SAX
Versions:
2.6.0
2.6.2
Assignee:
Reporter: larry oneill
Created: Fri, 1 Oct 2004 9:36 AM
Updated: Sun, 3 Oct 2004 9:43 AM
Environment: Windows XP, 586
Description:
Under the following circumstances false SAXParseExceptions are thrown.
When a document is being parsed and has reached the end of the document.
If the InputStream supplying the document returns a 0 length indicator (meaning no
bytes currently available) AND
There is a Line Feed character at the end of the file, after the last element (without
a carriage return).
Then a false SAXParseException with one of the two following messages is thrown:
"Content is not allowed in trailing section"
or
"The markup in the document following the root element must be well-formed"
This could happen if the InputStream is reading from a buffer whose writer thread has
returned a 0 instead of -1 when the buffer is closed. While the writer to the buffer
should return a -1 on buffer close, in practice this may not always happen and Xerces
should cater for it. It certainly should not throw a spurious exception.
If a zero byte count is returned by an InputStream read while reading in the middle of
the document an ArrayIndexOutOfBounds exception is thrown.
I will include sample code to demonstrate both of these cases and a possible fix for
the problem.
---------------------------------------------------------------------
JIRA INFORMATION:
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
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]