Discussion:
[jira] [Commented] (XALANJ-2223) XSLT that calls "function-available" on parsed values fails with NPE
Robert Papp (JIRA)
2016-08-13 21:30:20 UTC
Permalink
[ https://issues.apache.org/jira/browse/XALANJ-2223?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15420085#comment-15420085 ]

Robert Papp commented on XALANJ-2223:
-------------------------------------

[~dkarr] {{namespace}} is null in {{org.apache.xpath.functions.FuncExtFunctionAvailable#execute}} when the namespace we're trying to look up is not declared in the XSLT (your xxslt/sum example). This means Xalan is taking the easy path and not even asking {{functionAvailable}}.

I just went through this NPE myself on Android: http://www.twisterrob.net/blog/2016/08/android-xslt-function-available.html. It might be very specific, but I think the point to take away is that if you get this NPE, you might be missing some classes on the classpath. In my the classes that handle Java classes/packages were missing. Double-check if there's an Exception thrown in {{setExtensionsTable}}!
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
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.
------------
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()"?
---------------------------
; 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)
---------------------------
---------------
<?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>
---------------
---------------
<?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-***@xalan.apache.org
For additional commands, e-mail: dev-***@xalan.apache.org
David M. Karr (JIRA)
2016-08-13 23:45:22 UTC
Permalink
[ 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
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.
------------
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()"?
---------------------------
; 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)
---------------------------
---------------
<?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>
---------------
---------------
<?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-***@xalan.apache.org
For additional commands, e-mail: dev-***@xalan.apache.org

Loading...