I'm a new Xalan-J user trying (unsuccessfully) to switch over to XSLTC from
an older version of Xalan. I'm accessing XSLTC via the JSP <x:transform>
tag. My previously working application (under the old Xalan) is failing in
a peculiar way that appears to be some sort of memory related issue that
somehow seems to also be related to the complexity of my XSL templates.
I've been trying to create a simple test case, but the error goes away as I
reduce the complexity of the templates. The XSLT runs to completion but
produces incorrect results. When I set a variable to a sequence of XML
statements, then immediately attempt to output these results via an
<xsl:message> via <xsl:copy-of>, rather than spitting out the correct
nodes, it produces text that, strangely, appears as part of my own code
elsewhere in my templates. The lines that demonstrate that something is
wrong (although they don't seem to be the cause of the problem)
...
<xsl:variable name="attributes" >
<outer-level>
<inner-level>foo</inner-level>
</outer-level>
</xsl:variable>
<xsl:message>
<xsl:copy-of select="nodeset($attributes)" />
</xsl:message>
...
At first, I thought it was a problem with the nodeset function, but after
trying to isolate the bug, it appears to go away when I eliminate some
imported templates. I've actually created a test case where I can
eliminate the problem by removing 3 lines of meaningless code (creation of
an empty variable) that appear _after_ the code above. In other words,
template code is altering the results of code which is executed before it.
It seems that if the templates are too complex, my stack or memory or
something gets corrupted. I have no knowledge of the implementation
details so can only guess.
I noticed that there is some discussion of a 64K limit (wow that's small)
that gets overwhelmed when XSL templates are inlined during compilation.
This seems relevant; however, I've also found two conflicting mentions of
this on xml.apache.org, one which says that inlining is "on" by default and
the other which says it is "off". I downloaded xsltc only two days ago so
assume I'm using the most recent versison. If I need to turn this off, how
do I do this so that JSP pages calls to <x:transform> have this parameter
set (presumably a line in a .properties file somewhere?)
If the current default is already "off", does anyone have any suggestions
as to how to debug/work-around this? I'm stuck and will have to go back to
old Xalan if I can't find a solution.
Thanks (particularly to the developers)
Mark