  | |  | Xalan extension functions | Xalan extension functions 2007-05-02 - By Fuller, Alex
Hi John, I believe your problem that you haven't created an instance of the class in which you're asking Xalan to execute a method. Since your extension is written in Java, you should get rid of the <xalan:component> syntax and use the abbreviated syntax <http://xml.apache.org/xalan-j/extensions.html#java-namespace> . However, the lack of a package name may hurt you; I've never tried that. If all you want to do is invoke the constructor, use syntax like: <xsl:variable name="MyTest" select="mytest:new()"/> The error message is saying that Xalan thinks you're trying to call an instance method on your object. To do that you have to include the instance of the object in the method call. So, if your class had a method "public void launch(String destination)" <xsl:value-of select="mytest:launch($MyTest, 'Mars')"/> Hope that helps, Alex
________________________________
From: Wade, John F. (MSFC-NAS902099)[TBE] [mailto:John.F.Wade@(protected)] Sent: Wednesday, May 02, 2007 8:50 AM To: Wade, John F. (MSFC-NAS902099)[TBE]; Kevin Cormier Cc: xalan-j-users@(protected) Subject: RE: Xalan extension functions It's not Monday anymore. Oh well. Here's the test case java code. It does exactly nothing. Import java.util.*;
public class MyTest
{
public MyTest()
{}
}
The namespace and component definitions are: <?xml version="1.0" encoding="UTF-8" ?> <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 exclude-result-prefixes="doc" xmlns:xalan=http://xml.apache.org/xalan xmlns:mytest="MyTest" extension-element-prefixes="mytest" version="1.0">
<xalan:component prefix="mytest" functions="MyTest"> <xalan:script lang="javaclass" src="xalan://MyTest/"/> </xalan:component>
Down in one of the templates I've added a line that says: <xsl:value-of select="mytest:MyTest()"/>
And the error I get is:
(Location of error unknown)XSLT Error (javax.xml.transform.TransformerException): javax.xml.transform.TransformerException: Instance method call to method MyTest requires an Object instance as first argument ...which isn't the error I remember getting last time I tried this, but one thing at a time. Suggestions? ********************************* John F. Wade, PE MSFC EO20 - TBE
________________________________
From: Wade, John F. (MSFC-NAS902099)[TBE] [mailto:John.F.Wade@(protected)] Sent: Fri 4/27/2007 3:29 PM To: Kevin Cormier Cc: xalan-j-users@(protected) Subject: RE: Xalan extension functions Classpath has been my thought, too. I'm a real beginner at this, and the environment I'm working with has two variants, so I'm not sure how to determine what the classpath is in each case. But, we'll start with the stylesheet and JAVA code on Monday and go from there. Thanks. JFW
________________________________
From: Kevin Cormier [mailto:kcormier@(protected)] Sent: Fri 4/27/2007 3:11 PM To: Wade, John F. (MSFC-NAS902099)[TBE] Cc: xalan-j-users@(protected) Subject: Re: Xalan extension functions
Hi John, All I can think of with the information you've given is to check that your class is on the classpath. Could you send your stylesheet and Java class, and also show how you invoked the transformation and what the full error message was?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML dir=ltr><HEAD><TITLE>Re: Xalan extension functions</TITLE> <META http-equiv=Content-Type content="text/html; charset=us-ascii"> <META content="MSHTML 6.00.2900.3059" name=GENERATOR></HEAD> <BODY> <DIV dir=ltr align=left><SPAN class=462010414-02052007><FONT face=Arial color=#0000ff size=2>Hi John,</FONT></SPAN></DIV> <DIV dir=ltr align=left><SPAN class=462010414-02052007><FONT face=Arial color=#0000ff size=2> I believe your problem that you haven't created an instance of the class in which you're asking Xalan to execute a method. Since your extension is written in Java, you should get rid of the <xalan:component> syntax and use the <A href="http://xml.apache.org/xalan-j/extensions.html#java-namespace">abbreviated syntax</A>. However, the lack of a package name may hurt you; I've never tried that. If all you want to do is invoke the constructor, use syntax like:</FONT></SPAN></DIV> <DIV dir=ltr align=left><SPAN class=462010414-02052007><FONT face=Arial color=#0000ff size=2></FONT></SPAN> </DIV> <DIV dir=ltr align=left><SPAN class=462010414-02052007><FONT face=Arial color=#0000ff size=2><xsl:variable name="MyTest" select="mytest:new()"/></FONT></SPAN></DIV> <DIV dir=ltr align=left><SPAN class=462010414-02052007><FONT face=Arial color=#0000ff size=2></FONT></SPAN> </DIV> <DIV dir=ltr align=left><SPAN class=462010414-02052007><FONT face=Arial color=#0000ff size=2>The error message is saying that Xalan thinks you're trying to call an instance method on your object. To do that you have to include the instance of the object in the method call. So, if your class had a method "public void launch(String destination)" </FONT></SPAN></DIV> <DIV dir=ltr align=left><SPAN class=462010414-02052007><FONT face=Arial color=#0000ff size=2></FONT></SPAN> </DIV> <DIV dir=ltr align=left><SPAN class=462010414-02052007><FONT face=Arial color=#0000ff size=2><xsl:value-of select="mytest:launch($MyTest, 'Mars')"/></FONT></SPAN></DIV> <DIV dir=ltr align=left><SPAN class=462010414-02052007><FONT face=Arial color=#0000ff size=2></FONT></SPAN> </DIV> <DIV dir=ltr align=left><SPAN class=462010414-02052007><FONT face=Arial color=#0000ff size=2>Hope that helps,</FONT></SPAN></DIV> <DIV dir=ltr align=left><SPAN class=462010414-02052007><FONT face=Arial color=#0000ff size=2>Alex</FONT></SPAN></DIV><BR> <BLOCKQUOTE dir=ltr style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #0000ff 2px solid; MARGIN-RIGHT: 0px"> <DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left> <HR tabIndex=-1> <FONT face=Tahoma size=2><B>From:</B> Wade, John F. (MSFC-NAS902099)[TBE] [mailto:John.F.Wade@(protected)] <BR><B>Sent:</B> Wednesday, May 02, 2007 8:50 AM<BR><B>To:</B> Wade, John F. (MSFC-NAS902099)[TBE]; Kevin Cormier<BR><B>Cc:</B> xalan-j-users@(protected)<BR><B>Subject:</B> RE: Xalan extension functions<BR></FONT><BR></DIV> <DIV></DIV> <DIV id=idOWAReplyText60140 dir=ltr> <DIV dir=ltr><FONT face=Arial color=#000000 size=2>It's not Monday anymore. Oh well.</FONT></DIV> <DIV dir=ltr><FONT size=2></FONT> </DIV> <DIV dir=ltr><FONT size=2>Here's the test case java code. It does exactly nothing.</FONT></DIV> <DIV dir=ltr><FONT size=2><FONT size=2> <P>Import java.util.*;</P> <P>public class MyTest </P> <P>{</P> <P>public MyTest() </P> <P>{}</P> <P></P> <P>}</P></FONT></FONT></DIV> <DIV dir=ltr><FONT size=2></FONT> </DIV> <DIV dir=ltr><FONT size=2>The namespace and component definitions are:</FONT></DIV> <DIV dir=ltr><FONT size=2><FONT color=#0000ff size=2> <P><?</FONT><FONT color=#800000 size=2>xml</FONT><FONT color=#ff00ff size=2> </FONT><FONT color=#ff0000 size=2>version</FONT><FONT color=#0000ff size=2>="1.0"</FONT><FONT color=#ff00ff size=2> </FONT><FONT color=#ff0000 size=2>encoding</FONT><FONT color=#0000ff size=2>="UTF-8"</FONT><FONT color=#ff00ff size=2> </FONT><FONT color=#0000ff size=2>?><BR><</FONT><FONT color=#800000 size=2>xsl:stylesheet</FONT><FONT color=#ff00ff size=2> <BR></FONT><FONT color=#800000 size=2>xmlns</FONT><FONT color=#ff00ff size=2>:</FONT><FONT color=#ff0000 size=2>xsl</FONT><FONT color=#0000ff size=2>=<A href="http://www.w3.org/1999/XSL/Transform">http://www.w3.org/1999/XSL /Transform</A></FONT><FONT color=#ff00ff size=2> <BR></FONT><FONT color=#ff0000 size=2>xmlns</FONT><FONT color=#0000ff size=2>=<A href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</A></FONT> <FONT color=#ff00ff size=2> <BR></FONT><FONT color=#800000 size=2>xmlns</FONT><FONT color=#ff00ff size=2>:</FONT><FONT color=#ff0000 size=2>doc</FONT><FONT color=#0000ff size=2>=<A href="http://nwalsh.com/xsl/documentation/1.0">http://nwalsh.com/xsl /documentation/1.0</A></FONT><FONT color=#ff00ff size=2> <BR></FONT><FONT color=#ff0000 size=2>exclude-result-prefixes</FONT><FONT color=#0000ff size=2>="doc"</FONT><FONT color=#ff00ff size=2> <BR></FONT><FONT color= #800000 size=2>xmlns</FONT><FONT color=#ff00ff size=2>:</FONT><FONT color=#ff0000 size=2>xalan</FONT><FONT color=#0000ff size=2>=<A href="http://xml.apache.org/xalan">http://xml.apache.org/xalan</A><BR></FONT> <FONT color=#800000 size=2>xmlns</FONT><FONT color=#ff00ff size=2>:</FONT><FONT color=#ff0000 size=2>mytest</FONT><FONT color=#0000ff size=2>="MyTest"<BR></FONT><FONT color=#ff0000 size=2>extension-element-prefixes</FONT><FONT color=#0000ff size=2>="mytest"<BR></FONT><FONT color=#ff0000 size=2>version</FONT><FONT color=#0000ff size=2>="1.0"></P> <P><</FONT><FONT color=#800000 size=2>xalan:component</FONT><FONT color=#ff00ff size=2> </FONT><FONT color=#ff0000 size=2>prefix</FONT><FONT color=#0000ff size=2>="mytest"</FONT><FONT color=#ff00ff size=2> </FONT><FONT color=#ff0000 size=2>functions</FONT><FONT color=#0000ff size=2>="MyTest"><BR><</FONT><FONT color=#800000 size=2>xalan:script</FONT><FONT color=#ff00ff size=2> </FONT><FONT color=#ff0000 size=2>lang</FONT><FONT color=#0000ff size=2>="javaclass"</FONT><FONT color=#ff00ff size=2> </FONT><FONT color=#ff0000 size=2>src</FONT><FONT color=#0000ff size=2>="xalan://MyTest/"/><BR></</FONT><FONT color=#800000 size=2>xalan:component</FONT><FONT color=#0000ff size=2>></P></FONT></FONT></DIV> <DIV dir=ltr><FONT size=2></FONT> </DIV> <DIV dir=ltr><FONT size=2></FONT> </DIV> <DIV dir=ltr><FONT size=2>Down in one of the templates I've added a line that says:</FONT></DIV> <DIV dir=ltr><FONT color=#0000ff size=2> <P><</FONT><FONT color=#800000 size=2>xsl:value-of</FONT><FONT color=#ff00ff size=2> </FONT><FONT color=#ff0000 size=2>select</FONT><FONT color=#0000ff size=2>="mytest:MyTest()"/></P></FONT></DIV> <DIV dir=ltr><FONT size=2></FONT> </DIV> <DIV dir=ltr><FONT size=2>And the error I get is:</FONT></DIV> <DIV dir=ltr><BR>(Location of error unknown)XSLT Error (javax.xml.transform.TransformerException): javax.xml.transform.TransformerException: Instance method call to method MyTest requires an Object instance as first argument<BR></DIV> <DIV dir=ltr><FONT size=2>...which isn't the error I remember getting last time I tried this, but one thing at a time.</FONT></DIV> <DIV dir=ltr><FONT size=2></FONT> </DIV> <DIV dir=ltr><FONT size=2>Suggestions?</FONT></DIV> <DIV dir=ltr><FONT face=Arial color=#000000 size=2></FONT> </DIV></DIV> <DIV id=idSignature82333 dir=ltr> <DIV><FONT face=Arial color=#000000 size=2>*********************************</FONT></DIV> <DIV><FONT face=Arial size=2>John F. Wade, PE</FONT></DIV> <DIV><FONT face=Arial size=2>MSFC EO20 - TBE</FONT></DIV> <DIV><FONT size=2></FONT> </DIV> <DIV> </DIV> <DIV> </DIV></DIV> <DIV dir=ltr><BR> <HR tabIndex=-1> <FONT face=Tahoma size=2><B>From:</B> Wade, John F. (MSFC-NAS902099)[TBE] [mailto:John.F.Wade@(protected)]<BR><B>Sent:</B> Fri 4/27/2007 3:29 PM<BR><B>To:</B> Kevin Cormier<BR><B>Cc:</B> xalan-j-users@(protected)<BR><B>Subject:</B> RE: Xalan extension functions<BR></FONT><BR></DIV> <DIV dir=ltr> <DIV id=idOWAReplyText42563 dir=ltr> <DIV dir=ltr><FONT face=Arial color=#000000 size=2>Classpath has been my thought, too. I'm a real beginner at this, and the environment I'm working with has two variants, so I'm not sure how to determine what the classpath is in each case. </FONT></DIV> <DIV dir=ltr><FONT face=Arial color=#000000 size=2>But, we'll start with the stylesheet and JAVA code on Monday and go from there.</FONT></DIV> <DIV dir=ltr><FONT face=Arial color=#000000 size=2></FONT> </DIV> <DIV dir=ltr><FONT face=Arial size=2>Thanks.</FONT></DIV> <DIV dir=ltr> </DIV></DIV> <DIV id=idSignature42534 dir=ltr> <DIV><FONT face=Arial color=#000000 size=2>JFW</FONT></DIV> <DIV> </DIV> <DIV> </DIV></DIV> <DIV dir=ltr><BR> <HR tabIndex=-1> <FONT face=Tahoma size=2><B>From:</B> Kevin Cormier [mailto:kcormier@(protected)]<BR><B>Sent:</B> Fri 4/27/2007 3:11 PM<BR><B>To:</B> Wade, John F. (MSFC-NAS902099)[TBE]<BR><B>Cc:</B> xalan-j-users@(protected)<BR><B>Subject:</B> Re: Xalan extension functions<BR></FONT><BR></DIV> <DIV> <P><FONT size=2>Hi John,<BR><BR>All I can think of with the information you 've given is to check that your<BR>class is on the classpath.<BR><BR>Could you send your stylesheet and Java class, and also show how you<BR>invoked the transformation and what the full error message was?<BR><BR><BR></FONT></P></DIV></DIV></BLOCKQUOTE></BODY></HTML>
|
|
 |