DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=8485>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=8485 xsl:copy-of select fails when using sax stream Summary: xsl:copy-of select fails when using sax stream Product: XalanJ2 Version: 2.3 Platform: PC OS/Version: Windows 9x Status: NEW Severity: Normal Priority: Other Component: org.apache.xalan.transformer AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] <xsl:copy-of select="." /> seems to fail when using sax events. However, it seems to be fine when using a flat xml file.. >>>>>> For example: Using the following files: my.xml: <?xml version="1.0"?> <myXML>Data</myXML> my.xsl: <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <xsl:copy-of select="." /> </xsl:template> </xsl:stylesheet> >From the command line, results in the following: C:\java\xalan>java org.apache.xalan.xslt.Process -in my.xml -xsl my.xsl <?xml version="1.0" encoding="UTF-8"?> <myXML>Data</myXML> >>> However, when using the following script (see below) results in: C:\java\xalan>java XSLTrans <?xml version="1.0" encoding="UTF-8"?> Exception in thread "main" java.lang.RuntimeException: java.lang.ArrayIndexOutOf BoundsException at org.apache.xalan.transformer.TransformerImpl.run(TransformerImpl.java :3231) at org.apache.xalan.transformer.TransformerHandlerImpl.endDocument(Trans formerHandlerImpl.java:436) at XSLTrans.emitSAX(XSLTrans.java:32) at XSLTrans.main(XSLTrans.java:58) If I run the same script substituting <xsl:copy-of select="." /> with <myXML><xsl:apply-templates /></myXML> the following is output: C:\java\xalan>java XSLTrans <?xml version="1.0" encoding="UTF-8"?> <myXML>Data</myXML> which seems fine. I tried on both Win98 & Win2000 & downloaded the latest release version of Xalan on 4/23, though I found the problem in earlier versions as well. >>>>>>XSLTrans.java import java.util.*; import java.text.*; import java.io.*; import org.xml.sax.*; import org.xml.sax.helpers.*; import javax.xml.transform.*; import javax.xml.transform.sax.*; import javax.xml.transform.stream.*; public class XSLTrans { static ContentHandler ch; private static final Attributes EMPTY_ATTR = new AttributesImpl(); char temp[]; public void setContentHandler (ContentHandler ch) { this.ch = ch; } public void emitSAX() throws SAXException { ch.startDocument(); ch.startElement("","","myXML",EMPTY_ATTR); String data = "Data"; temp = data.toCharArray(); ch.characters(temp, 0, temp.length); ch.endElement("","","myXML"); ch.endDocument(); } public static void main(String args[]) throws ParseException { File xsltFile = new File("my.xsl"); try { //Instantiate producer XSLTrans myProducer = new XSLTrans(); // create an instance of TransformerFactory TransformerFactory transFact = TransformerFactory.newInstance(); if (transFact.getFeature(SAXTransformerFactory.FEATURE)) { SAXTransformerFactory saxTransFact = (SAXTransformerFactory) transFact; TransformerHandler transHand = saxTransFact.newTransformerHandler(new StreamSource(xsltFile)); // set the destination for the XSLT transformation transHand.setResult(new StreamResult(System.out)); myProducer.setContentHandler(transHand); myProducer.emitSAX(); } } catch (SAXException e) { System.out.println("SAXException"); } catch (TransformerException e) { System.out.println("TransformerException"); e.printStackTrace(); } } }
