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

NullPointerException in org.apache.xpath.objects.XRTreeFrag.xstr

           Summary: NullPointerException in
                    org.apache.xpath.objects.XRTreeFrag.xstr
           Product: XalanJ2
           Version: 2.2.x
          Platform: PC
        OS/Version: Windows NT/2K
            Status: NEW
          Severity: Critical
          Priority: Other
         Component: org.apache.xpath
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]
                CC: [EMAIL PROTECTED]


ENVIRONMENT:
* Windows NT 4.0 SP6a
* JDK 1.3.1
* Xalan 2.2.? (downloaded as "xalan-j_2_2-bin.zip/16-Jan-2002 07:10/7.3M/Latest 
stable build" from "http://xml.apache.org/dist/xalan-j/";)

WORKAROUND: This problem does NOT exist in Xalan 2.2.D10.

DETAILS:
I have a Java app that parses a configuration document and for certain nodes, 
writes out relevant info to two different output files.  To do this, it uses the 
same Transformer object, but calls transform() with slightly different 
parameters/properties each time i.e.

  transformer.setParameter("FILENAME", fileName);
  transformer.setOutputProperty("method", "text");
  transformer.transform(new DOMSource(node), new StreamResult(packageFile));
  transformer.setParameter("FILENAME", fileName);
  transformer.setOutputProperty("method", "text");
  transformer.transform(new DOMSource(node), new StreamResult(suiteFile));
  transformer.setParameter("FILENAME", "");

With current releases of Xalan, I get the following NullPointerException stack 
dump:
 
SystemID: file:///Z:/QA/XMLConfig/XMLConfig.xsl; Line#: 106; Column#: 71
javax.xml.transform.TransformerException: Unknown error in XPath
    at org.apache.xpath.XPath.execute(XPath.java:341)
    at org.apache.xalan.templates.ElemWithParam.getValue(ElemWithParam.java:240)
    at 
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:259)
    at 
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerIm
pl.java:2186)
    at 
org.apache.xalan.transformer.TransformerImpl.transformToRTF(TransformerImpl.java
:1729)
    at org.apache.xalan.templates.ElemVariable.getValue(ElemVariable.java:327)
    at org.apache.xalan.templates.ElemVariable.execute(ElemVariable.java:282)
    at 
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerIm
pl.java:2186)
    at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:430)
    at 
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:279)
    at 
org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemForEach.java:4
38)
    at org.apache.xalan.templates.ElemForEach.execute(ElemForEach.java:299)
    at 
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerIm
pl.java:2186)
    at 
org.apache.xalan.transformer.TransformerImpl.transformToRTF(TransformerImpl.java
:1729)
    at org.apache.xalan.templates.ElemVariable.getValue(ElemVariable.java:327)
    at org.apache.xalan.templates.ElemVariable.execute(ElemVariable.java:282)
    at 
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerIm
pl.java:2186)
    at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:430)
    at 
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:279)
    at 
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerIm
pl.java:2186)
    at org.apache.xalan.templates.ElemIf.execute(ElemIf.java:200)
    at 
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerIm
pl.java:2186)
    at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:164)
    at 
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerIm
pl.java:2186)
    at 
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl
.java:2012)
    at 
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:
1175)
    at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:642)
    at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1092
)
    at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1070
)
    at XMLConfig.traverse(Unknown Source)
    at XMLConfig.traverse(Unknown Source)
    at XMLConfig.traverse(Unknown Source)
    at XMLConfig.main(Unknown Source)
---------
java.lang.NullPointerException
    at org.apache.xpath.objects.XRTreeFrag.xstr(XRTreeFrag.java:255)
    at 
org.apache.xpath.functions.FunctionDef1Arg.getArg0AsString(FunctionDef1Arg.java:
138)
    at org.apache.xpath.functions.FuncString.execute(FuncString.java:88)
    at org.apache.xpath.XPath.execute(XPath.java:318)
    at org.apache.xalan.templates.ElemWithParam.getValue(ElemWithParam.java:240)
    at 
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:259)
    at 
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerIm
pl.java:2186)
    at 
org.apache.xalan.transformer.TransformerImpl.transformToRTF(TransformerImpl.java
:1729)
    at org.apache.xalan.templates.ElemVariable.getValue(ElemVariable.java:327)
    at org.apache.xalan.templates.ElemVariable.execute(ElemVariable.java:282)
    at 
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerIm
pl.java:2186)
    at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:430)
    at 
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:279)
    at 
org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemForEach.java:4
38)
    at org.apache.xalan.templates.ElemForEach.execute(ElemForEach.java:299)
    at 
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerIm
pl.java:2186)
    at 
org.apache.xalan.transformer.TransformerImpl.transformToRTF(TransformerImpl.java
:1729)
    at org.apache.xalan.templates.ElemVariable.getValue(ElemVariable.java:327)
    at org.apache.xalan.templates.ElemVariable.execute(ElemVariable.java:282)
    at 
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerIm
pl.java:2186)
    at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:430)
    at 
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:279)
    at 
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerIm
pl.java:2186)
    at org.apache.xalan.templates.ElemIf.execute(ElemIf.java:200)
    at 
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerIm
pl.java:2186)
    at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:164)
    at 
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerIm
pl.java:2186)
    at 
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl
.java:2012)
    at 
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:
1175)
    at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:642)
    at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1092
)
    at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1070
)
    at XMLConfig.traverse(Unknown Source)
    at XMLConfig.traverse(Unknown Source)
    at XMLConfig.traverse(Unknown Source)
    at XMLConfig.main(Unknown Source)

=================================================================
The problem seems to be related to either trying to re-use the the same 
transformer object and/or my use of <xsl:variable> in my stylesheet.  The XSL 
that has the problem is below.  Line 106 referenced in the stack trace is the 
line "<xsl:with-param name="inString" select="string($clean1)"/>".  (It appears 
that $clean2 is trying to call encode() with inString equal to string($clean1), 
but $clean1 is still NULL?)

<xsl:template name="param">
    <xsl:variable name="clean2">
        <xsl:variable name="clean1">
            <xsl:call-template name="encode">   <!-- turn '%' into %25 -->
                <xsl:with-param name="inString" select="string(.)"/>
                <xsl:with-param name="oldChars" select="'%'"/>
                <xsl:with-param name="newChars" select="'%25'"/>
            </xsl:call-template>
        </xsl:variable>
        <xsl:call-template name="encode">       <!-- turn ' ' into %20 -->
            <xsl:with-param name="inString" select="string($clean1)"/>
            <xsl:with-param name="oldChars" select="' '"/>
            <xsl:with-param name="newChars" select="'%20'"/>
        </xsl:call-template>
    </xsl:variable>
    <xsl:text>&#38;</xsl:text><xsl:value-of 
select="@name"/><xsl:text>="</xsl:text><xsl:value-of 
select="string($clean2)"/><xsl:text>"</xsl:text>
</xsl:template>

Finally, doing some basic debugging, I found that the source of the error is 
that m_dtm is null in the following function of XRTreeFrag.java.

  public XMLString xstr()
  {
    if(null == m_xmlStr)
      m_xmlStr = m_dtm.getStringValue(m_dtmRoot);

    return m_xmlStr;
  }

Reply via email to