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]