这几天公司做安全漏洞扫描,发现snakeyaml1.x版本有高危漏洞,需要升级到2.0,但是snakeyaml从1.x版本升级到2.0之后报错,项目无法启动
2023-07-26 16:56:27,036 main ERROR appenders contains an invalid element or attribute “appender”
2023-07-26 16:56:27,064 main ERROR Unable to locate appender “Filelog” for logger config “root”
2023-07-26 16:56:27,064 main ERROR Unable to locate appender “RollingFileWarn” for logger config “root”
2023-07-26 16:56:27,065 main ERROR Unable to locate appender “RollingFileError” for logger config “root”
requestId: 2023-07-26 16:56:27.746 ERROR [main] org.springframework.boot.SpringApplication - Application run failed
java.lang.NoSuchMethodError: org.yaml.snakeyaml.representer.Representer: method ()V not found
at org.springframework.boot.env.OriginTrackedYamlLoader.createYaml(OriginTrackedYamlLoader.java:76) ~[spring-boot-2.5.14.jar:2.5.14]
at org.springframework.boot.env.OriginTrackedYamlLoader.createYaml(OriginTrackedYamlLoader.java:71) ~[spring-boot-2.5.14.jar:2.5.14]
at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:164) ~[spring-beans-5.3.21.jar:5.3.21]
at org.springframework.boot.env.OriginTrackedYamlLoader.load(OriginTrackedYamlLoader.java:84) ~[spring-boot-2.5.14.jar:2.5.14]
at org.springframework.boot.env.YamlPropertySourceLoader.load(YamlPropertySourceLoader.java:50) ~[spring-boot-2.5.14.jar:2.5.14]
at org.springframework.boot.context.config.StandardConfigDataLoader.load(StandardConfigDataLoader.java:54) ~[spring-boot-2.5.14.jar:2.5.14]
at org.springframework.boot.context.config.StandardConfigDataLoader.load(StandardConfigDataLoader.java:36) ~[spring-boot-2.5.14.jar:2.5.14]
at org.springframework.boot.context.config.ConfigDataLoaders.load(ConfigDataLoaders.java:107) ~[spring-boot-2.5.14.jar:2.5.14]
at org.springframework.boot.context.config.ConfigDataImporter.load(ConfigDataImporter.java:128) ~[spring-boot-2.5.14.jar:2.5.14]
描述
原因是因为Representer类的无参构成方法移除了,但是我们的springboot版本还在加载无参构造导致的报错。
解决方法
重写org.yaml.snakeyaml.representer包下的Representer类,增加无参构造方法
增加红框中的无参构造方法