Re: [xsl] XSLT/Java does not identify an external Java class

Subject: Re: [xsl] XSLT/Java does not identify an external Java class
From: "Linc" <lincolnmitchell@xxxxxxxxxxxxxx>
Date: Sun, 4 Jan 2004 00:37:57 +0800
I just run the example with Xalan and got the following error:
---------
file:///C:/TextWidthTest.xslt; Line #17; Column #105; XSLT Error
(javax.xml.transform.TransformerException): java.lang.NoSuchMethodException:
For extension function, could not find method
org.apache.xpath.objects.XNodeSet.new([ExpressionContext,] #NODESET,
#BOOLEAN, #BOOLEAN).
----------

Maybe I am not setting the classpath correctly. I am on XP so do I do this
via the control panel  - environment variables or via the cmd prompt.



Linc

----- Original Message -----
From: "Linc" <lincolnmitchell@xxxxxxxxxxxxxx>
To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Saturday, January 03, 2004 11:06 PM
Subject: Re: [xsl] XSLT/Java does not identify an external Java class


> You are correct I am using Instant Saxon. In the book it says that the
> example should ork unchanged for Saxon or Xalan despite the
> "xml.apache.org/xslt" namespace and that it works because you use the
> processors' shortcut conventions for encoding Java class in the namespace.
>
> I am not commited to any processor so I assume this should work with
Xalan.
>
>
> Linc
>
>
> ----- Original Message -----
> From: "Michael Kay" <mhk@xxxxxxxxx>
> To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
> Sent: Saturday, January 03, 2004 8:39 PM
> Subject: RE: [xsl] XSLT/Java does not identify an external Java class
>
>
> > Calling extension functions depends on which processor you are using, so
> > you need to give us this information! It looks to me as if you are
> > trying to run an example that was written for Xalan but using the Saxon
> > processor. In fact, it looks as if you are using Instant Saxon, which
> > means you are using the Microsoft JVM, which has quite different ways of
> > managing the classpath from the Sun JVM.
> >
> > The message means that the JVM didn't find the class on the classpath.
> >
> > Michael Kay
> >
> > > -----Original Message-----
> > > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of Linc
> > > Sent: 03 January 2004 00:31
> > > To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx
> > > Subject: [xsl] XSLT/Java does not identify an external Java class
> > >
> > >
> > > Hi,
> > >
> > > I am having difficulty getting an example working from the
> > > book 'XSLT cookbook' by Sal Mangano, recipe 12.3 (page 542).
> > > I receive the following error for the SVG bounding box
> > > example on running "c:\my path...\saxon textWidthTest.xml
> > > textWidthTest.xslt > output.svg" at the CMD line: Error at
> > > xsl:value-of on line 17 of file:/c:/my path/textwidthtest.xslt:
> > >   The URI xalan://com.ora.xsltckbk.util.SVGFontMetrics does
> > > not identify an external Java class Transformation failed:
> > > Run-time errors were reported
> > >
> > > Here is the XLST and java file used:
> > >
> > > XSLT file
> > > ------------------------------
> > >
> > > <?xml version="1.0" encoding="UTF-8"?>
> > > <xsl:stylesheet version="1.0"
> > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
> > > xmlns:xalan="http://xml.apache.org/xslt";
> > > xmlns:font="xalan://com.ora.xsltckbk.util.SVGFontMetrics"
> > > exclude-result-prefixes="font xalan">
> > >
> > > <xsl:output method="xml"/>
> > >
> > > <xsl:template match="/">
> > >   <svg width="100%" height="100%">
> > >     <xsl:apply-templates/>
> > >    </svg>
> > > </xsl:template>
> > >
> > >
> > > <xsl:template match="text">
> > >   <xsl:variable name="fontMetrics" select="font:new(@font,
> > > @size, boolean(@weight), boolean(@stytle))"/>
> > >   <xsl:variable name="text" select="."/>
> > >   <xsl:variable name="width" select="font:stringWidth($fontMetrics,
> > > $text)"/>
> > >   <xsl:variable name="height" select="font:stringHeight($fontMetrics,
> > > $text)"/>
> > >   <xsl:variable name="style">
> > >     <xsl:if test="@style">
> > >       <xsl:value-of select="concat('font-style:',@style)"/>
> > >     </xsl:if>
> > >   </xsl:variable>
> > >   <xsl:variable name="weight">
> > >     <xsl:if test="@weight">
> > >       <xsl:value-of select="concat('font-weight:',@weight)"/>
> > >     </xsl:if>
> > >   </xsl:variable>
> > >   <g style="font-family:{@font};font-size:{@size};{$style};{$weight}">
> > >     <!-- Use the SVGFontMetrics info render a rectangle that is -->
> > >     <!-- slightly bigger than the expected size of the text -->
> > >     <!-- Adjust the y position based on the previous text size. -->
> > >     <rect x="10"
> > >           y="{sum(preceding-sibling::text/@size) * 2}pt"
> > >           width="{$width + 2}"
> > >           height="{$height + 2}"
> > >           style="fill:none;stroke: black;stroke-width:0.5;"/>
> > >     <!-- Render the text so it is cenetered in the rectangle -->
> > >     <text x="11" y="{sum(preceding-sibling::text/@size) * 2 +
> > > @size div 2 + 2}pt">
> > >       <xsl:value-of select="."/>
> > >     </text>
> > >   </g>
> > >
> > > </xsl:template>
> > >
> > >
> > > </xsl:stylesheet>
> > >
> > >
> > >
> > >
> > > Java class in package (xsltckbk.jar)
> > > -----------------------------------------------
> > >
> > > package com.ora.xsltckbk.util ;
> > > import java.awt.* ;
> > > import java.awt.geom.* ;
> > > import java.awt.font.* ;
> > > import java.awt.image.*;
> > >
> > > public class SVGFontMetrics
> > > {
> > >   public SVGFontMetrics(String fontName, int size)
> > >   {
> > >     m_font = new Font(fontName, Font.PLAIN, size) ;
> > >     BufferedImage bi
> > >         = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
> > >     m_graphics2D = bi.createGraphics() ;
> > >   }
> > >
> > >   public SVGFontMetrics(String fontName, int size, boolean
> > > bold, boolean
> > > italic)
> > >   {
> > >     m_font = new Font(fontName, style(bold,italic) , size) ;
> > >     BufferedImage bi
> > >         = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
> > >     m_graphics2D = bi.createGraphics() ;
> > >   }
> > >
> > >   public double stringWidth(String str)
> > >   {
> > >     FontRenderContext frc = m_graphics2D.getFontRenderContext();
> > >     TextLayout layout = new TextLayout(str, m_font, frc);
> > >     Rectangle2D rect = layout.getBounds() ;
> > >     return rect.getWidth() ;
> > >   }
> > >
> > >   public double stringHeight(String str)
> > >   {
> > >     FontRenderContext frc = m_graphics2D.getFontRenderContext();
> > >     TextLayout layout = new TextLayout(str, m_font, frc);
> > >     Rectangle2D rect = layout.getBounds() ;
> > >     return rect.getHeight() ;
> > >   }
> > >
> > >   static private int style(boolean bold, boolean italic)
> > >   {
> > >     int style = Font.PLAIN ;
> > >     if (bold) { style |= Font.BOLD;}
> > >     if (italic) { style |= Font.ITALIC;}
> > >     return style ;
> > >   }
> > >
> > >   private Font m_font = null ;
> > >   private Graphics2D m_graphics2D = null;
> > > }
> > >
> > >
> > >
> > >
> > > I have searched the http://www.mulberrytech.com/xsl/xsl-list
> > > archives, and numerous other sites for the answer, edited the
> > > classpath to include "xsltckbk.jar" but to no avail.
> > >
> > > Any help appreciated.
> > >
> > >
> > >
> > > Linc
> > >
> > >
> > >
> > >  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> > >
> >
> >
> >  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> >
> >
>
>
>
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
>
>



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


Current Thread