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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] XSLT/Java does not identi, Linc | Thread | Re: [xsl] XSLT/Java does not identi, J.Pietschmann |
Re: [xsl] XSLT/Java does not identi, Linc | Date | Re: [xsl] XSLT/Java does not identi, J.Pietschmann |
Month |