Changed behaviour of ResourceBundle#getBundle()
Gunnar Morling
gunnar at hibernate.org
Mon Dec 12 15:29:32 UTC 2016
Hi Alan,
I noticed the changed behaviour in the context of Bean Validation, but I
observe the same in an isolated test case. The bundle is not within
META-INF.
The following will print out the entry from "mybundle" in module "b",
although requesting the resource bundle from within "a":
mkdir -p sources/com.example.a/src/main/java/com/example/a/
mkdir -p sources/com.example.b/src/main/java/
mkdir -p sources/com.example.b/src/main/resources/
cat >
sources/com.example.a/src/main/java/com/example/a/ResourceBundleTest.java
<< EOF
package com.example.a;
public class ResourceBundleTest {
public static void main(String... args) {
String value =
java.util.ResourceBundle.getBundle("mybundle").getString("mykey");
System.out.println(value);
}
}
EOF
echo "module com.example.a { exports com.example.a; }" >
sources/com.example.a/src/main/java/module-info.java
echo "mykey=Hello World" >
sources/com.example.b/src/main/resources/mybundle.properties
echo "module com.example.b {}" >
sources/com.example.b/src/main/java/module-info.java
cd sources/com.example.a && javac -g -d ../../modules/com.example.a $(find
src/main/java -name "*.java") && cd ../..
cd sources/com.example.b && javac -g -d ../../modules/com.example.b $(find
src/main/java -name "*.java") && cp -r src/main/resources/*
../../modules/com.example.b && cd ../..
java --module-path modules --add-modules com.example.b -m
com.example.a/com.example.a.ResourceBundleTest
It seems to be related to the fact that the bundle is located in the
default package, because the expected exception is raised if the bundle is
located in a proper package.
--Gunnar
2016-12-12 14:54 GMT+01:00 Alan Bateman <Alan.Bateman at oracle.com>:
> On 12/12/2016 13:38, Gunnar Morling wrote:
>
> Hi,
>>
>> I'm about to update my blog post on Bean Validation and Jigsaw from a
>> while
>> ago [1] to the latest JDK 9 build.
>>
>> There is one behavioural change that made me curious:
>> ResourceBundle#getBundle() called from within named module "A" now (as of
>> b148) returns a bundle based on a properties file located in another named
>> module "B". "A" does not require "B" in it's module-info.java, nor does
>> "B"
>> export any packages at all. This was not the case when I originally tried
>> it (b122).
>>
> The latest JDK 9 does have the updated proposal for #ResourceEncapsulation
> and ResourceBundle has been updated to align with that proposal.
>
> You mention Bean Validation. Does this mean the properties file is in
> META-INF? If so then it will not be encapsulated because "META-INF" is not
> a legacl package name.
>
> -Alan
>
More information about the jigsaw-dev
mailing list