Index: api11/src/java/javax/jdo/spi/I18NHelper.java =================================================================== --- api11/src/java/javax/jdo/spi/I18NHelper.java (revision 307339) +++ api11/src/java/javax/jdo/spi/I18NHelper.java (working copy) @@ -236,7 +236,13 @@ if (messages == null) //not found as loaded - add { - messages = ResourceBundle.getBundle(bundleName, locale, loader); + if (loader != null) { + messages = ResourceBundle.getBundle(bundleName, locale, loader); + } else { + // the JDO library is loaded by the boostrap class loader + messages = ResourceBundle.getBundle(bundleName, locale, + getSystemClassLoaderPrivileged()); + } bundles.put(bundleName, messages); } return messages; @@ -375,4 +381,18 @@ final int index = className.lastIndexOf('.'); return ((index != -1) ? className.substring(0, index) : ""); // NOI18N } + + /** + * Get the system class loader. This must be done in a doPrivileged + * block because of security. + */ + private static ClassLoader getSystemClassLoaderPrivileged() { + return (ClassLoader) AccessController.doPrivileged ( + new PrivilegedAction () { + public Object run () { + return ClassLoader.getSystemClassLoader(); + } + } + ); + } } Index: api20/src/java/javax/jdo/spi/I18NHelper.java =================================================================== --- api20/src/java/javax/jdo/spi/I18NHelper.java (revision 307339) +++ api20/src/java/javax/jdo/spi/I18NHelper.java (working copy) @@ -236,7 +236,13 @@ if (messages == null) //not found as loaded - add { - messages = ResourceBundle.getBundle(bundleName, locale, loader); + if (loader != null) { + messages = ResourceBundle.getBundle(bundleName, locale, loader); + } else { + // the JDO library is loaded by the boostrap class loader + messages = ResourceBundle.getBundle(bundleName, locale, + getSystemClassLoaderPrivileged()); + } bundles.put(bundleName, messages); } return messages; @@ -375,4 +381,18 @@ final int index = className.lastIndexOf('.'); return ((index != -1) ? className.substring(0, index) : ""); // NOI18N } + + /** + * Get the system class loader. This must be done in a doPrivileged + * block because of security. + */ + private static ClassLoader getSystemClassLoaderPrivileged() { + return (ClassLoader) AccessController.doPrivileged ( + new PrivilegedAction () { + public Object run () { + return ClassLoader.getSystemClassLoader(); + } + } + ); + } }