Details
-
Bug
-
Resolution: Done
-
Major
-
None
-
18.0.1.Final, 23.0.1.Final
-
None
-
-
Undefined
Description
Upgrading a client application from Java 15 to Java 16 connecting to remote EJB on a WildFly server fails with this error:
2021-04-23 09:53:07,371 [THREAD ID=main] INFO org.wildfly.naming.client.Version:57 - WildFly Naming version 1.0.14.Final 2021-04-23 09:53:07,418 [THREAD ID=main] INFO org.wildfly.security.Version:55 - ELY00001: WildFly Elytron version 1.15.3.Final 2021-04-23 09:53:07,475 [THREAD ID=main] INFO org.xnio.Xnio:95 - XNIO version 3.8.4.Final 2021-04-23 09:53:07,488 [THREAD ID=main] INFO org.xnio.nio.NioXnio:58 - XNIO NIO Implementation Version 3.8.4.Final 2021-04-23 09:53:07,603 [THREAD ID=main] INFO org.jboss.threads.Version:52 - JBoss Threads version 2.4.0.Final 2021-04-23 09:53:07,628 [THREAD ID=main] INFO org.jboss.remoting3.EndpointImpl:99 - JBoss Remoting version 5.0.20.Final 2021-04-23 09:53:07,662 [THREAD ID=main] INFO org.jboss.ejb.client.EJBClient:51 - JBoss EJB Client version 4.0.39.Final java.lang.reflect.InaccessibleObjectException: Unable to make field private static final java.lang.reflect.Method jdk.proxy2.$Proxy5.m0 accessible: module jdk.proxy2 does not "opens jdk.proxy2" to unnamed module @24c22fe 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.Field.checkCanSetAccessible(Field.java:177) at java.base/java.lang.reflect.Field.setAccessible(Field.java:171) at org.jboss.ejb.client.EJBProxyInformation$1.doCompute(EJBProxyInformation.java:101) at org.jboss.ejb.client.EJBProxyInformation$1.computeValue(EJBProxyInformation.java:72) at org.jboss.ejb.client.EJBProxyInformation$1.computeValue(EJBProxyInformation.java:66) at java.base/java.lang.ClassValue.getFromHashMap(ClassValue.java:228) at java.base/java.lang.ClassValue.getFromBackup(ClassValue.java:210) at java.base/java.lang.ClassValue.get(ClassValue.java:116) at org.jboss.ejb.client.EJBProxyInformation.forViewType(EJBProxyInformation.java:242) at org.jboss.ejb.client.EJBLocator.getProxyInformation(EJBLocator.java:375) at org.jboss.ejb.client.EJBLocator.getProxyConstructor(EJBLocator.java:370) at org.jboss.ejb.client.EJBLocator.createProxyInstance(EJBLocator.java:387) at org.jboss.ejb.client.EJBClient.createProxy(EJBClient.java:161) at org.jboss.ejb.client.EJBRootContext.lookupNative(EJBRootContext.java:166) at org.wildfly.naming.client.AbstractContext.lookup(AbstractContext.java:84) at org.wildfly.naming.client.WildFlyRootContext.lookup(WildFlyRootContext.java:144) at java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409)
This seems related to JEP-396
- Code that uses reflection to access private fields of exported java.* APIs will no longer work by default. For example,
{{var ks = java.security.KeyStore.getInstance("jceks");
var f = ks.getClass().getDeclaredField("keyStoreSpi");
f.setAccessible(true);}}
will fail with an exception of the form
{{Exception in thread "main" java.lang.reflect.InaccessibleObjectException:
Unable to make field private java.security.KeyStoreSpi
java.security.KeyStore.keyStoreSpi accessible: module java.base does
not "opens java.security" to unnamed module @6e2c634b}}
I realize that WildFly does not support Java 16 yet