You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltaspike.apache.org by "Christian Beikov (Jira)" <ji...@apache.org> on 2021/05/17 00:03:00 UTC
[jira] [Updated] (DELTASPIKE-1432) Proxy class definition does not
work
[ https://issues.apache.org/jira/browse/DELTASPIKE-1432?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Christian Beikov updated DELTASPIKE-1432:
-----------------------------------------
Description:
In {{org.apache.deltaspike.proxy.impl.AsmDeltaSpikeProxyClassGenerator#loadClass}} the current implementation always tries to make the {{ClassLoader#defineClass}} method (of module java.base) accessible which is disallowed by default since 16. To workaround this, one has to add the following command line flags {{--add-opens java.base/java.lang=ALL-UNNAMED}}. This can be properly implemented though by using the new supported API {{java.lang.invoke.MethodHandles.Lookup#defineClass}} like Weld 3.1.7 now also did. This would help usability of Deltaspike a lot.
Here is the exception one sees without the flag:
{code}
java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to module deltaspike.proxy.module.impl.asm
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
at deltaspike.proxy.module.impl.asm@1.9.4/org.apache.deltaspike.proxy.impl.AsmDeltaSpikeProxyClassGenerator.loadClass(AsmDeltaSpikeProxyClassGenerator.java:528)
at deltaspike.proxy.module.impl.asm@1.9.4/org.apache.deltaspike.proxy.impl.AsmDeltaSpikeProxyClassGenerator.generateProxyClass(AsmDeltaSpikeProxyClassGenerator.java:73)
{code}
was:
In {{org.apache.deltaspike.proxy.impl.AsmDeltaSpikeProxyClassGenerator#loadClass}} the current implementation always tries to make the {{ClassLoader#defineClass}} method (of module java.base) accessible which is disallowed by default since 16. To workaround this, one has to add the following command line flags {{--add-opens java.base/java.lang=ALL-UNNAMED}}. This can be properly implemented though by using the new supported API {{java.lang.invoke.MethodHandles.Lookup#defineClass}} like Weld 3.1.7 now also did. This would help usability of Deltaspike a lot.
Here is the exception one sees without the flag:
{code}
Suppressed: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to module deltaspike.proxy.module.impl.asmSuppressed: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to module deltaspike.proxy.module.impl.asm at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357) at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199) at java.base/java.lang.reflect.Method.setAccessible(Method.java:193) at deltaspike.proxy.module.impl.asm@1.9.4/org.apache.deltaspike.proxy.impl.AsmDeltaSpikeProxyClassGenerator.loadClass(AsmDeltaSpikeProxyClassGenerator.java:528) at deltaspike.proxy.module.impl.asm@1.9.4/org.apache.deltaspike.proxy.impl.AsmDeltaSpikeProxyClassGenerator.generateProxyClass(AsmDeltaSpikeProxyClassGenerator.java:73) at deltaspike.proxy.module.api@1.9.4/org.apache.deltaspike.proxy.api.DeltaSpikeProxyFactory.createProxyClass(DeltaSpikeProxyFactory.java:89)
{code}
> Proxy class definition does not work
> ------------------------------------
>
> Key: DELTASPIKE-1432
> URL: https://issues.apache.org/jira/browse/DELTASPIKE-1432
> Project: DeltaSpike
> Issue Type: Improvement
> Security Level: public(Regular issues)
> Components: Proxy-Module
> Affects Versions: 1.9.5
> Reporter: Christian Beikov
> Priority: Major
>
> In {{org.apache.deltaspike.proxy.impl.AsmDeltaSpikeProxyClassGenerator#loadClass}} the current implementation always tries to make the {{ClassLoader#defineClass}} method (of module java.base) accessible which is disallowed by default since 16. To workaround this, one has to add the following command line flags {{--add-opens java.base/java.lang=ALL-UNNAMED}}. This can be properly implemented though by using the new supported API {{java.lang.invoke.MethodHandles.Lookup#defineClass}} like Weld 3.1.7 now also did. This would help usability of Deltaspike a lot.
> Here is the exception one sees without the flag:
>
> {code}
> java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to module deltaspike.proxy.module.impl.asm
> at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357)
> at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
> at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
> at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
> at deltaspike.proxy.module.impl.asm@1.9.4/org.apache.deltaspike.proxy.impl.AsmDeltaSpikeProxyClassGenerator.loadClass(AsmDeltaSpikeProxyClassGenerator.java:528)
> at deltaspike.proxy.module.impl.asm@1.9.4/org.apache.deltaspike.proxy.impl.AsmDeltaSpikeProxyClassGenerator.generateProxyClass(AsmDeltaSpikeProxyClassGenerator.java:73)
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)