[ 
https://issues.apache.org/jira/browse/KNOX-3210?focusedWorklogId=989211&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-989211
 ]

ASF GitHub Bot logged work on KNOX-3210:
----------------------------------------

                Author: ASF GitHub Bot
            Created on: 28/Oct/25 09:58
            Start Date: 28/Oct/25 09:58
    Worklog Time Spent: 10m 
      Work Description: smolnar82 opened a new pull request, #1102:
URL: https://github.com/apache/knox/pull/1102

   [KNOX-3210](https://issues.apache.org/jira/browse/KNOX-3210) - 
user-auth-test KnoxCLI command isn't working on JDK17
   
   ## What changes were proposed in this pull request?
   
   Instead of declaring JDK17 specific JVM properties in different locations, I 
created a dedicated function (called `addJdk17Properties`) and ensured it's 
invoked wherever it's necessary. All these logic is removed from any other 
places now.
   The new function uses the broader set of configs which we previously had in 
`knox-functions.sh`, so that it will work in `knoxcli.sh` too.
   
   ## How was this patch tested?
   
   Tested in a rela cluster:
   - restarted Knox successfully
   - ran the `user-auth-test` KnoxCLI command:
   ```
   $ 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
   ```
   I added some dummy `-Dtest=smolnar` JCM arguments too in the new function 
and printed the generated `APP_JAVA_OPTS` to see if all scripts capture the new 
values.
   




Issue Time Tracking
-------------------

            Worklog Id:     (was: 989211)
    Remaining Estimate: 0h
            Time Spent: 10m

> 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: 10m
>  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)

Reply via email to