I am getting this exception when transforming a xml with xslt:
Caused by: java.lang.OutOfMemoryError: Java heap space
at net.sf.saxon.tree.tiny.TinyTree.condense(TinyTree.java:430)
at net.sf.saxon.tree.tiny.TinyBuilder.close(TinyBuilder.java:206)
at net.sf.saxon.event.ReceivingContentHandler.endDocument(ReceivingContentHandler.java:244)
at net.sf.saxon.event.Sender.sendSAXSource(Sender.java:449)
at net.sf.saxon.event.Sender.send(Sender.java:177)
at net.sf.saxon.Controller.makeSourceTree(Controller.java:1910)
at net.sf.saxon.s9api.XsltTransformer.transform(XsltTransformer.java:573)
at net.sf.saxon.jaxp.TransformerImpl.transform(TransformerImpl.java:185)
at com.lomnido.service.XsltTransformService.$tt__transform(XsltTransformService.groovy:27)
I am using Saxon-HE, version 9.7.0-5
My code:
TransformerFactory factory = TransformerFactory.newInstance();
StreamSource xsltStream = new StreamSource(xslt)
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
Transformer transformer = factory.newTransformer(xsltStream);
StreamSource ins = new StreamSource(input);
File tmp = File.createTempFile("test", "xslttransform")
StreamResult out = new StreamResult(tmp);
transformer.transform(ins, out);
The size of the xml file is about 100MB. Is there any way how I could avoid this problem? Is there something like streaming the input file? Is there an alternative to saxon? I need xslt 2.0 for my transformations.
Best regards, Peter