Adrian Herscu wrote:
Hi all,
I am trying to implement few XSL extension functions in Java and call
them from my XSL template.
I discovered that the ExpressionContext interface is not available and
so all the org.apache namespace (there is something like
com.sum.org.apache...internal.ExpressionContext but the compiler
refuses it).
Also discovered that no matter what the referenced FQCN is, the XSL
process always tries to invoke methods in the java.lang.String class.
For example
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="http://xml.apache.org/xalan"
xmlns:utils="com.acme.followed.by.this.garbage:@%...@#^#%#$"
extension-element-prefixes="utils">
Maybe you need to add a <xalan:component> section to your XSLT after the
namespace declarations:
<xalan:component prefix="utils">
<xalan:script lang="javaclass" src="yourClassName"/>
</xalan:component>
Or if your extension is implemented in Java it is recommended to use the
abbreviated syntax for extensions implemented in Java, which does not
require the <xalan:component> element. Setting the xmlns attribute alone
(which your example shows) is not enough since that value is not used to
actually locate your class, as far as I can tell.
See http://xml.apache.org/xalan-j/extensions.html and
http://xml.apache.org/xalan-j/extensions.html#java-namespace for more
details.
Also of course make sure your class is in the classpath.
Then this one works by calling the java.lang.String.length method !
<xsl:value-of select="utils:length('fff')" />
Regards,
Adrian.
--
Nathan Nadeau
n...@gleim.com
Software Development
Gleim Publications, Inc.
http://www.gleim.com