GenericSignatureFormatError when using JDK 17 and Groovy
See original GitHub issueDescription
[NOTE]: When using New Relic Agent with JDK 17 and groovy, it raises GenericSignatureFormatError at startup.
Expected Behavior
[NOTE]: Not to throw the exception
Troubleshooting or NR Diag results
Im attaching a simple repro, created from scratch using spring initilizr.
Steps to Reproduce
Download NR agent 7.4.0
$ cat run.sh ./gradlew build wget -O newrelic-agent-7.4.0.jar https://repo1.maven.org/maven2/com/newrelic/agent/java/newrelic-agent/7.4.0/newrelic-agent-7.4.0.jar NEW_RELIC_APP_NAME=‘Name’ NEW_RELIC_LICENSE_KEY=‘’ java -javaagent:newrelic-agent-7.4.0.jar -jar build/libs/demo-0.0.1-SNAPSHOT.jar $ edit run.sh to add a new relic license key $ run.sh
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'b' defined in URL [jar:file:/home/becho/Downloads/demo/build/libs/demo-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/com/example/demo/B.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.example.demo.B]: Constructor threw exception; nested exception is java.lang.reflect.GenericSignatureFormatError: Signature Parse error: expected a class type Remaining input: java/util/concurrent/CompletableFuture at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1334) ~[spring-beans-5.3.12.jar!/:5.3.12] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1232) ~[spring-beans-5.3.12.jar!/:5.3.12] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.12.jar!/:5.3.12] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.12.jar!/:5.3.12] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.12.jar!/:5.3.12] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.12.jar!/:5.3.12] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.12.jar!/:5.3.12] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.12.jar!/:5.3.12] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.12.jar!/:5.3.12] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.12.jar!/:5.3.12] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.12.jar!/:5.3.12] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-2.5.6.jar!/:2.5.6] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-2.5.6.jar!/:2.5.6] at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) ~[spring-boot-2.5.6.jar!/:2.5.6] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-2.5.6.jar!/:2.5.6] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[spring-boot-2.5.6.jar!/:2.5.6] at org.springframework.boot.SpringApplication$run.call(Unknown Source) ~[na:na] at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47) ~[groovy-3.0.9.jar!/:3.0.9] at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) ~[groovy-3.0.9.jar!/:3.0.9] at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:148) ~[groovy-3.0.9.jar!/:3.0.9] at com.example.demo.DemoApplication.main(DemoApplication.groovy:28) ~[classes!/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) ~[demo-0.0.1-SNAPSHOT.jar:na] at org.springframework.boot.loader.Launcher.launch(Launcher.java:108) ~[demo-0.0.1-SNAPSHOT.jar:na] at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) ~[demo-0.0.1-SNAPSHOT.jar:na] at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88) ~[demo-0.0.1-SNAPSHOT.jar:na] Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.example.demo.B]: Constructor threw exception; nested exception is java.lang.reflect.GenericSignatureFormatError: Signature Parse error: expected a class type Remaining input: java/util/concurrent/CompletableFuture at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:224) ~[spring-beans-5.3.12.jar!/:5.3.12] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87) ~[spring-beans-5.3.12.jar!/:5.3.12] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1326) ~[spring-beans-5.3.12.jar!/:5.3.12] ... 28 common frames omitted Caused by: java.lang.reflect.GenericSignatureFormatError: Signature Parse error: expected a class type Remaining input: java/util/concurrent/CompletableFuture at java.base/sun.reflect.generics.parser.SignatureParser.error(SignatureParser.java:124) ~[na:na] at java.base/sun.reflect.generics.parser.SignatureParser.parseClassTypeSignature(SignatureParser.java:301) ~[na:na] at java.base/sun.reflect.generics.parser.SignatureParser.parseClassSignature(SignatureParser.java:213) ~[na:na] at java.base/sun.reflect.generics.parser.SignatureParser.parseClassSig(SignatureParser.java:156) ~[na:na] at java.base/sun.reflect.generics.repository.ClassRepository.parse(ClassRepository.java:57) ~[na:na] at java.base/sun.reflect.generics.repository.ClassRepository.parse(ClassRepository.java:41) ~[na:na] at java.base/sun.reflect.generics.repository.AbstractRepository.<init>(AbstractRepository.java:74) ~[na:na] at java.base/sun.reflect.generics.repository.GenericDeclRepository.<init>(GenericDeclRepository.java:49) ~[na:na] at java.base/sun.reflect.generics.repository.ClassRepository.<init>(ClassRepository.java:53) ~[na:na] at java.base/sun.reflect.generics.repository.ClassRepository.make(ClassRepository.java:70) ~[na:na] at java.base/java.lang.Class.getGenericInfo(Class.java:3263) ~[na:na] at java.base/java.lang.Class.getTypeParameters(Class.java:962) ~[na:na] at java.base/sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(ParameterizedTypeImpl.java:56) ~[na:na] at java.base/sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(ParameterizedTypeImpl.java:52) ~[na:na] at java.base/sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(ParameterizedTypeImpl.java:100) ~[na:na] at java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(CoreReflectionFactory.java:105) ~[na:na] at java.base/sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:140) ~[na:na] at java.base/sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49) ~[na:na] at java.base/sun.reflect.generics.repository.MethodRepository.computeReturnType(MethodRepository.java:75) ~[na:na] at java.base/sun.reflect.generics.repository.MethodRepository.getReturnType(MethodRepository.java:66) ~[na:na] at java.base/java.lang.reflect.Method.getGenericReturnType(Method.java:295) ~[na:na] at java.base/java.lang.reflect.Method.specificToGenericStringHeader(Method.java:488) ~[na:na] at java.base/java.lang.reflect.Executable.sharedToGenericString(Executable.java:161) ~[na:na] at java.base/java.lang.reflect.Method.toGenericString(Method.java:483) ~[na:na] at java.desktop/java.beans.MethodRef.set(MethodRef.java:46) ~[na:na] at java.desktop/java.beans.MethodDescriptor.setMethod(MethodDescriptor.java:119) ~[na:na] at java.desktop/java.beans.MethodDescriptor.<init>(MethodDescriptor.java:74) ~[na:na] at java.desktop/java.beans.MethodDescriptor.<init>(MethodDescriptor.java:58) ~[na:na] at java.desktop/java.beans.Introspector.getTargetMethodInfo(Introspector.java:1030) ~[na:na] at java.desktop/java.beans.Introspector.getBeanInfo(Introspector.java:446) ~[na:na] at java.desktop/java.beans.Introspector.getBeanInfo(Introspector.java:195) ~[na:na] at groovy.lang.MetaClassImpl.lambda$addProperties$8(MetaClassImpl.java:3429) ~[groovy-3.0.9.jar!/:3.0.9] at java.base/java.security.AccessController.doPrivileged(AccessController.java:569) ~[na:na] at groovy.lang.MetaClassImpl.addProperties(MetaClassImpl.java:3429) ~[groovy-3.0.9.jar!/:3.0.9] at groovy.lang.MetaClassImpl.reinitialize(MetaClassImpl.java:3411) ~[groovy-3.0.9.jar!/:3.0.9] at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:3404) ~[groovy-3.0.9.jar!/:3.0.9] at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:273) ~[groovy-3.0.9.jar!/:3.0.9] at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:315) ~[groovy-3.0.9.jar!/:3.0.9] at com.example.demo.B.$getStaticMetaClass(DemoApplication.groovy) ~[classes!/:na] at com.example.demo.B.<init>(DemoApplication.groovy) ~[classes!/:na] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na] at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na] at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na] at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:211) ~[spring-beans-5.3.12.jar!/:5.3.12] ... 30 common frames omitted
Your Environment
java -version openjdk version “17” 2021-09-14 OpenJDK Runtime Environment (build 17+35-2724) OpenJDK 64-Bit Server VM (build 17+35-2724, mixed mode, sharing)
Issue Analytics
- State:
- Created 2 years ago
- Comments:5 (3 by maintainers)
This relates to #526.
For now the workaround is to disable CompletableFuture instrumentation by adding the following to your config file, under the
common
stanza:Closing this as a duplicate of #526