Thanks for work you put into those patches, but I cannot confirm the problem actually exists. According to the InputSource Javadoc, the underlying input stream should be closed as part of the parsing process:
[...] standard processing of both byte and character streams is to close them on as part of end-of-parse cleanup, so applications should not attempt to re-use such streams after they have been handed to a parser.
I did some further testing on this by putting a breakpoint on InputStread.close(), and it does get called as part of DocumentBuilder.parse(). All of this on MacOS X, using the standard Oracle JDK (1.7.0_04-b21).
Are you using the standard Oracle JDK Xerces parser, or perhaps using something else, like the IBM JDK or a different parser?