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 2003/07/30 17:14:20 UTC

DO NOT REPLY [Bug 21998] New: - java.lang.NullPointerException at org.apache.xpath.objects.XNodeSet.dispatchCharactersEvents

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=21998>.
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=21998

java.lang.NullPointerException at org.apache.xpath.objects.XNodeSet.dispatchCharactersEvents

           Summary: java.lang.NullPointerException at
                    org.apache.xpath.objects.XNodeSet.dispatchCharactersEven
                    ts
           Product: XalanJ2
           Version: 2.5
          Platform: PC
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: org.apache.xpath
        AssignedTo: xalan-dev@xml.apache.org
        ReportedBy: franck.schmidlin@aniteps.com


I have found a combination of xml and xsl that creates a null pointer exception 
when the same transform is run twice in a row. Calling 
transformer.clerParameters() between the 2 calls solves the problem, even tho 
no parameter is used by the xsl.

I have failed to narrow down the problem to a specific part of my xml/xsl, but 
I have 2 test files that I'll be happy to send to you.

The stack trace looks like:
javax.xml.transform.TransformerException: java.lang.NullPointerException
	at org.apache.xalan.transformer.TransformerImpl.transformNode
(TransformerImpl.java:1226)
	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 test.main(test.java:99)
Caused by: java.lang.NullPointerException
	at org.apache.xpath.objects.XNodeSet.dispatchCharactersEvents
(XNodeSet.java:262)
	at org.apache.xpath.Expression.executeCharsToContentHandler
(Expression.java:303)
	at org.apache.xalan.templates.ElemValueOf.execute(ElemValueOf.java:319)
	at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates
(TransformerImpl.java:2182)
	at org.apache.xalan.templates.ElemLiteralResult.execute
(ElemLiteralResult.java:678)
	at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates
(TransformerImpl.java:2182)
	at org.apache.xalan.templates.ElemLiteralResult.execute
(ElemLiteralResult.java:678)
	at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates
(TransformerImpl.java:2182)
	at org.apache.xalan.templates.ElemLiteralResult.execute
(ElemLiteralResult.java:678)
	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)
	... 4 more
---------
java.lang.NullPointerException
	at org.apache.xpath.objects.XNodeSet.dispatchCharactersEvents
(XNodeSet.java:262)
	at org.apache.xpath.Expression.executeCharsToContentHandler
(Expression.java:303)
	at org.apache.xalan.templates.ElemValueOf.execute(ElemValueOf.java:319)
	at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates
(TransformerImpl.java:2182)
	at org.apache.xalan.templates.ElemLiteralResult.execute
(ElemLiteralResult.java:678)
	at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates
(TransformerImpl.java:2182)
	at org.apache.xalan.templates.ElemLiteralResult.execute
(ElemLiteralResult.java:678)
	at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates
(TransformerImpl.java:2182)
	at org.apache.xalan.templates.ElemLiteralResult.execute
(ElemLiteralResult.java:678)
	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 test.main(test.java:99)


The test program is the bog standard:
        try
        {
            javax.xml.parsers.DocumentBuilderFactory dbf=
                    javax.xml.parsers.DocumentBuilderFactory.newInstance();
            
            dbf.setNamespaceAware(true);
            
            // See http://xml.apache.org/xerces-j/features.html
            // NB: The fact that you can set these throught the 
            // DocumentBuilderFactory is not well documented...
            
            // Disable validation, to stop us from trying to access 
            // the WML DTD everytime we test WAP.
            dbf.setAttribute(
                "http://xml.org/sax/features/validation",
                Boolean.FALSE);
            
            dbf.setAttribute(
                "http://apache.org/xml/features/nonvalidating/load-external-
dtd",
                Boolean.FALSE);
            
            javax.xml.parsers.DocumentBuilder db= dbf.newDocumentBuilder();
            
            // load xml
            java.io.InputStream is = new java.io.FileInputStream
("F:/XalanTest/test.xml");
            org.w3c.dom.Document xml = db.parse(is);
            
            //load xsl
            is = new java.io.FileInputStream("F:/XalanTest/test.xsl");
            org.w3c.dom.Document xsl = db.parse(is);
            
            //Create Transformer
            javax.xml.transform.TransformerFactory tf= 
            javax.xml.transform.TransformerFactory.newInstance();
            javax.xml.transform.Transformer xslt = 
                tf.newTransformer(
                    new javax.xml.transform.dom.DOMSource(xsl));
                
            java.util.Properties oprops= new java.util.Properties();
            oprops.put(javax.xml.transform.OutputKeys.METHOD, "xml");
            
            xslt.setOutputProperties(oprops);
            
            //Apply transform once
            org.w3c.dom.Document xmlOne = db.newDocument();
            
            try
            {
                xslt.transform(
                    new javax.xml.transform.dom.DOMSource(xml), 
                    new javax.xml.transform.dom.DOMResult(xmlOne));
            }
            catch (TransformerException e)
            {
                System.out.print("ONE Failed");
                e.printStackTrace();
            }
            
            // This call solves the problem
            //xslt.clearParameters();
            
            //Apply transform twice   
            org.w3c.dom.Document xmlTwo = db.newDocument();
            
            try
            {
                xslt.transform(
                    new javax.xml.transform.dom.DOMSource(xml), 
                    new javax.xml.transform.dom.DOMResult(xmlTwo));
                    
                System.out.print("No problem reported...");
            }
            catch (TransformerException e1)
            {
                System.out.print("TWO Failed");
                e1.printStackTrace();
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }