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]