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: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] 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%
