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

Unknown error in XPath in recursive string operation

           Summary: Unknown error in XPath in recursive string operation
           Product: XalanJ2
           Version: 2.4
          Platform: PC
        OS/Version: Windows NT/2K
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: org.apache.xml.utils
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


I use this named template to perform string replacement in texts:

<xsl:template name="replaceString">
    <xsl:param name="string"/><xsl:param name="replace"/><xsl:param
name="replacement"/>
    <xsl:variable name="firstChunk" select="substring-before($string, $replace)"/>
    <xsl:choose>
        <xsl:when test="$firstChunk = '' and not(starts-with($string, $replace))">
            <xsl:value-of select="$string"/>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="$firstChunk"/><xsl:value-of
select="$replacement" disable-output-escaping="yes"/>
            <xsl:call-template name="replaceString">
                <xsl:with-param name="string" select="substring-after($string,
$replace)"/>
                <xsl:with-param name="replace" select="$replace"/>
                <xsl:with-param name="replacement" select="$replacement"/>
            </xsl:call-template>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

the problem happens randomly (not always on a given input) when I feed some
large texts (few thousands chars are enough) to it, sometimes it yould appear as:

javax.xml.transform.TransformerException: Unknown error in XPath
        at org.apache.xpath.XPath.execute(XPath.java:341)
        at org.apache.xalan.templates.ElemVariable.getValue(ElemVariable.java:311)
        at org.apache.xalan.templates.ElemVariable.execute(ElemVariable.java:282)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:432)
        at 
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:279)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:164)
        at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:422)
        at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:226)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemCopy.execute(ElemCopy.java:159)
        at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:422)
        at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:226)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemCopy.execute(ElemCopy.java:159)
        at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:422)
        at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:226)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemCopy.execute(ElemCopy.java:178)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2069)
        at
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1171)
        at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:634)
        at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1088)
        at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1066)
        ... 
Caused by: java.lang.NullPointerException
        at org.apache.xpath.objects.XRTreeFrag.str(XRTreeFrag.java:280)
        at
org.apache.xpath.functions.FuncSubstringBefore.execute(FuncSubstringBefore.java:86)
        at org.apache.xpath.XPath.execute(XPath.java:318)
        ... 59 more
---------
java.lang.NullPointerException
        at org.apache.xpath.objects.XRTreeFrag.str(XRTreeFrag.java:280)
        at
org.apache.xpath.functions.FuncSubstringBefore.execute(FuncSubstringBefore.java:86)
        at org.apache.xpath.XPath.execute(XPath.java:318)
        at org.apache.xalan.templates.ElemVariable.getValue(ElemVariable.java:311)
        at org.apache.xalan.templates.ElemVariable.execute(ElemVariable.java:282)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:432)
        at 
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:279)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:164)
        at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:422)
        at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:226)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemCopy.execute(ElemCopy.java:159)
        at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:422)
        at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:226)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemCopy.execute(ElemCopy.java:159)
        at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:422)
        at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:226)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemCopy.execute(ElemCopy.java:178)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2069)
        at
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1171)
        at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:634)
        at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1088)
        at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1066)







and sometimes as:

javax.xml.transform.TransformerException: Unknown error in XPath
        at org.apache.xpath.XPath.execute(XPath.java:341)
        at org.apache.xalan.templates.ElemVariable.getValue(ElemVariable.java:311)
        at org.apache.xalan.templates.ElemVariable.execute(ElemVariable.java:282)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:432)
        at 
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:279)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:177)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:432)
        ...
        at 
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:279)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:177)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:432)
        at 
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:279)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:164)
        at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:422)
        at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:226)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemCopy.execute(ElemCopy.java:159)
        at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:422)
        at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:226)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemCopy.execute(ElemCopy.java:159)
        at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:422)
        at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:226)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemCopy.execute(ElemCopy.java:178)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2069)
        at
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1171)
        at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:634)
        at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1088)
        at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1066)
        ...
Caused by: java.lang.ArrayIndexOutOfBoundsException
        at
org.apache.xml.utils.SuballocatedIntVector.elementAt(SuballocatedIntVector.java:454)
        at org.apache.xml.dtm.ref.DTMDefaultBase._firstch(DTMDefaultBase.java:523)
        at org.apache.xml.dtm.ref.sax2dtm.SAX2DTM.getStringValue(SAX2DTM.java:1209)
        at org.apache.xpath.objects.XRTreeFrag.str(XRTreeFrag.java:280)
        at
org.apache.xpath.functions.FuncSubstringBefore.execute(FuncSubstringBefore.java:87)
        at org.apache.xpath.XPath.execute(XPath.java:318)
        ... 154 more
---------
java.lang.ArrayIndexOutOfBoundsException
        at
org.apache.xml.utils.SuballocatedIntVector.elementAt(SuballocatedIntVector.java:454)
        at org.apache.xml.dtm.ref.DTMDefaultBase._firstch(DTMDefaultBase.java:523)
        at org.apache.xml.dtm.ref.sax2dtm.SAX2DTM.getStringValue(SAX2DTM.java:1209)
        at org.apache.xpath.objects.XRTreeFrag.str(XRTreeFrag.java:280)
        at
org.apache.xpath.functions.FuncSubstringBefore.execute(FuncSubstringBefore.java:87)
        at org.apache.xpath.XPath.execute(XPath.java:318)
        at org.apache.xalan.templates.ElemVariable.getValue(ElemVariable.java:311)
        at org.apache.xalan.templates.ElemVariable.execute(ElemVariable.java:282)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:432)
        at 
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:279)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        ...
        at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:177)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:432)
        at 
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:279)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:177)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:432)
        at 
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:279)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:177)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:432)
        at 
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:279)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:164)
        at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:422)
        at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:226)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemCopy.execute(ElemCopy.java:159)
        at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:422)
        at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:226)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemCopy.execute(ElemCopy.java:159)
        at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:422)
        at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:226)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at org.apache.xalan.templates.ElemCopy.execute(ElemCopy.java:178)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2243)
        at
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2069)
        at
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1171)
        at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:634)
        at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1088)
        at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1066)

The problem seems not to happen any more under neither form if I change the
following method of org.apache.xml.utils.SuballocatedIntVector, instead of:

  public int elementAt(int i)
  {
    // This is actually a significant optimization!
    if(i<m_blocksize)
      return m_map0[i];

    return m_map[i>>>m_SHIFT][i&m_MASK];
  }

I removed the optimization like this:

  public int elementAt(int i)
  {
    return m_map[i>>>m_SHIFT][i&m_MASK];
  }

and the problem disappeared.

Reply via email to