Parsed document is not fully initialized until getFirstChild() is called
------------------------------------------------------------------------
Key: XERCESJ-1147
URL: http://issues.apache.org/jira/browse/XERCESJ-1147
Project: Xerces2-J
Type: Bug
Versions: 2.8.0
Environment: java version "1.5.0_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)
Saxon: saxonb8-7j
Reporter: Libor Valenta
I have problems with Xerces bundled with JDK 1.5 as well as Xerces-J 2.8.0, I
was usin XSLT 2.0 transformer Saxon 8.7 to access document produced by java
extension. Problems go away when I call document.getFirstChild(); before
returning document for the transformation, the side-effect of getFirstChild()
makes me believe that there is something wrong with implementation of the
Document.
Here is simple code to demostrate the problem Test .java:
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.StringReader;
import java.io.StringWriter;
public class Test {
// this will call test1() which DOES call getFirstChild() before document is
returned
static String XSL1 = "<?xml version=\"1.0\"?>\n" +
"<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"
version=\"2.0\" xmlns:test=\"Test\">\n" +
" <xsl:template match=\"/\">\n" +
" <xsl:copy-of select=\"test:test1()\"/>\n" +
" </xsl:template>\n" +
"</xsl:stylesheet>";
// this will call test2() which DOES NOT call getFirstChild() before document
is returned
static String XSL2 = "<?xml version=\"1.0\"?>\n" +
"<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"
version=\"2.0\" xmlns:test=\"Test\">\n" +
" <xsl:template match=\"/\">\n" +
" <xsl:copy-of select=\"test:test2()\"/>\n" +
" </xsl:template>\n" +
"</xsl:stylesheet>";
public static void main(String[] args) throws Exception {
transform(XSL1); // Result is: <?xml version="1.0" encoding="UTF-8"?><y/>
transform(XSL2); // Result is:
}
private static void transform(String xsl) throws TransformerException {
Transformer transformer =
TransformerFactory.newInstance().newTransformer(new StreamSource(new
StringReader(xsl)));
StringWriter out = new StringWriter();
transformer.transform(new StreamSource(new StringReader("<x/>")), new
StreamResult(out));
System.out.println("Result is: " + out);
}
public static Document test1() throws Exception {
DocumentBuilder documentBuilder =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = documentBuilder.parse(new InputSource(new
StringReader("<y/>")));
// next call has some side-effect that make things work,
synchronizeChildren() ?
// likely bug in com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl
document.getFirstChild();
return document;
}
public static Document test2() throws Exception {
DocumentBuilder documentBuilder =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = documentBuilder.parse(new InputSource(new
StringReader("<y/>")));
return document;
}
}
I do not know how Saxon is using the document, but whatever it does, it should
behave same way for test1() and test2()
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]