When I upgrade snakeyaml from 1.33 to 2.0 version, Springboot Application run failed as below.
springboot version : 2.7.13
Java Version : 11
Error log
java.lang.NoSuchMethodError: 'void org.yaml.snakeyaml.constructor.Constructor.<init>(java.lang.Class)'
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:921)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:136)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:141)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:90)
... 93 more
Comment From: snicoll
Unfortunately, the exception you've shared doesn't indicate if the bean that is trying to be created is from your own project or if something in Spring Boot needs to be fixed. Please share a small sample that we can run ourselves that reproduces the issue.
Comment From: lekhrajAD
@snicoll I upgraded snakeyaml to 2.0 using springboot version 2.7.13, spring version 5.3.26 and java 1.8 and the same error got resolved but for java 11, it's not working.
Error log
Caused by: java.lang.NoSuchMethodError: 'void org.yaml.snakeyaml.constructor.Constructor.<init>(java.lang.Class)'
at com.appdirect.configr.sdk.mock.MockFile.readFile(MockFile.java:18)
at com.appdirect.configr.sdk.FlagEvaluationMockImpl.<init>(FlagEvaluationMockImpl.java:17)
at com.appdirect.configr.sdk.FlagEvaluationImpl.<init>(FlagEvaluationImpl.java:42)
at com.appdirect.configr.sdk.FlagEvaluationCachedImpl.<init>(FlagEvaluationCachedImpl.java:32)
at com.appdirect.configr.sdk.FlagApiFactory.getInstance(FlagApiFactory.java:29)
at com.appdirect.configr.sdk.spring.service.FeatureFlagServiceImpl.<init>(FeatureFlagServiceImpl.java:17)
at com.appdirect.configr.sdk.spring.configuration.AppConfigrConfiguration.featureFlagService(AppConfigrConfiguration.java:18)
at com.appdirect.configr.sdk.spring.configuration.AppConfigrConfiguration$$EnhancerBySpringCGLIB$$c71eeca0.CGLIB$featureFlagService$1(<generated>)
at com.appdirect.configr.sdk.spring.configuration.AppConfigrConfiguration$$EnhancerBySpringCGLIB$$c71eeca0$$FastClassBySpringCGLIB$$2f3d2e5d.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
at com.appdirect.configr.sdk.spring.configuration.AppConfigrConfiguration$$EnhancerBySpringCGLIB$$c71eeca0.featureFlagService(<generated>)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
... 169 more
MockFile.java
public static MockFile readFile(String filename) throws Exception {
Constructor constructor = new Constructor(MockFile.class);
Yaml yaml = new Yaml(constructor);
InputStream inputStream = MockFile.class.getClassLoader().getResourceAsStream(filename);
if (inputStream != null) {
return (MockFile)yaml.load(inputStream);
} else {
InputStream inputStream = new FileInputStream(filename);
if (inputStream != null) {
return (MockFile)yaml.load(inputStream);
} else {
throw new Exception(String.format("could not read file: %s", filename));
}
}
}
Comment From: snicoll
@lekhrajAD You can see by yourself that the exception is thrown from a class from com.appdirect.configr.sdk. There's nothing we can do about this so please report the incompatibility to the relevant project.