| Duplicate :   | 
When XSL transformation with Xalan involves too many temporary result trees, the transformation can run out of DTM IDs, resulting in an exception like:
ERROR:  'No more DTM IDs are available'
javax.xml.transform.TransformerException: com.sun.org.apache.xml.internal.dtm.DTMException: No more DTM IDs are available
        at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:746)
        at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:351)
        at Transform.main(Transform.java:14)
I'm attaching an example to reproduce.
Expected output:
"Looks like no exception. Bye."
Actual output:
ERROR:  'No more DTM IDs are available'
javax.xml.transform.TransformerException: com.sun.org.apache.xml.internal.dtm.DTMException: No more DTM IDs are available
        at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:746)
        at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:351)
        at Transform.main(Transform.java:14)
Caused by: com.sun.org.apache.xml.internal.dtm.DTMException: No more DTM IDs are available
        at com.sun.org.apache.xml.internal.dtm.ref.DTMManagerDefault.addDTM(DTMManagerDefault.java:151)
        at com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager.getDTM(XSLTCDTMManager.java:397)
        at com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager.getDTM(XSLTCDTMManager.java:215)
        at com.sun.org.apache.xalan.internal.xsltc.dom.SAXImpl.getResultTreeFrag(SAXImpl.java:1831)
        at com.sun.org.apache.xalan.internal.xsltc.dom.DOMAdapter.getResultTreeFrag(DOMAdapter.java:437)
        at template.dodot()
        at template.recursefinal()
        at template.recursefinal()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.template$dot$0()
        at template.applyTemplates()
        at template.transform()
        at com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet.transform(AbstractTranslet.java:620)
        at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:739)
        ... 2 more
---------
com.sun.org.apache.xml.internal.dtm.DTMException: No more DTM IDs are available
        at com.sun.org.apache.xml.internal.dtm.ref.DTMManagerDefault.addDTM(DTMManagerDefault.java:151)
        at com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager.getDTM(XSLTCDTMManager.java:397)
        at com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager.getDTM(XSLTCDTMManager.java:215)
        at com.sun.org.apache.xalan.internal.xsltc.dom.SAXImpl.getResultTreeFrag(SAXImpl.java:1831)
        at com.sun.org.apache.xalan.internal.xsltc.dom.DOMAdapter.getResultTreeFrag(DOMAdapter.java:437)
        at template.dodot()
        at template.recursefinal()
        at template.recursefinal()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse2()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.recurse1()
        at template.template$dot$0()
        at template.applyTemplates()
        at template.transform()
        at com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet.transform(AbstractTranslet.java:620)
        at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:739)
        at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:351)
        at Transform.main(Transform.java:14)