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&gt;=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&gt;=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)

Reply via email to