Problem calling external java method 2005-10-19 - By John Gentilin
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="@(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!!! > >
-- -------------------------------------- John Gentilin Eye Catching Solutions Inc. 18314 Carlwyn Drive Castro Valley CA 94546
Contact Info gentijo@(protected) Ca Office 1-510-881-4821 NJ Office 1-732-422-4917
|
|