Is it possible to run Wildfly 10 on JDK 17 LTS

6.8k Views Asked by At

We are using Wildfly 10.0.1 and planning to switch to JDK 17 LTS.

I've just installed a new JDK on my Mac and downloaded a clean version of Wildfly 10.0.1 (no deployments, no config changes, and so on).

When I try running Wildfly (./standalone.sh), I am getting the following error:

./standalone.sh
   WARNING:  JBOSS_HOME may be pointing to a different installation - unpredictable results may occur.
             JBOSS_HOME: /opt/wildfly_clean
=========================================================================
  JBoss Bootstrap Environment
  JBOSS_HOME: /opt/wildfly_clean
  JAVA: /Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home/bin/java
  JAVA_OPTS:  -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true
=========================================================================

Exception in thread "main" javax.xml.stream.FactoryConfigurationError: Provider com.sun.xml.internal.stream.XMLInputFactoryImpl could not be instantiated: java.lang.reflect.InvocationTargetException
    at java.xml/javax.xml.stream.FactoryFinder.newInstance(FactoryFinder.java:201)
    at java.xml/javax.xml.stream.FactoryFinder.newInstance(FactoryFinder.java:148)
    at java.xml/javax.xml.stream.FactoryFinder.find(FactoryFinder.java:326)
    at java.xml/javax.xml.stream.FactoryFinder.find(FactoryFinder.java:223)
    at java.xml/javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:166)
    at __redirected.__XMLInputFactory.<clinit>(__XMLInputFactory.java:66)
    at __redirected.__JAXPRedirected.initAll(__JAXPRedirected.java:77)
    at org.jboss.modules.Module$1.run(Module.java:132)
    at org.jboss.modules.Module$1.run(Module.java:119)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
    at org.jboss.modules.Module.<clinit>(Module.java:119)
    at org.jboss.modules.Main.main(Main.java:385)
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
    at java.xml/javax.xml.stream.FactoryFinder.newInstance(FactoryFinder.java:190)
    ... 11 more
Caused by: javax.xml.parsers.FactoryConfigurationError: Provider __redirected.__SAXParserFactory could not be instantiated: java.lang.reflect.InvocationTargetException
    at java.xml/javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:199)
    at java.xml/javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:147)
    at java.xml/javax.xml.parsers.FactoryFinder.find(FactoryFinder.java:227)
    at java.xml/javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:181)
    at java.xml/jdk.xml.internal.JdkXmlUtils.getSAXFactory(JdkXmlUtils.java:352)
    at java.xml/jdk.xml.internal.JdkXmlUtils.<clinit>(JdkXmlUtils.java:89)
    at java.xml/com.sun.org.apache.xerces.internal.impl.PropertyManager.initConfigurableReaderProperties(PropertyManager.java:144)
    at java.xml/com.sun.org.apache.xerces.internal.impl.PropertyManager.<init>(PropertyManager.java:78)
    at java.xml/com.sun.xml.internal.stream.XMLInputFactoryImpl.<init>(XMLInputFactoryImpl.java:51)
    ... 17 more
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
    at java.xml/javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:188)
    ... 25 more
Caused by: java.lang.IllegalAccessError: class __redirected.__SAXParserFactory cannot access class com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl (in module java.xml) because module java.xml does not export com.sun.org.apache.xerces.internal.jaxp to unnamed module @2b05039f
    at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:392)
    at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:674)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:489)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
    at __redirected.__SAXParserFactory.<init>(__SAXParserFactory.java:106)
    ... 31 more

There is not much information about it on iNet.

So, my question is what do the errors mean? Is it possible to do something (change JAVA_OPTS, etc) to run Wildfly successfully on JDK 17.

Is it possible at all to run Wildfly 10 on JDK 17?

Thank you.

2

There are 2 best solutions below

0
Panagiotis Bougioukos On

Try using the following configuration:

--add-opens java.xml/jdk.xml.internal=ALL-UNNAMED

Which opens this module for external access.

The reason for that, according to the JDK9 doc, is ...

Some tools and libraries use reflection to access parts of the JDK that are meant for internal use only. This illegal reflective access will be disabled in a future release of the JDK. In JDK 9, it is permitted by default and a warning is issued.

This has changed though with JEP 396 which was included in JDK 17 and was originaly delivered from JDK 16.

So from JDK 16 and onwards, all Java internals are by default strongly encapsulated, and no external access is allowed from reflection.

1
EasyRider On

Thank you guys for pointing me in the right direction.

I was able to run Wildfly 10 in JDK 17 LTS adding the following options to the starting shell script:

JAVA_OPTS="$JAVA_OPTS --add-opens java.xml/com.sun.org.apache.xerces.internal.jaxp=ALL-UNNAMED"

JAVA_OPTS="$JAVA_OPTS --add-opens java.base/java.lang=ALL-UNNAMED"

JAVA_OPTS="$JAVA_OPTS --add-opens=java.base/java.security=ALL-UNNAMED"

Here is the output from running the script:

./standalone.sh

WARNING:  JBOSS_HOME may be pointing to a different installation - unpredictable results may occur.

JBOSS_HOME: /opt/wildfly_clean

=========================================================================

  JBoss Bootstrap Environment

  JBOSS_HOME: /opt/wildfly_clean

  JAVA: /Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home/bin/java

  JAVA_OPTS:  -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true --add-opens java.xml/com.sun.org.apache.xerces.internal.jaxp=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED

=========================================================================

......
10:34:36,425 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 10.1.0.Final (WildFly Core 2.2.0.Final) started in 1339ms - Started 331 of 577 services (393 services are lazy, passive or on-demand)