problem using xslt-process on using extension functions which make use of my own Java classes.

darren hu <darren-isqyP6E2kY//[email protected]>
Newsgroups gmane.emacs.xslt-process.general
Message-ID <[email protected]>
hi all:
  I have setup xslt-process properly(I think) because I can apply 
,debug. it also works fine with the *xsl and *xml included in 
/xslt-process-2.2/samples and test. but when I use extension funtions 
which make use of my own java classes problems arise.
  I just used a example from xalan and the files related are listed 
below which one can find at this 
link:http://xml.apache.org/xalan-j/extensions.html#ex-java;

I have setup xslt-process-additional-classpath and

> xslt-process-additional-classpath's value is
> ("~/workspace/classes")

and MyCounter.class is in ~/workspace/classes.


when I C-c C-x v  xslt-erros  shows:

cd

/home/darren/workspace/test.xsl:16:28: Fatal error: MyCounter
For extension function, could not find method 
java.lang.String.read([ExpressionContext,] ).

 I
  	

MyCounter.java

		
	

Import java.util.*;

public class MyCounter {
  Hashtable counters = new Hashtable ();

  public MyCounter () 
  {}

  public void init
             ( org.apache.xalan.extensions.XSLProcessorContext context,
               org.apache.xalan.templates.ElemExtensionCall extElem ) 
  {
    String name = extElem.getAttribute("name");
    String value = extElem.getAttribute("value");
    int val;
    try 
    {
      val = Integer.parseInt (value);
    } 
    catch (NumberFormatException e) 
    {
      e.printStackTrace ();
      val = 0;
    }
    counters.put (name, new Integer (val));
  }

  public int read(String name) 
  {
    Integer cval = (Integer) counters.get (name);
    return (cval == null) ? 0 : cval.intValue ();
  }

  public void incr
             ( org.apache.xalan.extensions.XSLProcessorContext context,
               org.apache.xalan.templates.ElemExtensionCall extElem) 
  {
    String name = extElem.getAttribute("name");
    Integer cval = (Integer) counters.get(name);
    int nval = (cval == null) ? 0 : (cval.intValue () + 1);
    counters.put (name, new Integer (nval));
  }
}
            

	
		

An XML source document:

		
	

<?xml version="1.0"?>
<doc>
  <name first="David" last="Marston"/>
  <name first="David" last="Bertoni"/>
  <name first="Donald" last="Leslie"/>
  <name first="Emily" last="Farmer"/>
  <name first="Jack" last="Donohue"/>
  <name first="Myriam" last="Midy"/>
  <name first="Paul" last="Dick"/>
  <name first="Robert" last="Weir"/>
  <name first="Scott" last="Boag"/>
  <name first="Shane" last="Curcuru"/>
</doc>

	
		

The stylesheet:

		
	

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xalan="http://xml.apache.org/xalan"
                xmlns:counter="MyCounter"
                extension-element-prefixes="counter"
                version="1.0">

  <xalan:component prefix="counter"
                   elements="init incr" functions="read">
    <xalan:script lang="javaclass" src="xalan://MyCounter"/>
  </xalan:component>

  <xsl:template match="/">
    <HTML>
      <H1>Names in alphabetical order</H1>
      <counter:init name="index" value="1"/>
      <xsl:for-each select="doc/name">
        <xsl:sort select="@last"/>
        <xsl:sort select="@first"/>
        <p>
        <xsl:text>[</xsl:text>
        <xsl:value-of select="counter:read('index')"/>
        <xsl:text>]. </xsl:text>
        <xsl:value-of select="@last"/>
        <xsl:text>, </xsl:text>
        <xsl:value-of select="@first"/>
        </p>
        <counter:incr name="index"/>
      </xsl:for-each>
    </HTML>
  </xsl:template>
 
</xsl:stylesheet>

	
		

Transformation output(expected result which I do not get):

		
	

<HTML>
<H1>Names in alphabetical order</H1>
<p>[1]. Bertoni, David</p>
<p>[2]. Boag, Scott</p>
<p>[3]. Curcuru, Shane</p>
<p>[4]. Dick, Paul</p>
<p>[5]. Donohue, Jack</p>
<p>[6]. Farmer, Emily</p>
<p>[7]. Leslie, Donald</p>
<p>[8]. Marston, David</p>
<p>[9]. Midy, Myriam</p>
<p>[10]. Weir, Robert</p>
</HTML>

	
		




-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now. 
http://productguide.itmanagersjournal.com/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.