RE: [xsl] calling extension java functions. ( Saxon Vs Xalan)

Subject: RE: [xsl] calling extension java functions. ( Saxon Vs Xalan)
From: Cams Ismael <Ismael.Cams@xxxxxxxxxxxxxxx>
Date: Fri, 17 Jan 2003 15:12:50 +0100
Laura,

I have tried to reproduce your problem, but I didn't succeed in it. I think
the best way to encounter what the problem is, you write a stylesheet that
uses only saxon.

e.g.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
    xmlns:str-utils="java:com.myutils.utils.StringUtils">

<xsl:template match="/">
	<<xsl:value-of select="str-utils:upperCase('test')"/>
</xsl:template>

If you still encounter the same problem I am almost 100% sure it has to do
something with your Java code. Maybe SAXON is more strict than Xalan. The
only way to find out what's wrong here I think is too get it as easy as
possible.

Ismaël

-----Original Message-----
From: Laura [mailto:xsl_list@xxxxxxxxxxx]
Sent: vrijdag 17 januari 2003 14:58
To: Cams Ismael
Subject: Re: [xsl] calling extension java functions. ( Saxon Vs Xalan)


Thanks Dave and Cams..
I did the stuff and had it running with Xalan..and everything is fine with
XALAN. Fails with Saxon. The saxon.jar and the str-utils.jar( this contains
my specific java stuff) are in classpath. The following is the Dos Result
Screen

D:\tests>java org.apache.xalan.xslt.Process -IN str.xml -XSL str.xsl -OUT
RED
BLUE
BLACK
GREEN

With Saxon:

Transform failed:  At xsl:value-of on line 18 of file:/D:/tests/str.xsl: No
method matching upperCase with 1 parameter found in class
com.myutils.utils.StringUtils

This was just to test the extension functions in saxon. I know I could have
used translate() method  to get the uppercase. But this is kind of a test to
get the Java thing running with Saxon.
The bit that calls the extension element:
<xsl:value-of select="str-utils:upperCase($colors)"/>

and the namespace is:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:str-utils = "com.myutils.utils.StringUtils"
extension-element-prefixes ="str-utils">

I cant understand why this  fails  with Saxon

thanks

----- Original Message -----
From: "Cams Ismael" <Ismael.Cams@xxxxxxxxxxxxxxx>
To: "'Laura'" <xsl_list@xxxxxxxxxxx>
Sent: Friday, January 17, 2003 12:57 PM
Subject: RE: [xsl] calling extension java functions. ( Saxon Vs Xalan)


Sorry I misread the xsl a little bit.
Indeed you have to use the saxon namespace for extension functions of Saxon.

So probably there is a problem somewhere with the Java code.

Did you place the class on the classpath ?


-----Original Message-----
From: Laura [mailto:xsl_list@xxxxxxxxxxx]
Sent: vrijdag 17 januari 2003 13:30
To: Cams Ismael
Subject: Re: [xsl] calling extension java functions. ( Saxon Vs Xalan)


Cams,
But isnt the namespace prefix for that purpose??
I need to declare the saxon namespace because I am using one of its
extension elements as well.

----- Original Message -----
From: "Cams Ismael" <Ismael.Cams@xxxxxxxxxxxxxxx>
To: <xsl_list@xxxxxxxxxxx>
Sent: Friday, January 17, 2003 11:47 AM
Subject: FW: [xsl] calling extension java functions. ( Saxon Vs Xalan)


The way I call extension functions in Saxon is:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
    xmlns:str-utils="java:com.myutils.utils.StringUtils">

<xsl:value-of select="str-utils:upperCase($mystring)"/>

Somewhere in the documentation you can find:

The SAXON namespace URI "http://icl.com/saxon"; is recognised as a special
case, and causes the function to be loaded from the class
com.icl.saxon.functions.Extensions. This class name can be specified
explicitly if you prefer.

So I think you shouldn't refer to the SAXON namespace. Probably it looks in
the Extensions class for this method, and of-course it doesn't exist in this
class.

Hope this helps.

Kind regards,
Ismaël

-----Original Message-----
From: Laura [mailto:xsl_list@xxxxxxxxxxx]
Sent: vrijdag 17 januari 2003 12:30
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: [xsl] calling extension java functions. ( Saxon Vs Xalan)


I have a java extension method that i call from my XSL
the way i call is
<xsl:value-of select="str-utils:upperCase($mystring)"/>
it works fine with Xalan but fails with Saxon.
saxon gives
 Transform failed:  At xsl:value-of on line 264 of
file:/tests/saxon-test.xsl: No method matching upperCase with 1 parameter
found in class com.myutils.util.StringUtils

the namespace declaration is:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                xmlns:saxon="http://icl.com/saxon"; xmlns:str-utils =
"com.myutils.utils.StringUtils"
                extension-element-prefixes="saxon str-utils"  version="1.0">
It however doesnt give any error with the Xalan ( with a different namespace
declaration)
Am i calling it correctly?? is there any difference in the way you call
extension functions with xalan and saxon?
Thanks

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread