OK.  I see the explanation material you're referring to.  It's making
better sense now.

I modified the java to-

import java.util.*;
public class ManipulateText 
{
public String Unescape(String mydata) 
  {
    return mydata;
  }
}


The XSL starts with-
Changed the top material to-
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
        xmlns="http://www.w3.org/1999/xhtml";
        xmlns:doc="http://nwalsh.com/xsl/documentation/1.0";
xmlns:MT="xalan://ManipulateText.ManipulateText"
        extension-element-prefixes="MT"
        exclude-result-prefixes="doc"
        version="1.0">

And contains-
<xsl:variable name="mt" select="MT:new()"/>
<xsl:variable name="result" select="MT:Unescape($mt, 'test')"/>
 
We're getting a different error now.
file:///C:/Program%20Files/Corel/XMetaL%204/Author/conversion/xsl/IPV-PR
OCEDURE/ipv-procedure/cleartext.xsl; Line #204; Column #44; XSLT Error
(javax.xml.transform.TransformerException):
javax.xml.transform.TransformerException: Instance method call to method
new requires an Object instance as first argument


I'm puzzled why the 'new' isn't behaving as expected.
Just to be clear - the java code ends up in a file called
ManipulateText.class  that I've located in the same folder as the XSL.
I note with interest that if I delete the .class file, the error doesn't
change.  Which suggests to me that the transformer isn't finding it in
the first place.

Fun and games on a Friday afternoon...


************************************
John F. Wade, PE
TBE
MSFC iPV Integration
CLV First Stage Flight Operations
256-961-2410



 



-----Original Message-----
From: Kevin Cormier [mailto:[EMAIL PROTECTED] 
Sent: Friday, May 11, 2007 3:16 PM
To: Wade, John F. (MSFC-NAS902099)[TBE]
Cc: xalan-j-users@xml.apache.org
Subject: RE: Xalan extension functions

Hi John,

Please refer to
http://xml.apache.org/xalan-j/extensions.html#ext-functions
and scroll down a bit to the section titled "Class format namespace"

Since you want to specify the class as the namespace, you should use "
xmlns:MT="xalan://ManipulateText.ManipulateText" unless your class
actually is in package ManipulateText.  Then what you have shown is
correct.

Your Unescape method is not static, so it needs an instance to operate
on.
Here is an example in Java and XSLT:
|------------------------------------+----------------------------------
--|
|Java                                |XSLT
|
|------------------------------------+----------------------------------
--|
|ManipulateText mt = new             |<xsl:variable name="mt"
|
|ManipulateText();                   |select="MT:new()"/>
|
|------------------------------------+----------------------------------
--|
|char result = mt.Unescape('p');     |<xsl:variable name="result"
|
|                                    |select="MT:Unescape($mt, 'p')"/>
|
|------------------------------------+----------------------------------
--|



Notice how the instance becomes an extra first argument to the method.

Alternatively, you could just use a static method.

One last thing - in your stylesheet, you're passing in 'text' which is
not a char.  I'm not sure exactly what happens in that case, but I
imagine you meant to use a String in your method.

Kevin Cormier
Software Developer, XSLT Development
IBM Toronto Lab, D1-435
E-mail:  [EMAIL PROTECTED]

Reply via email to