raphw / byte-buddy

Runtime code generation for the Java virtual machine.
https://bytebuddy.net
Apache License 2.0
6.12k stars 784 forks source link

Unexpected error: Failed to start bean 'documentationPluginsBootstrapper' #1449

Open Restlol opened 1 year ago

Restlol commented 1 year ago

hi there, First ,Thanks for your great effort of Byte-Buddy! I use Byte-buddy to write my own java-agent, i encountered a unexpected error, I've search many documents and unfortunately i didn't find the reason, could you give some suggestions? What my Agent did:

  1. I hope to enhance the class’s methods under the specified package, just like
    
    type(ElementMatchers.nameStartsWith("your package")) & on(isMethod())
2. I make a `Advice` and  define a  method `@Advice.OnMethodExit(onThrowable = Throwable.class)`  to catch the `Throwable`, just like 
@Advice.OnMethodExit(onThrowable = Throwable.class)
public static void exit(@Advice.Thrown Throwable throwable) {
    if (throwable != null) {
        log.error("MethodAdvice exit throwable:{}", throwable);
    }
}

3.  When I use this agent to a java project , error happens ( this error  doesn't always appear ),   this is the error log: 

2023-06-05 10:39:50.926||INFO||main||org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:179) $Stopping service [Tomcat] 2023-06-05 10:39:50.933||WARN||localhost-startStop-2||org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:179) $The web application [ROOT] appears to have started a thread named [MonitorTask] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: java.lang.Thread.sleep(Native Method) com.test.TestJedisPool$MonitorTask.run(TestJedisPool.java:306) java.lang.Thread.run(Thread.java:748) 2023-06-05 10:39:50.933||WARN||localhost-startStop-2||org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:179) $The web application [ROOT] appears to have started a thread named [Thread-8] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: sun.misc.Unsafe.park(Native Method) java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078) java.util.concurrent.LinkedBlockingDeque.pollFirst(LinkedBlockingDeque.java:522) java.util.concurrent.LinkedBlockingDeque.poll(LinkedBlockingDeque.java:684) 2023-06-05 10:39:50.933||WARN||localhost-startStop-2||org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:179) $The web application [ROOT] appears to have started a thread named [metrics-logger-reporter-1-thread-1] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: sun.misc.Unsafe.park(Native Method) java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078) java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093) java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809) java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) java.lang.Thread.run(Thread.java:748) 2023-06-05 10:39:50.934||WARN||localhost-startStop-2||org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:179) $The web application [ROOT] appears to have started a thread named [Timer-0] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: java.lang.Object.wait(Native Method) java.util.TimerThread.mainLoop(Timer.java:552) java.util.TimerThread.run(Timer.java:505) 2023-06-05 10:39:50.934||WARN||localhost-startStop-2||org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:179) $The web application [ROOT] appears to have started a thread named [Timer-1] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: java.lang.Object.wait(Native Method) java.util.TimerThread.mainLoop(Timer.java:552) java.util.TimerThread.run(Timer.java:505) 2023-06-05 10:39:50.954||INFO||main||org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer.logAutoConfigurationReport(AutoConfigurationReportLoggingInitializer.java:101) $

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled. 2023-06-05 10:39:50.962||ERROR||main||org.springframework.boot.SpringApplication.reportFailure(SpringApplication.java:771) $Application startup failed org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.annotation.AnnotationFormatError: Parameter annotations don't match number of parameters at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE] at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:50) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE] at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:348) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE] at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:151) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE] at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:114) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:880) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:144) ~[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) ~[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) ~[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) ~[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) ~[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) ~[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE] Caused by: java.lang.annotation.AnnotationFormatError: Parameter annotations don't match number of parameters at java.lang.reflect.Method.handleParameterNumberMismatch(Method.java:653) ~[?:1.8.0_261] at java.lang.reflect.Executable.sharedGetParameterAnnotations(Executable.java:558) ~[?:1.8.0_261] at java.lang.reflect.Method.getParameterAnnotations(Method.java:639) ~[?:1.8.0_261] at com.fasterxml.classmate.ResolvedTypeWithMembers.resolveMethod(ResolvedTypeWithMembers.java:593) ~[classmate-1.3.3.jar:1.3.3] at com.fasterxml.classmate.ResolvedTypeWithMembers.resolveMemberMethods(ResolvedTypeWithMembers.java:388) ~[classmate-1.3.3.jar:1.3.3] at com.fasterxml.classmate.ResolvedTypeWithMembers.getMemberMethods(ResolvedTypeWithMembers.java:201) ~[classmate-1.3.3.jar:1.3.3] at springfox.documentation.spring.web.readers.operation.HandlerMethodResolver.getMemberMethods(HandlerMethodResolver.java:159) ~[springfox-spring-web-2.9.2.jar:null] at springfox.documentation.spring.web.readers.operation.HandlerMethodResolver.resolvedMethod(HandlerMethodResolver.java:147) ~[springfox-spring-web-2.9.2.jar:null] at springfox.documentation.spring.web.readers.operation.HandlerMethodResolver.methodParameters(HandlerMethodResolver.java:81) ~[springfox-spring-web-2.9.2.jar:null] at springfox.documentation.spring.web.WebMvcRequestHandler.getParameters(WebMvcRequestHandler.java:129) ~[springfox-spring-web-2.9.2.jar:null] at springfox.documentation.spring.web.plugins.PathAndParametersEquivalence.doHash(PathAndParametersEquivalence.java:66) ~[springfox-spring-web-2.9.2.jar:null] at springfox.documentation.spring.web.plugins.PathAndParametersEquivalence.doHash(PathAndParametersEquivalence.java:32) ~[springfox-spring-web-2.9.2.jar:null] at com.google.common.base.Equivalence.hash(Equivalence.java:105) ~[guava-20.0.jar:?] at com.google.common.base.Equivalence$Wrapper.hashCode(Equivalence.java:218) ~[guava-20.0.jar:?] at java.util.HashMap.hash(HashMap.java:339) ~[?:1.8.0_261] at java.util.LinkedHashMap.get(LinkedHashMap.java:440) ~[?:1.8.0_261] at com.google.common.collect.AbstractMapBasedMultimap.put(AbstractMapBasedMultimap.java:191) ~[guava-20.0.jar:?] at com.google.common.collect.AbstractListMultimap.put(AbstractListMultimap.java:106) ~[guava-20.0.jar:?] at com.google.common.collect.ImmutableMultimap$Builder.put(ImmutableMultimap.java:170) ~[guava-20.0.jar:?] at com.google.common.collect.ImmutableListMultimap$Builder.put(ImmutableListMultimap.java:151) ~[guava-20.0.jar:?] at com.google.common.collect.Multimaps.index(Multimaps.java:1549) ~[guava-20.0.jar:?] at com.google.common.collect.Multimaps.index(Multimaps.java:1496) ~[guava-20.0.jar:?] at springfox.documentation.spring.web.plugins.DefaultRequestHandlerCombiner.safeGroupBy(DefaultRequestHandlerCombiner.java:108) ~[springfox-spring-web-2.9.2.jar:null] at springfox.documentation.spring.web.plugins.DefaultRequestHandlerCombiner.combined(DefaultRequestHandlerCombiner.java:67) ~[springfox-spring-web-2.9.2.jar:null] at springfox.documentation.spring.web.plugins.DefaultRequestHandlerCombiner.combine(DefaultRequestHandlerCombiner.java:56) ~[springfox-spring-web-2.9.2.jar:null] at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.defaultContextBuilder(DocumentationPluginsBootstrapper.java:118) ~[springfox-spring-web-2.9.2.jar:null] at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.buildContext(DocumentationPluginsBootstrapper.java:96) ~[springfox-spring-web-2.9.2.jar:null] at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.start(DocumentationPluginsBootstrapper.java:167) ~[springfox-spring-web-2.9.2.jar:null] at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:175) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE] ... 14 more 2023-06-05 10:40:24.763||WARN||Timer-0||org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator.(ParameterMessageInterpolator.java:28) $HV000184: ParameterMessageInterpolator has been chosen, EL interpolation will not be supported Exception in thread "Timer-0" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'target.dataSource' defined in class path resource [com/test/jdbc/pool/DSAutoConfiguration.class]: Initialization of bean failed; nested exception is javax.validation.ValidationException: Unable to get available provider resolvers. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) at org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:345) at org.springframework.cloud.context.scope.GenericScope$BeanLifecycleWrapper.getBean(GenericScope.java:359) at org.springframework.cloud.context.scope.GenericScope.get(GenericScope.java:176) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:340) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) at org.springframework.aop.target.SimpleBeanTargetSource.getTarget(SimpleBeanTargetSource.java:35) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.getTarget(CglibAopProxy.java:705) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655) at org.apache.tomcat.jdbc.pool.DataSource$$EnhancerBySpringCGLIB$$2c7fc76b.getReleasedCount() at java.util.TimerThread.mainLoop(Timer.java:555) at java.util.TimerThread.run(Timer.java:505) Caused by: javax.validation.ValidationException: Unable to get available provider resolvers. at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:265) at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet(LocalValidatorFactoryBean.java:250) at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor$ValidatedLocalValidatorFactoryBean.(ConfigurationPropertiesBindingPostProcessor.java:412) at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.getValidator(ConfigurationPropertiesBindingPostProcessor.java:368) at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.determineValidator(ConfigurationPropertiesBindingPostProcessor.java:352) at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:314) at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:296) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ... 13 more Caused by: java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [META-INF/services/javax.validation.spi.ValidationProvider]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access. at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1305) at org.apache.catalina.loader.WebappClassLoaderBase.findResources(WebappClassLoaderBase.java:933) at java.lang.ClassLoader.getResources(ClassLoader.java:1135) at java.util.ServiceLoader$LazyIterator.hasNextService(ServiceLoader.java:348) at java.util.ServiceLoader$LazyIterator.hasNext(ServiceLoader.java:393) at java.util.ServiceLoader$1.hasNext(ServiceLoader.java:474) at javax.validation.Validation$GetValidationProviderListAction.loadProviders(Validation.java:354) at javax.validation.Validation$GetValidationProviderListAction.run(Validation.java:329) at javax.validation.Validation$GetValidationProviderListAction.getValidationProviderList(Validation.java:316) at javax.validation.Validation$DefaultValidationProviderResolver.getValidationProviders(Validation.java:299) at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:257) ... 22 more


  are there dependencies jar conflict? this is my depencies
![image](https://github.com/raphw/byte-buddy/assets/68416238/3ee430d7-b566-41db-acc4-2ca7caa404d8)
raphw commented 1 year ago

How does your agent builder look like? Seems like some methods are moved?

Try setting disableClassFormatChanges.