[xsl] How to invoke java instance methods from xslt?

Subject: [xsl] How to invoke java instance methods from xslt?
From: Brad Cox <bcox@xxxxxxxxxxxxxxxxx>
Date: Fri, 1 Feb 2002 14:51:58 -0500
Could someone please provide the recipe for passing a java instance into xslt and then calling a method on that instance? I'm using xalan extensions but keep getting lost in the weedy syntax.

With this input

	<task ident="...">
		<page ident="...">Arbitrary xhtml</page>
		<page ident="...">Arbitrary xhtml</page>
		<page ident="...">Arbitrary xhtml</page>
		<page ident="...">Arbitrary xhtml</page>
		<page ident="...">Arbitrary xhtml</page>
		<page ident="...">Arbitrary xhtml</page>
	</task>

and this for launching xslt from java

StringWriter sw = new StringWriter();
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(new StreamSource(xslPath));
transformer.setParameter("cache", this);
transformer.transform(new StreamSource(xmlPath), new StreamResult(sw));


and this xslt. Cache is the java instance and addBody is one of its public methods.

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                xmlns:java="http://xml.apache.org/xslt/java";
                version="1.0">

<xsl:param name="cache"></xsl:param>

  <xsl:template match="/task">
    <xsl:apply-templates select="page"/>
  </xsl:template>

<xsl:template match="page">
<xsl:variable name="ident" select="string(@ident)"/>
<xsl:variable name="body" select="text()"/>
<xsl:param name="cache" select="java:$cache.addPage($ident, $body)"/>
<xsl:value-of select="java:format($formatter, $date)"/>
</xsl:template>


</xsl:stylesheet>

The match("page") clause is gibberish because where I'm getting lost.


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



Current Thread