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 2001/03/16 20:35:30 UTC

[Bug 997] New - for-each causes a NullPointerException when used with document() extension

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=997

*** shadow/997	Fri Mar 16 11:35:30 2001
--- shadow/997.tmp.24706	Fri Mar 16 11:35:30 2001
***************
*** 0 ****
--- 1,159 ----
+ +============================================================================+
+ | for-each causes a NullPointerException when used with document() extension |
+ +----------------------------------------------------------------------------+
+ |        Bug #: 997                         Product: XalanJ2                 |
+ |       Status: NEW                         Version: 2.0.0                   |
+ |   Resolution:                            Platform: PC                      |
+ |     Severity: Major                    OS/Version: Windows NT/2K           |
+ |     Priority:                           Component: Xalan                   |
+ +----------------------------------------------------------------------------+
+ |  Assigned To: xalan-dev@xml.apache.org                                     |
+ |  Reported By: acslocum@thoughtworks.com                                    |
+ |      CC list: Cc:                                                          |
+ +----------------------------------------------------------------------------+
+ |          URL:                                                              |
+ +============================================================================+
+ |                              DESCRIPTION                                   |
+ When traversing the nodes of a document() call with for-each, getting the 
+ value-of a missing node in the original document causes a NullPointerException 
+ in ChildWalkerMultiStep.
+ 
+ Given the template listed below, the desired output (Xalan 1 output) would look 
+ something like
+ <document>
+     <foo id="1"/>
+     <foo id="2"/>
+     <foo id="3"/>
+ </document>
+ 
+ This exception does not occur if the value-of tag is not there, and it does not 
+ occur if the value-of tag refers to some value in $iteratorId.
+ 
+ Full files:
+ -------bar.xsl----------
+ <?xml version = '1.0'?>
+ 
+ <xsl:stylesheet version="1.0" xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+ <xsl:output method="xml" indent="yes"/>
+ 
+  <xsl:template match="names" name="names">
+    <document>
+  	<xsl:variable name="iteratorId" select="document('iteratorList.xml')"/>
+  	<xsl:variable name="value" select="/names/element"/>
+  	<xsl:for-each select="$iteratorId//num">
+   	    <xsl:element name="foo">
+   	    	<xsl:attribute name="id">
+   	    		<xsl:value-of select="."/>
+   	    	</xsl:attribute>
+   	    	<xsl:value-of select="$value"/>
+   	    </xsl:element>
+  	</xsl:for-each>
+    </document>
+  </xsl:template>
+ 
+ </xsl:stylesheet>
+ ----------iteratorList.xml-------------
+ <list>
+ 	<num>1</num>
+ 	<num>2</num>
+ 	<num>3</num>
+ </list>
+ ---------foo.xml-----------
+ <names>
+ 	<baz>a</baz>
+ 	<baz>b</baz>
+ </names>
+ ---------java function to cause error----------
+ 	public void testDirect() {
+ 		try{
+ 			TransformerFactory tFactory = 
+ TransformerFactory.newInstance();
+ 			Transformer transformer = tFactory.newTransformer(new 
+ StreamSource("bar.xsl"));
+ 			transformer.transform(new StreamSource("foo.xml"), new 
+ StreamResult( new java.io.FileOutputStream("foo.out")));
+ 		} catch(Exception e) {
+ 			e.printStackTrace();
+ 		}
+ 	}
+ --------the big ugly stack trace that results----------
+ .javax.xml.transform.TransformerException
+         at org.apache.xalan.transformer.TransformerImpl.transformNode(Transforme
+ rImpl.java:1212)
+         at org.apache.xalan.transformer.TransformerImpl.run(TransformerImpl.java
+ :2894)
+         at java.lang.Thread.run(Thread.java:484)
+ ---------
+ java.lang.NullPointerException
+         at org.apache.xpath.axes.ChildWalkerMultiStep.nextNode(ChildWalkerMultiS
+ tep.java:140)
+         at org.apache.xpath.axes.LocPathIterator.nextNode(LocPathIterator.java:6
+ 89)
+         at org.apache.xalan.templates.ElemValueOf.execute(ElemValueOf.java:255)
+         at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Tr
+ ansformerImpl.java:2154)
+         at org.apache.xalan.templates.ElemElement.execute(ElemElement.java:328)
+         at org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemFor
+ Each.java:495)
+         at org.apache.xalan.templates.ElemForEach.execute(ElemForEach.java:228)
+         at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Tr
+ ansformerImpl.java:2154)
+         at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Tr
+ ansformerImpl.java:2097)
+         at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResul
+ t.java:739)
+         at org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemFor
+ Each.java:495)
+         at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTempla
+ tes.java:193)
+         at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Tr
+ ansformerImpl.java:2154)
+         at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Tr
+ ansformerImpl.java:2097)
+         at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(Tran
+ sformerImpl.java:2029)
+         at org.apache.xalan.transformer.TransformerImpl.transformNode(Transforme
+ rImpl.java:1189)
+         at org.apache.xalan.transformer.TransformerImpl.run(TransformerImpl.java
+ :2894)
+         at java.lang.Thread.run(Thread.java:484)
+ javax.xml.transform.TransformerException
+         at org.apache.xalan.transformer.TransformerImpl.transformNode(Transforme
+ rImpl.java:1212)
+         at org.apache.xalan.transformer.TransformerImpl.run(TransformerImpl.java
+ :2894)
+         at java.lang.Thread.run(Thread.java:484)
+ ---------
+ java.lang.NullPointerException
+         at org.apache.xpath.axes.ChildWalkerMultiStep.nextNode(ChildWalkerMultiS
+ tep.java:140)
+         at org.apache.xpath.axes.LocPathIterator.nextNode(LocPathIterator.java:6
+ 89)
+         at org.apache.xalan.templates.ElemValueOf.execute(ElemValueOf.java:255)
+         at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Tr
+ ansformerImpl.java:2154)
+         at org.apache.xalan.templates.ElemElement.execute(ElemElement.java:328)
+         at org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemFor
+ Each.java:495)
+         at org.apache.xalan.templates.ElemForEach.execute(ElemForEach.java:228)
+         at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Tr
+ ansformerImpl.java:2154)
+         at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Tr
+ ansformerImpl.java:2097)
+         at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResul
+ t.java:739)
+         at org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemFor
+ Each.java:495)
+         at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTempla
+ tes.java:193)
+         at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Tr
+ ansformerImpl.java:2154)
+         at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Tr
+ ansformerImpl.java:2097)
+         at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(Tran
+ sformerImpl.java:2029)
+         at org.apache.xalan.transformer.TransformerImpl.transformNode(Transforme
+ rImpl.java:1189)
+         at org.apache.xalan.transformer.TransformerImpl.run(TransformerImpl.java
+ :2894)
+         at java.lang.Thread.run(Thread.java:484)