You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by bu...@apache.org on 2002/04/24 21:16:39 UTC
DO NOT REPLY [Bug 8485] New: -
xsl:copy-of select fails when using sax stream
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: xalan-dev@xml.apache.org
ReportedBy: smoriart@advance.net
<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();
}
}
}