java.lang.reflect.InaccessibleObjectException

Must-share information (formatted with Markdown):

It’s also reported on SO here node.js - Docker Sonarqube scanner error java.lang.reflect.InaccessibleObjectException - Stack Overflow

See this log:

07:49:48.173 INFO  ------------- Run sensors on module application-ui
07:49:48.247 INFO  Load metrics repository
07:49:49.028 INFO  Load metrics repository (done) | time=781ms
07:49:49.506 INFO  EXECUTION FAILURE
07:49:49.507 INFO  Total time: 2:02.493s
07:49:49.507 ERROR Error during SonarScanner CLI execution
java.lang.IllegalStateException: Unable to load component class org.sonar.plugins.javascript.JavaScriptSensor
        at org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:66)
        at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:632)
        at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
        at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
        at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
        at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
        at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
        at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
        at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
        at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
        at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
        at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
        at org.picocontainer.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:606)
        at org.picocontainer.DefaultPicoContainer.getComponents(DefaultPicoContainer.java:587)
        at org.sonar.core.platform.ComponentContainer.getComponentsByType(ComponentContainer.java:291)
        at org.sonar.scanner.bootstrap.AbstractExtensionDictionnary.completeScannerExtensions(AbstractExtensionDictionnary.java:82)
        at org.sonar.scanner.bootstrap.AbstractExtensionDictionnary.getExtensions(AbstractExtensionDictionnary.java:77)
        at org.sonar.scanner.bootstrap.AbstractExtensionDictionnary.getFilteredExtensions(AbstractExtensionDictionnary.java:67)
        at org.sonar.scanner.sensor.ModuleSensorExtensionDictionnary.selectSensors(ModuleSensorExtensionDictionnary.java:40)
        at org.sonar.scanner.sensor.ModuleSensorsExecutor.lambda$execute$0(ModuleSensorsExecutor.java:52)
        at org.sonar.scanner.sensor.ModuleSensorsExecutor.withModuleStrategy(ModuleSensorsExecutor.java:77)
        at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:52)
        at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:82)
        at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:137)
        at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:123)
        at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:388)
        at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:384)
        at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:353)
        at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:137)
        at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:123)
        at org.sonar.scanner.bootstrap.GlobalContainer.doAfterStart(GlobalContainer.java:144)
        at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:137)
        at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:123)
        at org.sonar.batch.bootstrapper.Batch.doExecute(Batch.java:72)
        at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:66)
        at org.sonarsource.scanner.lib.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:41)
        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:569)
        at org.sonarsource.scanner.lib.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:62)
        at jdk.proxy3/jdk.proxy3.$Proxy2.execute(Unknown Source)
        at org.sonarsource.scanner.lib.InProcessScannerEngineFacade.doAnalyze(InProcessScannerEngineFacade.java:39)
        at org.sonarsource.scanner.lib.ScannerEngineFacade.analyze(ScannerEngineFacade.java:61)
        at org.sonarsource.scanner.cli.Main.analyze(Main.java:77)
        at org.sonarsource.scanner.cli.Main.main(Main.java:63)
Caused by: java.lang.ExceptionInInitializerError: null
        at com.sonar.sslr.api.typed.ActionParser.<init>(ActionParser.java:59)
        at org.sonar.javascript.parser.JavaScriptParser.<init>(JavaScriptParser.java:33)
        at org.sonar.javascript.parser.JavaScriptParserBuilder.createParser(JavaScriptParserBuilder.java:31)
        at org.sonar.plugins.javascript.JavaScriptSensor.<init>(JavaScriptSensor.java:115)
        at org.sonar.plugins.javascript.JavaScriptSensor.<init>(JavaScriptSensor.java:85)
        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:500)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
        at org.picocontainer.injectors.AbstractInjector.newInstance(AbstractInjector.java:145)
        at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:342)
        at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
        at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
        at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
        at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
        at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
        at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:699)
        at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:647)
        at org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:64)
        ... 45 common frames omitted
Caused by: net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InaccessibleObjectException-->Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @54e43bfe
        at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:464)
        at net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:336)
        at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:93)
        at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:91)
        at net.sf.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at net.sf.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61)
        at net.sf.cglib.core.internal.LoadingCache.get(LoadingCache.java:34)
        at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:116)
        at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:291)
        at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:221)
        at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:174)
        at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:153)
        at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:73)
        ... 65 common frames omitted
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @54e43bfe
        at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
        at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
        at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:200)
        at java.base/java.lang.reflect.Method.setAccessible(Method.java:194)
        at net.sf.cglib.core.ReflectUtils$1.run(ReflectUtils.java:61)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
        at net.sf.cglib.core.ReflectUtils.<clinit>(ReflectUtils.java:52)
        at net.sf.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:243)
        at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
        at net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:329)
        ... 77 common frames omitted

I see that you use cglib at Java 17.

I saw this at cglib/cglib: cglib - Byte Code Generation Library is high level API to generate and transform Java byte code. It is used by AOP, testing, data access frameworks to generate dynamic proxy objects and intercept field access. (github.com)

" IMPORTANT NOTE: cglib is unmaintained and does not work well (or possibly at all?) in newer JDKs, particularly JDK17+. If you need to support newer JDKs, we will accept well-tested well-thought-out patches… but you’ll probably have better luck migrating to something like ByteBuddy."

I guess, you have to switch to bytebuddy

Hi,

Welcome to the community!

Can you share the full analysis log, starting from the analysis command itself. I’d like a better idea of where in the process the error happens.

 
Thx,
Ann

This is how I repro this issue:

  1. Insert trust store of my JVM with the cert of ‘eng’ domain where sonar is hosted
  2. Run this export SONAR_SCANNER_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"
  3. Run this export SONARQUBE_SCANNER_PARAMS='{ "sonar.host.url" : "https://eng/sonar/", "sonar.login" : "blahblah", "sonar.scanner.truststorePath":"/tmp/eng.cacerts", "sonar. scanner.truststorePassword": "changeit"}'
  4. Run this inside my project: /tmp/sonar-scanner-6.2.1.4610-linux-x64/bin/sonar-scanner

Sorry, I couldn’t attach my code in zip file as your system rejected it. I’m using my other account

Hi,

Please post your full anlaysis log.

The analysis / scanner log is what’s output from the analysis command. Hopefully, the log you provide - redacted as necessary - will include that command as well.

This guide will help you find them.

 
Thx,
Ann

Here’s the full log
full.log (22.4 KB)

The source is here
application-ui-stripped.zip (348.7 KB)

Hi,

This log doesn’t match your initial report. There’s no IllegalStateException anywhere in there.

 
Ann

One of my posts got flagged. I don’t know why.

Here’s the removed post:

Strangely, your Maven dependency tree shows no cglib.

Regardless, adding export SONAR_SCANNER_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED" helped me to progress further (not yet succeed)

I’m facing new issue TypeError: hostOrText.readFile is not a function

Hi,

I see this in your log:

06:12:05.937 INFO Using TypeScript at: '/home/muhammad.ichsan/coding/ts/code/application-ui/apps/app-admin/node_modules'

What version of TypeScript is that?

 
Thx,
Ann

I have provided the stripped project. You can see it all there

Hi,

Actually, I can’t:

 
Ann

Could you check the package.json file? node_modules is just a directory created based on package.json I believe

The snippet content is this on that line:

function readJsonOrUndefined(path, hostOrText) {
  const jsonText = isString(hostOrText) ? hostOrText : hostOrText.readFile(path);
  if (!jsonText) return void 0;
  const result = parseConfigFileTextToJson(path, jsonText);
  return !result.error ? result.config : void 0;
}

Hi,

Could you just tell me what version of TypeScript that is?

 
Thx,
Ann

Based on the log file, it’s typescript@5.6.3

Hi,

Let’s back up to your CI environment. I suspect something is seriously off about it. First, you should not need to do this:

Second, the error you’ve moved on to seems to be a problem with TypeScript

Third, I find this part of your analysis log very strange, and it’s not clear why indexing would be stalled on the same file for so long:

06:10:16.401 INFO  80 files indexed...  (last one was apps/app-core/package.json)
06:10:26.401 INFO  80 files indexed...  (last one was apps/app-core/package.json)
06:10:36.402 INFO  80 files indexed...  (last one was apps/app-core/package.json)
06:10:46.403 INFO  80 files indexed...  (last one was apps/app-core/package.json)
06:10:56.404 INFO  80 files indexed...  (last one was apps/app-core/package.json)
06:11:06.404 INFO  80 files indexed...  (last one was apps/app-core/package.json)
06:11:16.406 INFO  80 files indexed...  (last one was apps/app-core/package.json)

And again here:

06:11:36.407 INFO  182 files indexed...  (last one was apps/app-search/package.json)
06:11:46.408 INFO  182 files indexed...  (last one was apps/app-search/package.json)

So… what exactly do you mean when you say

?

 
Ann

Have you tried to run the same scanner (on the same java) on my stripped project I gave you?

I meant, the issue happened when using a scanner of that particular version. I also tried your Docker version so that I don’t have to blame my environment (e.g. my Java version, etc). The same issue happened there (at Docker) too

Upon debugging your latest scanner, I found that the Javascript plugin still makes use of cglib. Please see the snippet from my InteliJ

image

FYI. CGLIB is not compatible with Java 17

Hence, I used --add-opens java.base/java.lang=ALL-UNNAMED to get away from this issue

Hi,

What version of SonarQube are you using?

 
Thx,
Ann