Proxy classes and reflection (IllegalAccessException)

Stephane Epardaud stef at epardaud.fr
Thu Apr 7 13:02:28 UTC 2016


No, you have to add a read to the module of the class you're proxying, 
not com.sun.proxy. That'd be your application's module.

On 07/04/16 14:25, Neil Bartlett wrote:
> Stephane, I don’t think that would help since the package is not exported: "module jdk.proxy2 does not export com.sun.proxy.jdk.proxy2”.
>
> Regards,
> Neil
>
>> On 7 Apr 2016, at 13:13, Stephane Epardaud <stef at epardaud.fr> wrote:
>>
>> IIRC RestEasy needs to add a module read to that Class's module it wants to create a Proxy of.
>>
>> On 07/04/16 14:05, Alan Bateman wrote:
>>> On 07/04/2016 12:39, Dawid Weiss wrote:
>>>> I don't want to hijack the other thread, so here's a new one I'm stuck
>>>> with. I get this exception (simplified stack trace a bit):
>>>>
>>>> Caused by: java.lang.IllegalAccessException: class
>>>> org.jboss.resteasy.core.ContextParameterInjector cannot access class
>>>> com.sun.proxy.jdk.proxy2.$Proxy65 (in module jdk.proxy2) because
>>>> module jdk.proxy2 does not export com.sun.proxy.jdk.proxy2 to unnamed
>>>> module @79ca92b9
>>>> at sun.reflect.Reflection.throwIllegalAccessException(java.base at 9-ea/Reflection.java:411)
>>>> at sun.reflect.Reflection.throwIllegalAccessException(java.base at 9-ea/Reflection.java:402)
>>>> at sun.reflect.Reflection.ensureMemberAccess(java.base at 9-ea/Reflection.java:99)
>>>> at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(java.base at 9-ea/AccessibleObject.java:355)
>>>> at java.lang.reflect.AccessibleObject.checkAccess(java.base at 9-ea/AccessibleObject.java:347)
>>>> at java.lang.reflect.Constructor.newInstance(java.base at 9-ea/Constructor.java:444)
>>>> at org.jboss.resteasy.core.ContextParameterInjector.createProxy(ContextParameterInjector.java:94)
>>>> ... 53 more
>>>>
>>>> I think RestEasy attempts to do create a new instance of a proxy class
>>>> here (the complete process here eludes my understanding for now). Any
>>>> clues how this can be solved?
>>> I assume it should be using newProxyInstance rather that trying to instantiate the proxy class directly. The reason it can't instantiate it directly is because it has been generated into a "dynamic module" (jdk.proxy2 in this case). I assume you'll find that the proxy was created with an interface that is not in an exported package.
>>>
>>> The "Package and Module Membership of Proxy Class" and "Dynamic Modules" sections of the Proxy javadoc [1] has all the details.
>>>
>>> -Alan.
>>>
>>> [1] http://download.java.net/java/jdk9/docs/api/java/lang/reflect/Proxy.html
>>>
>>>



More information about the jigsaw-dev mailing list