  | |  | Problem calling external java method | Problem calling external java method 2005-10-19 - By Chris Bare
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="@(protected)"/> <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="@(protected)"/> <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!!!
|
|
 |