Sandor Molnar created KNOX-3210:
-----------------------------------
Summary: user-auth-test KnoxCLI command isn't working on JDK17
Key: KNOX-3210
URL: https://issues.apache.org/jira/browse/KNOX-3210
Project: Apache Knox
Issue Type: Task
Components: KnoxCLI
Affects Versions: 3.0.0
Reporter: Sandor Molnar
Assignee: Sandor Molnar
Fix For: 3.0.0
Run the following command in a JDK17 env:
# bin/knoxcli.sh user-auth-test --cluster testTopology --u sam --p
sam-password --g
#
The command fails:
{code:java}
# /opt/cloudera/parcels/CDH/lib/knox/bin/knoxcli.sh user-auth-test --cluster
webhdfs_descriptor --u sam --p sam-password --g
Java version is 17. Adding properties to enable Knox to run on JDK 17
SEVERE: null
java.security.PrivilegedActionException: java.lang.NoSuchMethodException:
sun.misc.Unsafe.defineClass(java.lang.String,[B,int,int,java.lang.ClassLoader,java.security.ProtectionDomain)
at
java.base/java.security.AccessController.doPrivileged(AccessController.java:573)
at
com.sun.xml.bind.v2.runtime.reflect.opt.Injector.<clinit>(Injector.java:197)
at
com.sun.xml.bind.v2.runtime.reflect.opt.AccessorInjector.prepare(AccessorInjector.java:81)
at
com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:125)
at
com.sun.xml.bind.v2.runtime.reflect.Accessor$GetterSetterReflection.optimize(Accessor.java:402)
at
com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.<init>(SingleElementNodeProperty.java:94)
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
com.sun.xml.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:128)
at
com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:181)
at
com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:514)
at
com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:331)
at
com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:139)
at
com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1156)
at
com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:165)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:251)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:240)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:363)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:691)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:632)
at
org.apache.knox.gateway.util.ServiceDefinitionsLoader.getJAXBContext(ServiceDefinitionsLoader.java:61)
at
org.apache.knox.gateway.util.ServiceDefinitionsLoader.<clinit>(ServiceDefinitionsLoader.java:51)
at
org.apache.knox.gateway.deploy.DeploymentFactory.loadStacksServiceContributors(DeploymentFactory.java:704)
at
org.apache.knox.gateway.deploy.DeploymentFactory.createDeployment(DeploymentFactory.java:171)
at
org.apache.knox.gateway.util.KnoxCLI$LDAPCommand.getConfig(KnoxCLI.java:1812)
at
org.apache.knox.gateway.util.KnoxCLI$LDAPAuthCommand.execute(KnoxCLI.java:1884)
at org.apache.knox.gateway.util.KnoxCLI.run(KnoxCLI.java:190)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:82)
at org.apache.knox.gateway.util.KnoxCLI.main(KnoxCLI.java:2619)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at
org.apache.knox.gateway.launcher.Invoker.invokeMainMethod(Invoker.java:68)
at org.apache.knox.gateway.launcher.Invoker.invoke(Invoker.java:39)
at org.apache.knox.gateway.launcher.Command.run(Command.java:103)
at org.apache.knox.gateway.launcher.Launcher.run(Launcher.java:75)
at org.apache.knox.gateway.launcher.Launcher.main(Launcher.java:52)
Caused by: java.lang.NoSuchMethodException:
sun.misc.Unsafe.defineClass(java.lang.String,[B,int,int,java.lang.ClassLoader,java.security.ProtectionDomain)
at java.base/java.lang.Class.getMethod(Class.java:2227)
at
com.sun.xml.bind.v2.runtime.reflect.opt.Injector$3.run(Injector.java:201)
at
com.sun.xml.bind.v2.runtime.reflect.opt.Injector$3.run(Injector.java:197)
at
java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
... 44 more
Exception in thread "main" java.lang.reflect.InvocationTargetException
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at
org.apache.knox.gateway.launcher.Invoker.invokeMainMethod(Invoker.java:68)
at org.apache.knox.gateway.launcher.Invoker.invoke(Invoker.java:39)
at org.apache.knox.gateway.launcher.Command.run(Command.java:103)
at org.apache.knox.gateway.launcher.Launcher.run(Launcher.java:75)
at org.apache.knox.gateway.launcher.Launcher.main(Launcher.java:52)
Caused by: java.lang.ExceptionInInitializerError
at
org.apache.knox.gateway.deploy.DeploymentFactory.loadStacksServiceContributors(DeploymentFactory.java:704)
at
org.apache.knox.gateway.deploy.DeploymentFactory.createDeployment(DeploymentFactory.java:171)
at
org.apache.knox.gateway.util.KnoxCLI$LDAPCommand.getConfig(KnoxCLI.java:1812)
at
org.apache.knox.gateway.util.KnoxCLI$LDAPAuthCommand.execute(KnoxCLI.java:1884)
at org.apache.knox.gateway.util.KnoxCLI.run(KnoxCLI.java:190)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:82)
at org.apache.knox.gateway.util.KnoxCLI.main(KnoxCLI.java:2619)
... 9 more
Caused by: java.lang.NullPointerException: Cannot invoke
"java.lang.reflect.Method.invoke(Object, Object[])" because
"com.sun.xml.bind.v2.runtime.reflect.opt.Injector.defineClass" is null
at
com.sun.xml.bind.v2.runtime.reflect.opt.Injector.inject(Injector.java:311)
at
com.sun.xml.bind.v2.runtime.reflect.opt.Injector.inject(Injector.java:97)
at
com.sun.xml.bind.v2.runtime.reflect.opt.AccessorInjector.prepare(AccessorInjector.java:87)
at
com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:125)
at
com.sun.xml.bind.v2.runtime.reflect.Accessor$GetterSetterReflection.optimize(Accessor.java:402)
at
com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.<init>(SingleElementNodeProperty.java:94)
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
com.sun.xml.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:128)
at
com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:181)
at
com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:514)
at
com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:331)
at
com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:139)
at
com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1156)
at
com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:165)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:251)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:240)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:363)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:691)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:632)
at
org.apache.knox.gateway.util.ServiceDefinitionsLoader.getJAXBContext(ServiceDefinitionsLoader.java:61)
at
org.apache.knox.gateway.util.ServiceDefinitionsLoader.<clinit>(ServiceDefinitionsLoader.java:51)
... 16 more {code}
The reason is, that prior changes to the custom JDK17 properties in
{{knox-functions.sh}} were not added to {{knoxcli.sh:}}
{code:java}
knoxcli:
addAppJavaOpts " --add-exports java.base/sun.security.x509=ALL-UNNAMED
--add-exports java.base/sun.security.pkcs=ALL-UNNAMED --add-exports
java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens
java.base/sun.security.util=ALL-UNNAMED"
knox-functions:
addAppJavaOpts " --add-exports java.base/sun.security.x509=ALL-UNNAMED
--add-exports java.base/sun.security.pkcs=ALL-UNNAMED --add-exports
java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens
java.base/sun.security.util=ALL-UNNAMED --add-exports
java.base/jdk.internal.misc=ALL-UNNAMED
--add-opens=java.base/java.lang=ALL-UNNAMED --add-exports
java.base/sun.net.util=ALL-UNNAMED --add-exports
java.base/sun.net.dns=ALL-UNNAMED"{code}
Once I updated the knoxcli.sh script with the broader set of properties, it was
working like a charm:
{code:java}
$ bin/knoxcli.sh user-auth-test --cluster webhdfs_descriptor --u sam --p
sam-password --g
Java version is 17. Adding properties to enable Knox to run on JDK 17
LDAP authentication successful!
sam is a member of: scientist
sam is a member of: analyst{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)