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

infinite loop is generated in xsl:for-each

           Summary: infinite loop is generated in xsl:for-each
           Product: XalanJ2
           Version: 2.3
          Platform: PC
        OS/Version: Windows NT/2K
            Status: NEW
          Severity: Critical
          Priority: Other
         Component: org.apache.xalan.transformer
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


we used to use xalan 2.1.0 to transform, it's ok. but the problem happens in 
xalan 2.3.1 and jdk1.4 is having same problem. The result is like this:

   public String toString()
   {

     String result =  "{";
     result += "name=";
     result += name;
        
result += "name=";
     result += name;
        
result += "name=";
     result += name;
        
result += "name=";
     result += name;
        
result += "name=";
     result += name;
        
result += "name=";
     result += name;
        
result += "name=";
     result += name;

we check the xslt and find it's xsl:for-each that cause this problem. Here are 
the xml and xslt

        <DataType>
                <Class name="AttributeDefinition">
                        <Description>
                                <Paragraph text="This data type specifies the 
minimal schema entries for an attribute."/>
                        </Description>
                        <Attribute name="name" type="String" 
multiplicity="one"/>
                        <Attribute name="definition" type="String" 
multiplicity="one"/>
                        <Attribute name="representationCategory" type="String" 
multiplicity="one"/>
                </Class>
        </DataType>

================================================================================

   public String toString()
   {

     String result =  &quot;{&quot;;
     <xsl:for-each select="./Attribute">
                <xsl:variable name="variableTypeNodes" select="id(./@type)"/>
                <xsl:variable name="theAttribute" select="."></xsl:variable>
                <xsl:for-each select="$variableTypeNodes">
                <xsl:variable name="attributeName"/>
                <xsl:text>result += &quot;</xsl:text>
                <xsl:choose>
                        <xsl:when test="(count($variableTypeNodes)>1)">
                                <xsl:variable name="attrEnumName" 
select="./@name"/>
                                <xsl:variable name="attributeName" 
select="concat($theAttribute/@name,'_',$attrEnumName)"/>
                                <xsl:value-of 
select="$attributeName"/><xsl:text>=&quot;;</xsl:text>
                                 <xsl:choose>
                                        <xsl:when 
test="($theAttribute/@multiplicity='one_or_more') or 
($theAttribute/@multiplicity='zero_or_more')">
                        if(<xsl:value-of select="$attributeName"/> != null){
        result += &quot;(&quot;;
        for(int i=0; i &lt;<xsl:value-of select="$attributeName"/>.length; i++){
           result += <xsl:value-of select="$attributeName"/>[i];
           if(i &lt; <xsl:value-of select="$attributeName"/>.length - 1){
              result += &quot;,&quot;;
           } 
        }
        result += &quot;)&quot;;
      }
      else result += &quot;null&quot;;
                                        </xsl:when>
                                        <xsl:otherwise>
     result += <xsl:value-of select="$attributeName"/>;
                                        </xsl:otherwise>
                                </xsl:choose>  
                        </xsl:when>
                        <xsl:otherwise>
                                <xsl:variable name="attributeName" 
select="$theAttribute/@name"/>
                                <xsl:value-of 
select="$attributeName"/><xsl:text>=&quot;;</xsl:text>
                                <xsl:choose>
                                        <xsl:when 
test="($theAttribute/@multiplicity='one_or_more') or 
($theAttribute/@multiplicity='zero_or_more')">
                        if(<xsl:value-of select="$attributeName"/> != null){
        result += &quot;(&quot;;
        for(int i=0; i &lt;<xsl:value-of select="$attributeName"/>.length; i++){
           result += <xsl:value-of select="$attributeName"/>[i];
           if(i &lt; <xsl:value-of select="$attributeName"/>.length - 1){
              result += &quot;,&quot;;
           } 
        }
        result += &quot;)&quot;;
      }
      else result += &quot;null&quot;;
                                        </xsl:when>
                                        <xsl:otherwise>
     result += <xsl:value-of select="$attributeName"/>
        <xsl:text>;
        
</xsl:text>
                                        </xsl:otherwise>
                                </xsl:choose>  
                        </xsl:otherwise>
                </xsl:choose>
        <!--    <xsl:text>=&quot;;</xsl:text> -->
        <!--     <xsl:choose>
                        <xsl:when 
test="($theAttribute/@multiplicity='one_or_more') or 
(theAttribute/@multiplicity='zero_or_more')">
                        if(<xsl:value-of select="$attributeName"/> != null){
        result += &quot;(&quot;;
        for(int i=0; i &lt;<xsl:value-of select="$attributeName"/>.length; i++){
           result += <xsl:value-of select="$attributeName"/>[i];
           if(i &lt; <xsl:value-of select="$attributeName"/>.length - 1){
              result += &quot;,&quot;;
           } 
        }
        result += &quot;)&quot;;
      }
      else result += &quot;null&quot;;
                        </xsl:when>
                        <xsl:otherwise>
     result += <xsl:value-of select="$attributeName"/>;
                        </xsl:otherwise>
                </xsl:choose>  -->  
     <xsl:if test="not(position() = last())"><xsl:text/><xsl:text/>
     result += &quot;, &quot;;
     </xsl:if>
        </xsl:for-each>
<xsl:if test="not(position() = last())"><xsl:text>result += ", ";
     </xsl:text></xsl:if>
        </xsl:for-each>
     result += &quot;}&quot;;
     return result;
   }

}

Reply via email to