[ 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