Hi,
In 2-2-D9, I am having a problem with an extension element that returns
org.w3c.dom.Element. After about 500 sucessful invocations of the
extension function, xalan throws an exception executing my extension
element. If the same extension function is changed to return void, the
stylesheet completes fine.
Could you take a look at the attached extension code and output? If it's
not my bug, I'll gladly file this in bugzilla.
Thanks,
--
Nick.
import java.util.*;
import java.text.SimpleDateFormat;
import org.w3c.dom.Element;
import org.w3c.dom.DocumentFragment;
import org.w3c.dom.DOMException;
import org.xml.sax.ContentHandler;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.AttributesImpl;
import org.xml.sax.Attributes;
import javax.xml.transform.TransformerException;
import javax.xml.transform.stream.StreamResult;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.xalan.extensions.XSLProcessorContext;
import org.apache.xalan.transformer.TransformerImpl;
import org.apache.xpath.objects.XObject;
import org.apache.xalan.templates.StylesheetRoot;
import org.apache.xalan.templates.ElemExtensionCall;
import org.apache.xalan.templates.ElemTemplateElement;
import org.apache.xalan.templates.OutputProperties;
/**
*/
public class TestExtension
{
protected final static SimpleDateFormat timestampFormatter =
new SimpleDateFormat("yyyy/MM/dd hh:mm:ss z");
protected int counter = 0;
org.w3c.dom.Document elementFactory;
public TestExtension() throws javax.xml.parsers.ParserConfigurationException
{
elementFactory =
DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
}
/**
*/
public Element test(XSLProcessorContext context, ElemExtensionCall eec)
throws java.net.MalformedURLException,
java.io.IOException,
TransformerException
{
String attribute = eec.getAttribute("attribute",
context.getContextNode(),
context.getTransformer());
System.out.println(timestampFormatter.format(new Date()) +
" TestExtension.test(attribute:" + attribute + ") " +
(++counter) );
return createSuccessElement(context, "TestValue");
}
/**
* Create return element indicating success, returns UUID.
*/
private Element createSuccessElement(XSLProcessorContext context, String value)
throws DOMException
{
return createElement(context, "SuccessElement", value);
}
/**
* Return an element without attributes.
* @param name element name,
* @param value element text.
*/
private Element
createElement(XSLProcessorContext context, String name, String value)
throws DOMException
{
Element el = elementFactory.createElement(name);
el.appendChild(elementFactory.createTextNode(value));
return el;
}
}
TestExtension.xsl.gz
TestExtension.stdout.gz
+ java -Xmx256m -Xms32m org.apache.xalan.xslt.Process -edump -XSL TestExtension.xsl
; SystemID: file:///var/home/nsushkin/oxs/2.0.8xj2/src/TestExtension.xsl; Line#: 521;
Column#: 34
javax.xml.transform.TransformerException: Unknown error when calling extension
at
org.apache.xalan.templates.ElemExtensionCall.execute(ElemExtensionCall.java:327)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2182)
at
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2008)
at
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1171)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:638)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1088)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1066)
at org.apache.xalan.xslt.Process.main(Process.java:876)
---------
java.lang.ArrayIndexOutOfBoundsException
at org.apache.xml.dtm.ref.DTMManagerDefault.getDTM(DTMManagerDefault.java:549)
at org.apache.xpath.NodeSetDTM.getDTM(NodeSetDTM.java:397)
at
org.apache.xalan.extensions.XSLProcessorContext.outputToResultTree(XSLProcessorContext.java:286)
at
org.apache.xalan.extensions.ExtensionHandlerJavaClass.processElement(ExtensionHandlerJavaClass.java:423)
at
org.apache.xalan.templates.ElemExtensionCall.execute(ElemExtensionCall.java:307)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2182)
at
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2008)
at
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1171)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:638)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1088)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1066)
at org.apache.xalan.xslt.Process.main(Process.java:876)