Hi,
On my weblogic server 8.1, I have a small piece of code which reads xml data and generates reports in PDF format.
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import org.xml.sax.InputSource;
//HERE the xslTransform is passed as a StringBuffer of size 512
public
String transform (String xmlData, String xslTransform) throws Exception
{
String outputXML = null;
//1. first convert the input xml to a source
Source dataSource = createSource(xmlData);
//2. convert this xsl too to a Source
Source xslSource = createSource(xslTransform);
//3. convert the xsl to a Transformer
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(xslSource);
//4. create a output result for the output of the transform
StreamResult result = createResult();
//5. transform
try
{
transformer.transform(dataSource,result);
}
catch(Exception e)
{
e.printStackTrace(); // THE ERROR PRINTED HERE is java.lang.OutOfMemoryError
}
//6. get the String the stream result
//the following works because toString is overridden for ByateArrayOutputStream
outputXML = result.getOutputStream().toString();
//7. return the string result
return outputXML;
}
private Source createSource(String xml)
{
//1. create a byte array
byte[] array = xml.getBytes();
//2. create a inputstrem for this array
ByteArrayInputStream xmlStream = new ByteArrayInputStream(array);
//3. now create a SAXSource from this stream
Source xmlSource = new SAXSource(new InputSource(xmlStream));
return xmlSource;
}
private StreamResult createResult()
{
ByteArrayOutputStream baos = new ByteArrayOutputStream(512);
return new StreamResult(baos);
}
But if the xml size is too big, I get java.lang.OutOfMemoryError.
Can you please give me a solution for this?
Also, even if my xml is small and it contains some special characters like �Threshold is �3,000�
It gives me the following exception:
javax.xml.transform.TransformerException: java.io.UTFDataFormatException: Invalid byte 1 of 1-byte UTF-8 sequence.
How to handle these special charaters?
-Dhananjay