You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-users@xalan.apache.org by Chris Bare <a-...@expedia.com> on 2005/10/19 21:47:54 UTC
Problem calling external java method
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!!!
Re: Problem calling external java method
Posted by John Gentilin <ge...@eyecatching.com>.
Chris,
I declare my extensions, in interpretive mode, a bit differently. I
think the java namespace may
have special meaning. The example below declares a class called
CategoryPageMgr that exists
in the custom package.
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:catmgr="custom.CategoryPageMgr"
exclude-result-prefixes="catmgr"
extension-element-prefixes="catmgr">
<xsl:param name="CategoryMgr" select="catmgr:new()"/>
<xsl:template match="foo">
<data>
<xsl:value-of select="catmgr:getCategoryPage($CategoryMgr,
$category, $localID, $pageData)" />
</data>
</xsl:template>
</xsl:stylesheet>
Hope that helps
John G
Chris Bare wrote:
>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!!!
>
>
--
--------------------------------------
John Gentilin
Eye Catching Solutions Inc.
18314 Carlwyn Drive
Castro Valley CA 94546
Contact Info
gentijo@eyecatching.com
Ca Office 1-510-881-4821
NJ Office 1-732-422-4917