Hey Gary,

Thanks so much for helping with this. Moving Xalan-J into an application defined directory worked like a charm. I completely misunderstood how the extensions directory worked in the context of the java.util.ResourceBundle class. Anyway the xalan extensions now work and I'm a very happy camper.

Thanks again
Mike


On Monday, March 4, 2002, at 07:50 PM, Gary L Peskin wrote:

It would be helpful here if you logged the full stack trace when your
MissingResourceException occurred.  Perhaps, for debugging purposes, you
could include an

  e.printStackTrace()

call in your catch clause before the throw.  Of course, you could write
this to a String and then log it but that would be more work.

I think the problem has to do with how ResourceBundle.getBundle()
determines which classloader (and hence which path) to use when loading
a resource bundle for the one and two argument forms of getBundle().
From what I can tell, ResourceBundle uses the classloader of its
caller's caller.  This is why I need the stack trace to determine what's
going on.  It's also why I think that things worked when you placed the
file in your extensions directory.

Is XalanJ in your extensions directory?

If so, the problem is not in how XalanJ uses the CLASSPATH but in how
ResourceBundle uses the CLASSPATH.  I think it's going to use the same
classloader that loaded the XalanJ class
org.apache.xalan.extensions.ExtensionHandlerJavaClass which I think will
be in the stack trace in the second spot from the top (but I'd like to
verify it).

If you're going to put XalanJ in the extensions directory, that's where
ResourceBundle is going to look for any resources that it loads, I'm
afraid.  ResourceBundle doesn't try to use the current thread class
loader.

If you don't want to move XalanJ out of the extensions directory, mu
siggestion is that you write your own extension instead of using
java.util.ResourceBundle directly.  Your extension could simply call
ResourceBundle.getBundle as:

  return ResourceBundle.getBundle(baseName, locale,
Thread.getContextClassLoader());

HTH,
Gary

-----Original Message-----
From: Michael Engelhart [mailto:[EMAIL PROTECTED]
Sent: Friday, March 01, 2002 5:26 PM
To: Gary L Peskin
Cc: [EMAIL PROTECTED]
Subject: Re: xalan extensions classpath


Hi Gary,

Here's the error output in my Log4J file:
ERROR [earthtrip]: XSLT Transformation failed:
java.util.MissingResourceException: Can't find bundle for base name
clients.earthtrip.i18n, locale en_US 2002-02-28 16:37:51,259

JDK 1.3.1 on  Mac OS X
Xalan 2.2.0

I'm not executing from the command line.  Just programmatically from
within my code.   Here's the code that loads the stylesheet
and does the
transform (I'm using JDOM 1.0b7 for XML).    The reason I'm assuming
this is a Xalan problem is because it only happens from within the
stylesheet extension.

try {
        Transformer transformer =
TransformerFactory.newInstance().newTransformer(new
StreamSource(stylesheet));
        StreamResult out = new StreamResult(new StringWriter());
        transformer.transform(new JDOMSource(this.doc), out);
        StringWriter writer =  (StringWriter) out.getWriter();
        return writer.getBuffer();
}
catch (Exception e) {
        throw new JDOMException("XSLT Transformation failed", e);
}


Also I'm not getting a JDOMException but a java.util.MissingResourceException I have the classpath set in the application launcher to point to the directory that contains the "client" directory so the rest of my code can call it fine.

Thanks for your help.

Mike


On Friday, March 1, 2002, at 04:21 PM, Gary L Peskin wrote:

Hi, Mike --

What version of XalanJ are you using? What is your JDK
version? Can
you include the full stack trace of the MissingResourceException,
please (you may need to include the -edump command line switch).

Also, if you're executing XalanJ from the command line, can
you please
type

  java org.apache.xalan.xslt.EnvironmentCheck

and include the output?

Thanks,
Gary

-----Original Message-----
From: Michael Engelhart [mailto:[EMAIL PROTECTED]
Sent: Friday, March 01, 2002 1:16 PM
To: [EMAIL PROTECTED]
Subject: xalan extensions classpath


Hi,

I have a stylesheet with the following in it:

<xsl:variable name="language" select="/Document/@Language" />
<xsl:variable name="country" select="/Document/@Country" />
<xsl:variable name="locale"
select="java:java.util.Locale.new($language,
$country)" />
<xsl:variable name="i18nBundle"
select="java:java.util.ResourceBundle.getBundle('clients.somec
lient.i18n',
$locale)" />


This standalone application has the directory that contains "clients/someclient" in the classpath and I can easily call: ResourceBundle bundle = ResourceBundle.getBundle("clients.someclient.i18n"); without throwing a MissingResourceException from anywhere
in my java
class files. I can also do transforms with Xalan as well
but when I
include the above XSL extension code I get a
MissingResourceException
thrown.

So my question is how come Xalan isn't using the applications
classpath
in it's extension mechanism?   Also I tried jarring up that clients
directory and sticking it my Java Extensions directory
(which on Mac
OS X gets added to the classpath automatically) and it
found the file
fine.    But I want these properties files to be editable and not
wrapped up in a jar.   The clients directory is to sit in the
applications top level directory.

Any help/advice would be apprectiated.

Thanks
Mike





Reply via email to