[
https://issues.apache.org/jira/browse/KNOX-3210?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18042210#comment-18042210
]
ASF subversion and git services commented on KNOX-3210:
-------------------------------------------------------
Commit fad4c0f77db993173b6f8e7a8b30ec9d7e68d706 in knox's branch
refs/heads/dependabot/maven/org.bouncycastle-bcpkix-jdk18on-1.79 from Sandor
Molnar
[ https://gitbox.apache.org/repos/asf?p=knox.git;h=fad4c0f77 ]
KNOX-3210 - Use a common function to set JDK17 properties across all scripts
(#1102)
> 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
> Priority: Critical
> Fix For: 3.0.0
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
> Run the following command in a JDK17 env:
> {code:java}
> $ bin/knoxcli.sh user-auth-test --cluster testTopology --u sam --p
> sam-password --g{code}
> The command fails:
> {code:java}
> $ bin/knoxcli.sh user-auth-test --cluster testTopology --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 testTopology --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)