Help! I keep getting a NoSuchMethodException while trying to call a java extention function using Xalan-j 2.7.0. It seems that calling static java methods works, but calling nonstatic methods seems to be broken.
I've included an easy way to reproduce the problem here. The commented out template calls a static function on the class Helper. It works. The other template calls a nonstatic method and it barfs giving this message: NoSuchMethodException: For extension function, could not find method static xsltest.Helper.square([ExpressionContext,] #UNKNOWN (xsltest.Helper), #NODESET) Maybe I'm doing something wrong. I'm trying to follow the instructions here: http://xml.apache.org/xalan-j/extensions_xsltc.html My questions are: Am I doing something totally bass-ackwards? Is this a Xalan bug? Is there already a bug report filed? (I looked in Jira and found old closed bugs [Bug 1501], but none for 2.7.0.) -- test.xsl ---------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" version="1.0"> <xsl:output method="xml"/> <xsl:variable name="helper" select="java:xsltest.Helper.new()"/> <xsl:template match="/"> <foobar> <xsl:apply-templates select="/xsltest"/> </foobar> </xsl:template> <xsl:template match="number"> <number> <xsl:variable name="num" select="@value"/> <xsl:attribute name="square"><xsl:value-of select="java:xsltest.Helper.square($helper,$num)"/></xsl:attribute> </number> </xsl:template> <!-- <xsl:template match="number"> <number> <xsl:variable name="num" select="@value"/> <xsl:attribute name="square"><xsl:value-of select="java:xsltest.Helper.staticSquare($num)"/></xsl:attribute> </number> </xsl:template> --> </xsl:stylesheet> -- Helper.java ------------------------------------------------- package xsltest; public class Helper { public static int staticSquare(int n) { return n * n; } public int square(int n) { return n * n; } } -- MyXml.xml --------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <xsltest> <number value="3"/> <number value="17"/> </xsltest> Here's the command line: > java -cp ./classes;./lib/xml-apis.jar;./lib/serializer.jar;./lib/xercesImpl.jar;. /lib/xalan.jar;./lib/log4j-1.2.12.jar org.apache.xalan.xslt.Process -IN ./src/xsltest/MyXml.xml -XSL ./src/xsltest/test.xsl Here's the error msg: (Location of error unknown)XSLT Error (javax.xml.transform.TransformerException): java.lang.NoSuchMethodException: For extension function, could not find method static xsltest.Helper.square([ExpressionContext,] #UNKNOWN (xsltest.Helper), #NODESET). Exception in thread "main" java.lang.RuntimeException: java.lang.NoSuchMethodException: For extension function, could not find method static xsltest.Helper.square([ExpressionContext,] #UNKNOWN (xsltest.Helper), #NODESET). at org.apache.xalan.xslt.Process.doExit(Process.java:1153) at org.apache.xalan.xslt.Process.main(Process.java:1126) org.apache.xalan.xslt.EnvironmentCheck gives me: [...] version.xerces2=Xerces-J 2.7.1 version.xerces1=not-present version.xalan2_2=Xalan Java 2.7.0 version.xalan1=not-present version.ant=not-present java.version=1.5.0_05 version.DOM=2.0 version.crimson=not-present [...] version.SAX=2.0 version.xalan2x=Xalan Java 2.7.0 [...] -- thanks!!!
