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

Why is int converted to Integer - select="java:size($List)"?

           Summary: Why is int converted to Integer -
                    select="java:size($List)"?
           Product: XalanJ2
           Version: 2.2.x
          Platform: PC
        OS/Version: Windows NT/2K
            Status: UNCONFIRMED
          Severity: Major
          Priority: Other
         Component: org.apache.xalan.extensions
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


It appears that 
<xsl:variable name="NumberOfColumns" select="java:size($ColumnList)"/>
makes NumberOfColumns of type Integer instead of int.

It is causing the exception per the following output:
file:///C:/JBuilder4/myprojects/xsltest/testXslTransform.xsl; Line 14; Column 
17; Got here A 

file:///C:/JBuilder4/myprojects/xsltest/testXslTransform.xsl; Line 15; Column 
17; 3

file:///C:/JBuilder4/myprojects/xsltest/testXslTransform.xsl; Line 25; Column 
16; Got here B 

file:///C:/JBuilder4/myprojects/xsltest/testXslTransform.xsl; Line 26; Column 
16; 3

file:///C:/JBuilder4/myprojects/xsltest/testXslTransform.xsl; Line 30; Column 
50; javax.xml.transform.TransformerException: Can not convert #UNKNOWN 
(java.lang.Integer) to a number
-----------------------------------

I am copying the Java code, XSL code and the input file.  If I hardcode
the value of NumberOfColumns, instead of getting it fron 
java.util.ArrayList.size(), the code works fine.

Thanks for your help.

-sm

___________JAVA CODE BEGINS_____________
package xsltest;

import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import org.xml.sax.*;
import java.util.*;


public class testXslParams {

    public static
  void main(String[] argv)
        throws Throwable
  {


    TransformerFactory factory = TransformerFactory.newInstance();
    Source xsl = new StreamSource(new File("testXslTransform.xsl"));
    Transformer x = factory.newTransformer(xsl);
    Source source = new StreamSource(new File("testXslResponse.xml"));
    Result target = new javax.xml.transform.stream.StreamResult(new 
FileOutputStream("Results.xml"));

   ArrayList columnList = new java.util.ArrayList();

   columnList.add("2");
   columnList.add("7");
   columnList.add("8");

    Map map = new java.util.HashMap();
    map.put("ColumnList", columnList );
    x.setParameter( "XSL_IO_TABLE",  map );

    x.transform(source, target);

  }
}

___________JAVA CODE ENDS_____________

___________XSL CODE BEGINS_____________
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0" 
xmlns:lxslt="http://xml.apache.org/xslt"; 
xmlns:java="http://xml.apache.org/xslt/java"; extension-element-prefixes=" java" 
exclude-result-prefixes="java">
        <xsl:param name="XSL_IO_TABLE"/>
        <xsl:variable name="ColumnList" select="java:get
($XSL_IO_TABLE,'ColumnList')"/>
        <xsl:variable name="NumberOfColumns" select="java:size($ColumnList)"/>
        <xsl:output method="xml" indent="yes"/>
        <xsl:template match="/">
                <xsl:apply-templates select="//table/tr"/>
        </xsl:template>
        <xsl:template match="//table/tr[1]">
                <xsl:apply-templates select="th"/>
                <Point>
                        <PointLabel/>
                        <XData>0</XData>
                        <xsl:message>Got here A </xsl:message>
                        <xsl:message>
                                <xsl:value-of select="$NumberOfColumns"/>
                        </xsl:message>
                        <xsl:call-template name="InitYData">
                                <xsl:with-param name="NumberOfColumns" 
select="$NumberOfColumns"/>
                        </xsl:call-template>
                </Point>
        </xsl:template>
        <xsl:template name="InitYData">
                <xsl:param name="NumberOfColumns" select="$NumberOfColumns"/>
                <xsl:message>Got here B </xsl:message>
                <xsl:message>
                        <xsl:value-of select="$NumberOfColumns"/>
                </xsl:message>
                <YData>-9999</YData>
                <xsl:if test="number($NumberOfColumns) &gt; 1">
                        <xsl:message>Got here C </xsl:message>
                        <xsl:message>
                                <xsl:value-of select="$NumberOfColumns"/>
                        </xsl:message>
                        <xsl:call-template name="InitYData">
                                <xsl:with-param name="NumberOfColumns" 
select="number($NumberOfColumns) - 1"/>
                        </xsl:call-template>
                </xsl:if>
        </xsl:template>
        <xsl:template match="//table/tr[1]/th">
                <xsl:variable name="isValidColumn" select="java:contains
($ColumnList, string(position()))"/>
                <xsl:if test="$isValidColumn = 'true' ">
                        <SeriesLabel>
                                <xsl:value-of select="."/>
                        </SeriesLabel>
                </xsl:if>
        </xsl:template>
        <xsl:template match="//table/tr[position() >1 ]">
                <Point>
                        <XData>
                                <xsl:value-of select="td[1]"/>
                        </XData>
                        <xsl:apply-templates select="td"/>
                </Point>
        </xsl:template>
        <xsl:template match="td">
                <xsl:variable name="isValidColumn" select="java:contains
($ColumnList, string(position()))"/>
                <xsl:if test="$isValidColumn = 'true' ">
                        <YData>
                                <xsl:choose>
                                        <xsl:when test=". = 'NA'">-
9999</xsl:when>
                                        <xsl:otherwise>
                                                <xsl:value-of select="."/>
                                        </xsl:otherwise>
                                </xsl:choose>
                        </YData>
                </xsl:if>
        </xsl:template>
        <xsl:template match="*"/>
</xsl:stylesheet>
___________XSL CODE ENDS_____________

___________XML INPUT FILE BEGINS_____________
<?xml version="1.0" encoding="UTF-8"?>
<reply>
        <reply>
                <data>
                        <spec/>
                        <table>
                                <columns>
                                        <column id="dateof" type="numeric"/>
                                        <column id="a" type="numeric"/>
                                        <column id="b" type="numeric"/>
                                        <column id="column4" type="numeric"/>
                                        <column id="column5" type="numeric"/>
                                        <column id="buy" type="numeric"/>
                                        <column id="sell" type="numeric"/>
                                        <column id="column8" type="numeric"/>
                                </columns>
                                <tr>
                                        <th>dateof</th>
                                        <th>a</th>
                                        <th>b</th>
                                        <th>column4</th>
                                        <th>column5</th>
                                        <th>buy</th>
                                        <th>sell</th>
                                        <th>column8</th>
                                </tr>
                                <tr>
                                        <td>20000918-00:00:00.000 CDT</td>
                                        <td>123.250000</td>
                                        <td>57.500000</td>
                                        <td>2.143478</td>
                                        <td>NA</td>
                                        <td>NA</td>
                                        <td>NA</td>
                                        <td>NA</td>
                                </tr>
                                <tr>
                                        <td>20000919-00:00:00.000 CDT</td>
                                        <td>124.937500</td>
                                        <td>57.000000</td>
                                        <td>2.191886</td>
                                        <td>NA</td>
                                        <td>NA</td>
                                        <td>NA</td>
                                        <td>NA</td>
                                </tr>
                                <tr>
                                        <td>20010910-00:00:00.000 CDT</td>
                                        <td>96.470000</td>
                                        <td>39.350000</td>
                                        <td>2.451588</td>
                                        <td>2.503074</td>
                                        <td>2.482923</td>
                                        <td>2.523225</td>
                                        <td>0.020151</td>
                                </tr>
                                <tr>
                                        <td>20010911-00:00:00.000 CDT</td>
                                        <td>NA</td>
                                        <td>39.350000</td>
                                        <td>NA</td>
                                        <td>2.500147</td>
                                        <td>2.480830</td>
                                        <td>2.519463</td>
                                        <td>0.019317</td>
                                </tr>
                                <tr>
                                        <td>20010917-00:00:00.000 CDT</td>
                                        <td>93.340000</td>
                                        <td>35.150000</td>
                                        <td>2.655477</td>
                                        <td>2.507283</td>
                                        <td>2.480676</td>
                                        <td>2.533889</td>
                                        <td>0.026606</td>
                                </tr>
                        </table>
                </data>
        </reply>
</reply>

___________XML INPUT FILE ENDS_____________

Reply via email to