IllegalAccessException trying to load a ResourceBundle in 9u181
mandy chung
mandy.chung at oracle.com
Tue Feb 13 00:44:41 UTC 2018
On 2/12/18 12:36 PM, Vitaly Davidovich wrote:
> Hi all,
>
> I'm not sure if core-libs is the right mailing list for jigsaw/modules
> questions these days (rather than jigsaw-dev), so please feel free to
> forward this there if it's the more appropriate list.
cc'ing jigsaw-dev
> I have the following code carried over from java 8 (actually much earlier
> than that, but that's beside the point):
> final Resource rb =
> ResourceBundle.getBundle("sun.security.util.AuthResources");
Resource bundle follows the same encapsulation rule as described in
Module::getResourceAsStream [1] except that a resource bundle is
considered as a resource regardless of its format.
ResourceBundle.getBundle(String baseName) finds the specified resource
bundle from the caller's module. It will first search the resource
bundle local in the caller's module (via Module::getResourceAsStream)
and then using the caller's class loader to search for the resource (via
ClassLoader::getResourceAsStream). Since the caller is unnamed module
in your case, for it to access "sun.security.util.AuthResources",
java.base/sun.security.util has to be open unconditionally and there is
no CLI option to do that.
If you call ResourceBundle.getBundle("sun.security.util.AuthResources",
Object.class.getModule()) specifying the module of the resource bundle,
then you can break the encapsulation by `--add-opens
java.base/sun.security.util=ALL-UNNAMED`
I'm a bit surprised that you depend on JDK internal resource bundle.
Can you help us understand why you use it?
Mandy
[1]
https://download.java.net/java/jdk10/docs/api/java/util/ResourceBundle.html#getBundle(java.lang.String,java.util.Locale,java.lang.Module)
More information about the jigsaw-dev
mailing list