<Beans Dev> [9] Review Request: 8146313 The java.beans.Statement.invoke() method handles 3-arg Class.forName incorrectly

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Thu Apr 28 12:21:57 UTC 2016

On 27.04.16 10:12, Semyon Sadetsky wrote:
>> Yes it does not work for primitives, it not treated as some special
>> method(like 1-args), it call 3-args Class.forName(which do not support
>> the primitives) directly like any other methods.
> What will happen if the 3-args is called with a primitive?

Same as Class.forName(): "java.lang.ClassNotFoundException: int"

>>>>> On 4/22/2016 7:20 PM, Sergey Bylokhov wrote:
>>>>>> Hello.
>>>>>> Please review the fix for jdk9(the fix was discussed offline
>>>>>> already).
>>>>>> The Statement class can execute the methods and pass some parameters
>>>>>> for them. It can be used to store the statement(method
>>>>>> call+parameter)
>>>>>> in xml and load it when necessary. This class has special case for
>>>>>> Class.forName() because it provides some additional features(for
>>>>>> example it uses a different class loaders and supports primitive
>>>>>> types). But it does not take into account that there is the second
>>>>>> 3-args forName() method. It was fixed in the change.
>>>>>> 3-args forName() method is considered as a usual method which will be
>>>>>> executed for provided class+classloadder. The additional check for
>>>>>> package access is added. Note that I added a code to always clone the
>>>>>> list of arguments just as an additional safeness for the future
>>>>>> changes.
>>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8146313
>>>>>> Webrev can be found at:
>>>>>> http://cr.openjdk.java.net/~serb/8146313/webrev.03

Best regards, Sergey.

More information about the beans-dev mailing list