[ 
https://issues.apache.org/jira/browse/XALANJ-2223?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15420123#comment-15420123
 ] 

David M. Karr commented on XALANJ-2223:
---------------------------------------

Well, considering I wrote this ELEVEN years ago, when I was working for a 
company that no longer exists, it probably doesn't matter anymore. :)

> XSLT that calls "function-available" on parsed values fails with NPE
> --------------------------------------------------------------------
>
>                 Key: XALANJ-2223
>                 URL: https://issues.apache.org/jira/browse/XALANJ-2223
>             Project: XalanJ2
>          Issue Type: Bug
>          Components: Xalan
>    Affects 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 was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@xalan.apache.org
For additional commands, e-mail: dev-h...@xalan.apache.org

Reply via email to