Question

I'm using Xerces library for parsing XML. Here is the code snippet for parsing:

Document doc = builder.parse(new InputSource(new StringReader(someXMLString)));

Do I need to close the InputStream in InputSource manually or will the parse method handle it?

Was it helpful?

Solution 2

It seems there is nothing in DocumentBuilder API about it. We can test it as

InputStream is = new FileInputStream("test.xml") {
    @Override
    public void close() throws IOException {
        System.out.println("close");
        super.close();
    }
};
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = dbf.newDocumentBuilder();
documentBuilder.parse(is);

it prints close. But since there's nothing in API about it, this behaviour is not guaranteed.

OTHER TIPS

Given that you've got no external resources - just a StringReader - you don't need to close it. I would do so anyway though... then if you ever change the code to use a different input, you won't accidentally have a resource leak.

(For just throwaway code, I'd leave it - but be aware that if you're not careful, throwaway code has a habit of living longer than expected.)

You should close it by yourself.

The builder.parse method doesn't close the stream in its implementation. It won't know when is suitable to close the stream, so this requires the stream being manually closed.

If you use try-with then you can let java close it for you. Otherwise I would recommend closing it manually.

InputStream supposed to be closed, since close() method:

Closes this input stream and releases any system resources associated with the stream.

It's doesn't matter is your stream uses resources or not - it's good way to close it. Just to be sure.

InputSource is just a convenient class-wrapper on the stream, so it doesn't close the stream within it.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top