You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by bu...@apache.org on 2003/01/07 10:25:35 UTC
DO NOT REPLY [Bug 15830] New: -
NullPointerException in translet
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15830>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15830
NullPointerException in translet
Summary: NullPointerException in translet
Product: XalanJ2
Version: 2.4
Platform: PC
OS/Version: Windows XP
Status: NEW
Severity: Normal
Priority: Other
Component: Xalan-Xsltc
AssignedTo: xalan-dev@xml.apache.org
ReportedBy: fackel@dosco.de
XSLT stylesheet "mytransform.xsl" compiled with Xalan-J 2.4.1 (binary
distribution from apache.org) crashes with following stack trace in template
named "xref1".
There are some workarounds for it (use templates named "xref2" or "xref3" as a
replacement for "xref1"), but error is not obvious for me as a stylesheet
developer. BTW: The stylesheet works without exception when invoked directly
without being compiled as a translet.
PS: I can provide all the files required to reproduce this bug, if one tells me
where to send it to.
-- Stack trace --
java.lang.NullPointerException
at MyTranslet.xref1()
at MyTranslet.applyTemplates()
at MyTranslet.applyTemplates()
at MyTranslet.root()
at MyTranslet.applyTemplates()
at MyTranslet.transform()
at
org.apache.xalan.xsltc.runtime.AbstractTranslet.transform(AbstractTranslet.java:497)
at org.apache.xalan.xsltc.cmdline.Transform.doTransform(Transform.java:216)
at org.apache.xalan.xsltc.cmdline.Transform.main(Transform.java:370)
Translet error(s): null
-- Stylesheet including workaround templates (mytransform.xsl) --
<?xml version='1.0' encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" version="1.0"/>
<xsl:template match="/" name="root">
<html>
<head>
<title>Tranform</title>
</head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<!--
This template fails as a translet with Xalan-J 2.4.1
-->
<xsl:template match="xref" name="xref1">
<xsl:variable name="target">
<xsl:value-of select="@target"/>
</xsl:variable>
<xsl:variable name="num">
<xsl:for-each select="id($target)">
<xsl:number level="multiple" count="app" format="1.1.1.1"/>
</xsl:for-each>
</xsl:variable>
<span class="xref">[1]
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="$target"/>
</xsl:attribute>
</xsl:element>
</span>
</xsl:template>
<!--
This is a suitable workaround for xref1.
Note: Change match="xref2" to match="xref" to use this template.
-->
<xsl:template match="xref2" name="xref2">
<xsl:variable name="target" select="@target"/>
<xsl:variable name="num">
<xsl:for-each select="id($target)">
<xsl:number level="multiple" count="app" format="1.1.1.1"/>
</xsl:for-each>
</xsl:variable>
<span class="xref">[2]
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="$target"/>
</xsl:attribute>
</xsl:element>
</span>
</xsl:template>
<!--
This is one works too, but in real life it wouldn't be a suitable solution if
the variable num is required by the program logic.
Note: Change match="xref3" to match="xref" to use this template.
-->
<xsl:template match="xref3" name="xref3">
<xsl:variable name="target">
<xsl:value-of select="@target"/>
</xsl:variable>
<span class="xref">[3]
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="$target"/>
</xsl:attribute>
</xsl:element>
</span>
</xsl:template>
</xsl:stylesheet>
-- Sample XML instance (sample.xml) --
<?xml version="1.0" encoding="utf-8"?>
<app><xref target="id1"/></app>
-- Batch file to invoke translet (transform.bat) --
@echo off
REM Here lives our java stuff
set JREDIR=c:\sgml-prg\jre\1.3.1
set XALANDIR=c:\sgml-prg\xalan\xalan-j_2_4_1
set ORIG_CLASSPATH=%CLASSPATH%
REM Setup java stuff
set JAVACALL=%JREDIR%\bin\java
set CLASSPATH=%JREDIR%\lib\rt.jar
set CLASSPATH=%CLASSPATH%;%XALANDIR%\bin\xercesImpl.jar
set CLASSPATH=%CLASSPATH%;%XALANDIR%\bin\xml-apis.jar
set CLASSPATH=%CLASSPATH%;%XALANDIR%\bin\xalan.jar
set CLASSPATH=%CLASSPATH%;%XALANDIR%\bin\runtime.jar
set CLASSPATH=%CLASSPATH%;transform.jar
REM Transformation *******************************************
%JAVACALL% org.apache.xalan.xslt.Process -xsl mytransform.xsl -in sample.xml
-out sample.htm
if errorlevel 1 echo Some error happend
:ende
set CLASSPATH=%ORIG_CLASSPATH%
-- Batch file to build translet (make.bat) --
@echo off
REM Here lives our java stuff
set JREDIR=c:\sgml-prg\jre\1.3.1
set XALANDIR=c:\sgml-prg\xalan\xalan-j_2_4_1
REM Setup java stuff
set ORIG_CLASSPATH=%CLASSPATH%
set CLASSPATH=%JREDIR%\lib\rt.jar
set CLASSPATH=%CLASSPATH%;%XALANDIR%\bin\xsltc.jar
set CLASSPATH=%CLASSPATH%;%XALANDIR%\bin\xercesImpl.jar
set CLASSPATH=%CLASSPATH%;%XALANDIR%\bin\xml-apis.jar
set CLASSPATH=%CLASSPATH%;%XALANDIR%\bin\runtime.jar
set CLASSPATH=%CLASSPATH%;%XALANDIR%\bin\BCEL.jar
set CLASSPATH=%CLASSPATH%;%XALANDIR%\bin\java_cup.jar
set CLASSPATH=%CLASSPATH%;%XALANDIR%\bin\JLex.jar
set CLASSPATH=%CLASSPATH%;%XALANDIR%\bin\regexp.jar
REM Deltree command
set DELTREE=rmdir /Q /S
if exist %windir%\command\deltree.exe set DELTREE=deltree /Y
REM Make
set BUILDDIR=build
set JARFILE=transform.jar
if exist %BUILDDIR%\nul %DELTREE% %BUILDDIR%
if exist %JARFILE% del %JARFILE%
mkdir %BUILDDIR%
java org.apache.xalan.xsltc.cmdline.Compile -x -o MyTranslet -d %BUILDDIR%
mytransform.xsl
jar cvfM %JARFILE% -C %BUILDDIR% .
if exist %BUILDDIR%\nul %DELTREE% %BUILDDIR%
REM Cleanup
set CLASSPATH=%ORIG_CLASSPATH%