views:

30

answers:

1

Hi,

I have the following XSL which defines a namespace for my Java Class. In a nutshell I'm trying to point to a different resource bundle depending upon a value in my XML file (I know Resource Bundles are really for internationalization but why re-create the wheel?):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                xmlns:java="http://xml.apache.org/xalan/java"
                xmlns:pf="my.package.common.PropertiesFinder">

    <xsl:variable name="compType" select="//comp_type"/>
    <xsl:variable name="props" select="pf:getPropsFile($compType)"/>
    <xsl:variable name="DEF6Resources" select="java:util.ResourceBundle.getBundle($props)"/>

When the transform runs I get the following error:

java.lang.NoSuchMethodException: For extension function, could not find method org.apache.xml.utils.NodeVector.getProps([ExpressionContext,])

Can anyone shed any light on why this is happening please. It's clearly something to do with my classpath/loader but I'm not sure what to do...

Many thanks in advance.

Anna

+1  A: 

You have to check your namespace definition.

xmlns:pf="my.package.common.PropertiesFinder"

When you are defining a namespace for a Java class, you have to prepend it with the java: prefix.

xmlns:pf="java:my.package.common.PropertiesFinder"

Also, the method invoked (getPropsFile) must be declared as static.

And, I think that at this block of code:

<xsl:variable name="DEF6Resources" select="java:util.ResourceBundle.getBundle($props)"/>

You are missing the java root package:

<xsl:variable name="DEF6Resources" select="java:java.util.ResourceBundle.getBundle($props)"/>

(I'm not sure of this last, maybe the Xalan parser prepends it for some cases?)

Tomas Narros