XSLT that calls "function-available" on parsed values fails with NPE
--------------------------------------------------------------------

         Key: XALANJ-2223
         URL: http://issues.apache.org/jira/browse/XALANJ-2223
     Project: XalanJ2
        Type: Bug
  Components: Xalan  
    Versions: 2.4    
 Environment: Windows XP; JDK 1.4.2_05;
    Reporter: David M. Karr


I wrote a stylesheet whose only purpose is to call "function-available" on the 
EXSLT functions specified in an XML file.  I first tested this in Stylus 
Studio, using the Xalan 2.5.2 engine.  When I run it, I get:

functionAvailable.xsl (19, 48): java.lang.RuntimeException: Unknown error in 
XPath.

I then built a standalone test case, using raw JDK 1.4.2 (which uses Xalan 
2.4.1), and I got a similar error, with the stack trace that follows this.  I 
also include inline the stylesheet, and a sample of the data.  Although I only 
tested this with 2.4.1 and 2.5.2, Henry Zongaro said that he tested my 
stylesheet on all releases of Xalan-J from 2.4.0 through to 2.7.0, and got the 
same error.

I extracted the code for the function that reports the exception, which is the 
following:

------------
  public boolean functionAvailable(String ns, String funcName)
          throws javax.xml.transform.TransformerException
  {
    return getExtensionsTable().functionAvailable(ns, funcName); // 448
  }
------------

The "getExtensionTable()" method is just an accessor.  This means that the 
"m_extensionsTable" is null, which is only set in the "setExtensionsTable()" 
method, which is only called from the "transformNode()" function.  It seems 
plausible to guess that "transformNode()" is never called (or perhaps 
"sroot.getExtensions()" is null).  Is there something about my stylesheet that 
is making it not call "transformNode()" before it gets to "functionAvailable()"?

Stack trace:
---------------------------
; SystemID: 
file:///C:/cygwin/home/u166705/work/mfxslt/etc/functionAvailable.xsl; Line#: 
20; Column#: 47
javax.xml.transform.TransformerException: Unknown error in XPath.
        at org.apache.xpath.XPath.bool(XPath.java:412)
        at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:170)
        at 
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
        at 
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:216)
        at 
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
        at 
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:216)
        at 
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2339)
        at 
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2160)
        at 
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1213)
        at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:668)
        at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1129)
        at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1107)
        at com.wamu.mfxslt.XSLTTool.transform(XSLTTool.java:105)
        at com.wamu.mfxslt.XSLTTool.transform(XSLTTool.java:97)
        at com.wamu.mfxslt.XSLTTool.main(XSLTTool.java:58)
Caused by: java.lang.NullPointerException
        at 
org.apache.xalan.transformer.TransformerImpl.functionAvailable(TransformerImpl.java:448)
        at 
org.apache.xpath.functions.FuncExtFunctionAvailable.execute(FuncExtFunctionAvailable.java:130)
        at org.apache.xpath.Expression.bool(Expression.java:230)
        at org.apache.xpath.XPath.bool(XPath.java:383)
        ... 14 more
---------
java.lang.NullPointerException
        at 
org.apache.xalan.transformer.TransformerImpl.functionAvailable(TransformerImpl.java:448)
        at 
org.apache.xpath.functions.FuncExtFunctionAvailable.execute(FuncExtFunctionAvailable.java:130)
        at org.apache.xpath.Expression.bool(Expression.java:230)
        at org.apache.xpath.XPath.bool(XPath.java:383)
        at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:170)
        at 
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
        at 
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:216)
        at 
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
        at 
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:216)
        at 
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2339)
        at 
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2160)
        at 
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1213)
        at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:668)
        at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1129)
        at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1107)
        at com.wamu.mfxslt.XSLTTool.transform(XSLTTool.java:105)
        at com.wamu.mfxslt.XSLTTool.transform(XSLTTool.java:97)
        at com.wamu.mfxslt.XSLTTool.main(XSLTTool.java:58)
---------------------------

The stylesheet is just:
---------------
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                                xmlns:exsl="http://exslt.org/common";
        
xmlns:date="http://exslt.org/dates-and-times";
                                xmlns:dyn="http://exslt.org/dynamic";
                                xmlns:func="http://exslt.org/functions";
                                xmlns:math="http://exslt.org/math";
                                xmlns:random="http://exslt.org/random";
        
xmlns:regexp="http://exslt.org/regular-expressions";
                                xmlns:set="http://exslt.org/sets";
                                xmlns:str="http://exslt.org/strings";
                                extension-element-prefixes="exsl str
date dyn func math random regexp set str"
                                exclude-result-prefixes="exsl str date
dyn func math random regexp set str"
>
<xsl:output method="xml"/>

<xsl:template match="function">
        <xsl:choose>
         <xsl:when test="function-available(text())">
          <xsl:value-of select="text()"/> present
         </xsl:when>
         <xsl:otherwise>
          <xsl:value-of select="text()"/> not present
         </xsl:otherwise>
        </xsl:choose>
</xsl:template>
</xsl:stylesheet>
---------------

The data looks like:
---------------
<?xml version="1.0"?>
<functions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:noNamespaceSchemaLocation="file:///c:/cygwin/home/u166705/work/mfxsl
t/etc/Functions.xsd">
<function>date:add</function> <function>date:add-duration</function>
<function>date:date</function>
[deleted]
</functions>
---------------


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to