[
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: [email protected]
For additional commands, e-mail: [email protected]