getappmap / appmap-java

AppMap client agent for Java
Other
82 stars 16 forks source link

AppMap agent logs NoSourceAvailableException for Spring Boot autoconfigurations #86

Open Infeligo opened 3 years ago

Infeligo commented 3 years ago

I was trying AppMap on Spring's Authorization Server example application. I ran the application with AppMap Java agent (v1.1.0) enabled and on start it threw a bunch of exceptions like these:

com.appland.appmap.output.v1.NoSourceAvailableException: Failed to get parameter types for org.springframework.boot.autoconfigure.cache.InfinispanCacheConfiguration.cacheManager(Lorg/springframework/boot/autoconfigure/cache/CacheManagerCustomizers;Lorg/infinispan/manager/EmbeddedCacheManager;)Lorg/infinispan/spring/embedded/provider/SpringEmbeddedCacheManager;: org.infinispan.manager.EmbeddedCacheManager
    at com.appland.appmap.output.v1.Parameters.<init>(Parameters.java:62)
    at com.appland.appmap.output.v1.Event.<init>(Event.java:111)
    at com.appland.appmap.record.EventTemplateRegistry.register(EventTemplateRegistry.java:39)
    at com.appland.appmap.transform.annotations.Hook.prepare(Hook.java:120)
    at com.appland.appmap.transform.ClassFileTransformer.lambda$applyHooks$1(ClassFileTransformer.java:121)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
    at com.appland.appmap.transform.ClassFileTransformer.applyHooks(ClassFileTransformer.java:123)
    at com.appland.appmap.transform.ClassFileTransformer.transform(ClassFileTransformer.java:185)
    at java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:246)
    at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188)
    at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:563)
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at org.springframework.boot.autoconfigure.cache.CacheConfigurations.<clinit>(CacheConfigurations.java:42)
    at org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration$CacheConfigurationImportSelector.selectImports(CacheAutoConfiguration.java:126)
    at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:581)
    at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:311)
    at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:250)
    at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:600)
    at org.springframework.context.annotation.ConfigurationClassParser.access$800(ConfigurationClassParser.java:111)
    at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.lambda$processGroupImports$1(ConfigurationClassParser.java:812)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
    at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:809)
    at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:780)
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:193)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:338)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332)
    at sample.OAuth2AuthorizationServerApplication.main(OAuth2AuthorizationServerApplication.java:29)
com.appland.shade.javassist.NotFoundException: org.infinispan.manager.EmbeddedCacheManager
    at com.appland.shade.javassist.ClassPool.get(ClassPool.java:430)
    at com.appland.shade.javassist.bytecode.Descriptor.toCtClass(Descriptor.java:571)
    at com.appland.shade.javassist.bytecode.Descriptor.getReturnType(Descriptor.java:472)
    at com.appland.shade.javassist.CtBehavior.getReturnType0(CtBehavior.java:331)
    at com.appland.shade.javassist.CtMethod.getReturnType(CtMethod.java:232)
    at com.appland.appmap.transform.annotations.CallbackOnSystem.mutateRuntimeParameters(CallbackOnSystem.java:45)
    at com.appland.appmap.transform.annotations.Hook.lambda$getRuntimeParameters$2(Hook.java:106)
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
    at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
    at com.appland.appmap.transform.annotations.Hook.getRuntimeParameters(Hook.java:105)
    at com.appland.appmap.transform.annotations.Hook.prepare(Hook.java:133)
    at com.appland.appmap.transform.ClassFileTransformer.lambda$applyHooks$1(ClassFileTransformer.java:121)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
    at com.appland.appmap.transform.ClassFileTransformer.applyHooks(ClassFileTransformer.java:123)
    at com.appland.appmap.transform.ClassFileTransformer.transform(ClassFileTransformer.java:185)
    at java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:246)
    at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188)
    at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:563)
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at org.springframework.boot.autoconfigure.cache.CacheConfigurations.<clinit>(CacheConfigurations.java:42)
    at org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration$CacheConfigurationImportSelector.selectImports(CacheAutoConfiguration.java:126)
    at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:581)
    at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:311)
    at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:250)
    at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:600)
    at org.springframework.context.annotation.ConfigurationClassParser.access$800(ConfigurationClassParser.java:111)
    at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.lambda$processGroupImports$1(ConfigurationClassParser.java:812)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
    at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:809)
    at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:780)
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:193)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:338)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332)
    at sample.OAuth2AuthorizationServerApplication.main(OAuth2AuthorizationServerApplication.java:29)

It seems that these classes are references through Spring Boot's autoconfigurations, but are indeed not on the classpath.

The application itself proceeds to start correctly. However, AppMap itself does not seem to work in this case. Stopping recording via IntelliJ Plugin gives an error and trying the same via REST API yields an empty JSON.

ptrdvrk commented 3 years ago

@dustinbyrne are these exceptions malign or benign?