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.ByteArrayInputStre
am;
import java.io.ByteArrayOutputStr
eam;
import javax.xml.transform.Source
;
import javax.xml.transform.Transf
ormer;
import javax.xml.transform.Transf
ormerFacto
ry;
import javax.xml.transform.stream
.StreamRes
ult;
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.newInst
ance();
Transformer transformer = factory.newTransformer(xsl
Source);
//4. create a output result for the output of the transform
StreamResult result = createResult();
//5. transform
try
{
transformer.transform(data
Source,res
ult);
}
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().t
oString();
//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.Transf
ormerExcep
tion: java.io.UTFDataFormatExcep
tion: Invalid byte 1 of 1-byte UTF-8 sequence.
How to handle these special charaters?
Start Free Trial