The method I gave in my previous email is used when
I have a String. This is the way I am build the document when I already have the
InputStream. And I am encountering the OutOfMemoryError problem when I am using
this method. I would assume the earlier method would definitely give the same
problem (because it has to convert String to byte[] and then prepare the
InputStream from that).
This is the method:
***********************************************************
public Document
getDocumentFromStream(InputStream xmlStream)
throws Exception
{
Document doc = null;
BufferedReader reader =
null;
try {
reader
=
new
BufferedReader(
new
InputStreamReader(xmlStream, "ISO-8859-1"));
} catch
(UnsupportedEncodingException e) {
log.warn("Character set
Cp1252 not supported, defaulting to UTF-8");
reader
=
new BufferedReader(new InputStreamReader(xmlStream,
"UTF8"));
}
try {
SAXBuilder
builder = new SAXBuilder(false);
doc =
builder.build(reader);
return doc;
} catch (JDOMException e)
{
log.error("Error parsing file:",
e);
throw e;
}
}
*********************************************************
----- Original Message -----
Sent: Monday, December 29, 2003 4:48
PM
Subject: Memory problems
Hi,
I am using JDOM for XML processing. I use
SAXBuilder. I am having memory problems when it deals with huge documents
(like 10MB), even though it is using SAXBuidler. It throws OutOfMemoryError
when I try to build a 8MB document.
I assume it does not keep the whole tree in
memory if I use SAXBuilder. Does it? If what I assume is right, why is it
running out of memory while building the doc of 8MB xml? 8MB should not
be enough to make fail because of memory problems. right?
This is how I build a document:
****************************************************************************************************
public Document
getDocumentfromString(String
xmlString)
throws JDOMException,
IOException {
Document schemaDoc
= null;
SAXBuilder builder = new
SAXBuilder(false);
String
resultingXML = null;
byte[]
xmlBytes = null;
try
{
//get
the UTF 8 encoded
bytes
xmlBytes =
xmlString.getBytes("UTF8");
schemaDoc = builder.build(new
ByteArrayInputStream(xmlBytes));
} catch (UnsupportedEncodingException usee)
{
// system does not support UTF-8 encoding. use default
encoding
schemaDoc = builder.build(new
StringReader(xmlString));
}
return
schemaDoc;
}
*****************************************************************************************************
Am I doing anything wrong to make it
fail while building a 8MB doc?
Do you think using JAXP API (again, using SAX) is
better memory wise?
Any help would be greatly
appreciated!
Thanks,
Pramodh.