byte-buddy icon indicating copy to clipboard operation
byte-buddy copied to clipboard

Unexpected error: Failed to start bean 'documentationPluginsBootstrapper'

Open Restlol opened this issue 2 years ago • 1 comments

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())

  1. 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);
        }
    }
  1. 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.<init>(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(<generated>)
	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.<init>(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

Restlol avatar Jun 07 '23 08:06 Restlol

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

Try setting disableClassFormatChanges.

raphw avatar Jun 08 '23 18:06 raphw