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
[EMAIL PROTECTED]
Ca Office 1-510-881-4821
NJ Office 1-732-422-4917