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=14244>. 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=14244 EXSLT function returning twice(?) and crashing. Summary: EXSLT function returning twice(?) and crashing. Product: XalanJ2 Version: 2.4 Platform: PC OS/Version: Windows NT/2K Status: NEW Severity: Normal Priority: Other Component: org.apache.xalan.extensions AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] Xalan 2.4.1. Calling a function within a variable assignment crashes, but calling it on the variable later works fine. As far as I know, directly assigning a string to a variable this way should pose no problems. padnum() works fine for any call on a variable or any call on a valid xpath in other tested situations; it only crashes when used for a variable. Called Function: <func:function name="foxy:padnum"> <xsl:param name="num"/> <xsl:param name="padding"/> <func:result select="string:align(string($num),string:padding($padding,'0'),'right')"/> </func:function> Working Function: <func:function name="foxy:foxtime"> <xsl:param name="text"/> <xsl:variable name="hour"><xsl:if test="$text>=3600"><xsl:value-of select="concat(floor($text div 3600),':')"/></xsl:if></xsl:variable> <xsl:variable name="min" select="floor(($text mod 3600) div 60)"/> <xsl:variable name="sec" select="$text mod 60"/> <func:result select="concat($hour,foxy:padnum($min,2),':',foxy:padnum($sec,2))"/> </func:function> This also works fine: <func:result select="concat($hour,foxy:padnum(floor(($text mod 3600) div 60),2),':',foxy:padnum($text mod 60,2))"/> Crashing Function: (Either of them alone will also crash it.) <func:function name="foxy:foxtime"> <xsl:param name="text"/> <xsl:variable name="hour"><xsl:if test="$text>=3600"><xsl:value-of select="concat(floor($text div 3600),':')"/></xsl:if></xsl:variable> <xsl:variable name="min" select="foxy:padnum(floor(($text mod 3600) div 60),2)"/> <xsl:variable name="sec" select="foxy:padnum($text mod 60,2)"/> <func:result select="concat($hour,$min,':',$sec)"/> </func:function> Stack Dump: First line/col is top-level redirect call; actual problem is several layers below. ; SystemID: file:///c:/fox/text/database/music_multi.xsl; Line#: 34; Column#: 38 javax.xml.transform.TransformerException: javax.xml.transform.TransformerException: An EXSLT function cannot set more than one result! at org.apache.xalan.extensions.ExtensionHandlerExsltFunction.callFunction(ExtensionHandlerExsltFunction.java:233) at org.apache.xalan.extensions.ExtensionsTable.extFunction(ExtensionsTable.java:227) at org.apache.xalan.transformer.TransformerImpl.extFunction(TransformerImpl.java:461) at org.apache.xpath.functions.FuncExtFunction.execute(FuncExtFunction.java:233) at org.apache.xpath.functions.FuncConcat.execute(FuncConcat.java:92) at org.apache.xpath.Expression.executeCharsToContentHandler(Expression.java:357) at org.apache.xalan.templates.ElemValueOf.execute(ElemValueOf.java:319) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2339) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:710) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2339) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:710) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2339) at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:435) at org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:273) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2339) at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:435)
