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=13243>. 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=13243 "Variable accessed before it is bound!" error in nested <xsl:call-template> calls Summary: "Variable accessed before it is bound!" error in nested <xsl:call-template> calls Product: XalanJ2 Version: 2.2.0 Platform: PC OS/Version: Windows NT/2K Status: NEW Severity: Blocker Priority: Other Component: org.apache.xpath AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] In our xslt we frequently call templates with parameters that are the result of other templates which are then copied to output. This has worked in all versions of Xalan, Saxon and XT up until the latest Xalan that I have tried, 2.2.0 (It also fails with the versions in J2SDK 1.4.1 and in Tomcat 4.1.12) A sample stylesheet that shows the problem follows : <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:call-template name="test1"> <xsl:with-param name="param">paramval1</xsl:with-param> </xsl:call-template> </xsl:template> <xsl:template name="test1"> <xsl:param name="param">paramval2</xsl:param> <xsl:call-template name="outer"> <xsl:with-param name="contents"> <xsl:call-template name="test3"/> <xsl:call-template name="test2"> <xsl:with-param name="param"> <xsl:value-of select="$param"/> </xsl:with-param> </xsl:call-template> </xsl:with-param> </xsl:call-template> </xsl:template> <xsl:template name="outer"> <xsl:param name="contents"/> <xsl:copy-of select="$contents"/> </xsl:template> <xsl:template name="test2"> <xsl:param name="param">paramval3</xsl:param> param = <xsl:value-of select="$param"/> </xsl:template> <xsl:template name="test3"> </xsl:template> </xsl:stylesheet> The problem goes away if the call to the test3 template is removed or the contents call-template and with-param are removed and the test3 and test2 calls made directly. At the end of this report is the stack produced. I hope you can fix this problem as we use this technique throughout our stylesheets, which total in size to 1.5MBytes. It is a major problem for us. Richard Heath. javax.xml.transform.TransformerException: Variable accessed before it is bound! at org.apache.xpath.VariableStack.getLocalVariable (VariableStack.java:304) at org.apache.xpath.operations.Variable.execute(Variable.java:172) at org.apache.xpath.objects.XRTreeFragSelectWrapper.execute (XRTreeFragSelectWrapper.java:57) at org.apache.xpath.XPath.execute(XPath.java:318) at org.apache.xalan.templates.ElemWithParam.getValue (ElemWithParam.java:240) at org.apache.xalan.templates.ElemCallTemplate.execute (ElemCallTemplate.java:259) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates (TransformerImpl.java:2182) at org.apache.xalan.transformer.TransformerImpl.transformToRTF (TransformerImpl.java:1725) at org.apache.xalan.templates.ElemWithParam.getValue (ElemWithParam.java:256) at org.apache.xalan.templates.ElemCallTemplate.execute (ElemCallTemplate.java:259) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates (TransformerImpl.java:2182) at org.apache.xalan.templates.ElemTemplate.execute (ElemTemplate.java:430) at org.apache.xalan.templates.ElemCallTemplate.execute (ElemCallTemplate.java:279) 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 com.fdgroup.xml.XSLParse$Stylesheet.doTransform(XSLParse.java:245) at com.fdgroup.xml.XSLParse.processXMLXSL(XSLParse.java:67) at com.fdgroup.xml.XSLParse.processXMLXSL(XSLParse.java:108) at com.fdgroup.xsservlet.CachedXSServlet.transformAndWrite (CachedXSServlet.java:208) at com.fdgroup.xsservlet.XSServlet.transform(XSServlet.java:560) at com.fdgroup.xsservlet.XSServlet.doGetPost(XSServlet.java:495) at com.fdgroup.xsservlet.XSServlet.doGetPost(XSServlet.java:397) at com.fdgroup.xsservlet.XSServlet.doGet(XSServlet.java:347) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:260) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNe xt(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke (ContainerBase.java:995) at org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:191) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNe xt(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke (ContainerBase.java:995) at org.apache.catalina.core.StandardContext.invoke (StandardContext.java:2396) at org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:180) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNe xt(StandardPipeline.java:643) at org.apache.catalina.valves.ErrorDispatcherValve.invoke (ErrorDispatcherValve.java:170) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNe xt(StandardPipeline.java:641) at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:172) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNe xt(StandardPipeline.java:641) at org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke (ContainerBase.java:995) at org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:174) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNe xt(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke (ContainerBase.java:995) at org.apache.coyote.tomcat4.CoyoteAdapter.service (CoyoteAdapter.java:223) at org.apache.coyote.http11.Http11Processor.process (Http11Processor.java:405) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnecti on(Http11Protocol.java:380) at org.apache.tomcat.util.net.TcpWorkerThread.runIt (PoolTcpEndpoint.java:508) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run (ThreadPool.java:533) at java.lang.Thread.run(Thread.java:536)
