At long last I've nailed down a test scenario for the NullPointerException after several transformations that reuse a stylesheet.. The ArrayOutOfBounds may be related and is also in my hunt. Because it takes several transformations to hit, I have not been able to create a simple test case. Good news is I have a setup I can trace by inserting debugging code into the Xalan source.
The NullPointer occurs within a named template at org.apache.xpath.objects.XRTreeFrag.xstr(). The member variable m_dtm is null and m_allowRelease is true. I'm assuming either detach() or destruct() was called. It could be a race or some bad laogic that leads to xstr() being called after detach() or destruct(). But I need to confirm the last two calls (I just figured out a way). I could use some help understanding how DTMIterator and XRTreeFrag interaction with repect to allowRelease. I'm guessing that I may have come across a DTM implementation backwater. If anybody has some ideas, I'd much appreciate them. ============ stack trace ========================== call: dynamic-link null(m_dtm): true m_allowRelease: true m_dtmRoot: 131174 EXCEPTION: javax.xml.transform.TransformerException: java.lang.NullPointerException at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1226) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:634) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1088) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1066) at Example.exampleTransformerReuse(Example.java:87) at Example.main(Example.java:72) --------- java.lang.NullPointerException at org.apache.xpath.objects.XObject.dispatchCharactersEvents(XObject.java:187) at org.apache.xpath.Expression.executeCharsToContentHandler(Expression.java:303) at org.apache.xalan.templates.ElemValueOf.execute(ElemValueOf.java:319) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2281) at org.apache.xalan.templates.ElemIf.execute(ElemIf.java:200) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2281) at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:432) at org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:280) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2281) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:710) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2281) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:710) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2281) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:710) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2281) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:710) at org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemForEach.java:438) at org.apache.xalan.templates.ElemForEach.execute(ElemForEach.java:299) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2281) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:710) at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:422) at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:226) at org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemForEach.java:438) at org.apache.xalan.templates.ElemForEach.execute(ElemForEach.java:299) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2281) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:710) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2281) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:710) at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:422) at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:226) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2281) at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2107) at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1171) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:634) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1088) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1066) at Example.exampleTransformerReuse(Example.java:87) at Example.main(Example.java:72)