Browse Source

Enable NLS / TranslationBundle to be used in OSGi

TranslationBundle#load() used to load resource bundles through
ResourceBundle#getBundle() without explicitly specifying a class loader.
In this case, the class laoder of the calling class (TranslationBundle
here) is used. This approach fails in runtime environments like OSGi
where there are multiple class loaders.

This change enables loading resource bundles in multi class loaders
environments. The fix is to pass the class loader of the
TranslationBundle-derived class to ResourceBundle#getBundle().

Bug: 436232
Change-Id: I39db61e012dc93ebf388a71bf6088a3310a22bac
Signed-off-by: Rüdiger Herrmann <ruediger.herrmann@gmx.de>
stable-3.5
Rüdiger Herrmann 11 years ago
parent
commit
02baeab4c4
  1. 16
      org.eclipse.jgit/src/org/eclipse/jgit/nls/TranslationBundle.java

16
org.eclipse.jgit/src/org/eclipse/jgit/nls/TranslationBundle.java

@ -99,8 +99,8 @@ import org.eclipse.jgit.errors.TranslationStringMissingException;
* {@link ResourceBundle#getBundle(String, Locale)} method to load a resource * {@link ResourceBundle#getBundle(String, Locale)} method to load a resource
* bundle. See the documentation of this method for a detailed explanation of * bundle. See the documentation of this method for a detailed explanation of
* resource bundle loading strategy. After a bundle is created the * resource bundle loading strategy. After a bundle is created the
* {@link #effectiveLocale()} method can be used to determine whether the * {@link #effectiveLocale()} method can be used to determine whether the bundle
* bundle really corresponds to the requested locale or is a fallback. * really corresponds to the requested locale or is a fallback.
* *
* <p> * <p>
* To load a String from a resource bundle property file this class uses the * To load a String from a resource bundle property file this class uses the
@ -153,13 +153,17 @@ public abstract class TranslationBundle {
* *
* @param locale * @param locale
* defines the locale to be used when loading the resource bundle * defines the locale to be used when loading the resource bundle
* @exception TranslationBundleLoadingException see {@link TranslationBundleLoadingException} * @exception TranslationBundleLoadingException
* @exception TranslationStringMissingException see {@link TranslationStringMissingException} * see {@link TranslationBundleLoadingException}
* @exception TranslationStringMissingException
* see {@link TranslationStringMissingException}
*/ */
void load(Locale locale) throws TranslationBundleLoadingException { void load(Locale locale)
throws TranslationBundleLoadingException {
Class bundleClass = getClass(); Class bundleClass = getClass();
try { try {
resourceBundle = ResourceBundle.getBundle(bundleClass.getName(), locale); resourceBundle = ResourceBundle.getBundle(bundleClass.getName(),
locale, bundleClass.getClassLoader());
} catch (MissingResourceException e) { } catch (MissingResourceException e) {
throw new TranslationBundleLoadingException(bundleClass, locale, e); throw new TranslationBundleLoadingException(bundleClass, locale, e);
} }

Loading…
Cancel
Save