Skip to content

Commit 724f9eb

Browse files
committed
Support SnakeYaml 1.31
This commit keeps the managed dependency for SnakeYaml at 1.29 but enables forward compatibility for SnakeYaml 1.31. Closes gh-32228
1 parent d9265f0 commit 724f9eb

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/env/OriginTrackedYamlLoader.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.springframework.boot.origin.TextResourceOrigin;
4646
import org.springframework.boot.origin.TextResourceOrigin.Location;
4747
import org.springframework.core.io.Resource;
48+
import org.springframework.util.ReflectionUtils;
4849

4950
/**
5051
* Class to load {@code .yml} files into a map of {@code String} to
@@ -55,6 +56,9 @@
5556
*/
5657
class OriginTrackedYamlLoader extends YamlProcessor {
5758

59+
private static final boolean HAS_RESOLVER_LIMIT = ReflectionUtils.findMethod(Resolver.class, "addImplicitResolver",
60+
Tag.class, Pattern.class, String.class, int.class) != null;
61+
5862
private final Resource resource;
5963

6064
OriginTrackedYamlLoader(Resource resource) {
@@ -75,7 +79,7 @@ private Yaml createYaml(LoaderOptions loaderOptions) {
7579
BaseConstructor constructor = new OriginTrackingConstructor(loaderOptions);
7680
Representer representer = new Representer();
7781
DumperOptions dumperOptions = new DumperOptions();
78-
LimitedResolver resolver = new LimitedResolver();
82+
Resolver resolver = HAS_RESOLVER_LIMIT ? new NoTimestampResolverWithLimit() : new NoTimestampResolver();
7983
return new Yaml(constructor, representer, dumperOptions, loaderOptions, resolver);
8084
}
8185

@@ -167,7 +171,7 @@ private static Node get(Node node) {
167171
/**
168172
* {@link Resolver} that limits {@link Tag#TIMESTAMP} tags.
169173
*/
170-
private static class LimitedResolver extends Resolver {
174+
private static class NoTimestampResolver extends Resolver {
171175

172176
@Override
173177
public void addImplicitResolver(Tag tag, Pattern regexp, String first) {
@@ -179,4 +183,19 @@ public void addImplicitResolver(Tag tag, Pattern regexp, String first) {
179183

180184
}
181185

186+
/**
187+
* {@link Resolver} that limits {@link Tag#TIMESTAMP} tags.
188+
*/
189+
private static class NoTimestampResolverWithLimit extends Resolver {
190+
191+
@Override
192+
public void addImplicitResolver(Tag tag, Pattern regexp, String first, int limit) {
193+
if (tag == Tag.TIMESTAMP) {
194+
return;
195+
}
196+
super.addImplicitResolver(tag, regexp, first, limit);
197+
}
198+
199+
}
200+
182201
}

0 commit comments

Comments
 (0)