45
45
import org .springframework .boot .origin .TextResourceOrigin ;
46
46
import org .springframework .boot .origin .TextResourceOrigin .Location ;
47
47
import org .springframework .core .io .Resource ;
48
+ import org .springframework .util .ReflectionUtils ;
48
49
49
50
/**
50
51
* Class to load {@code .yml} files into a map of {@code String} to
55
56
*/
56
57
class OriginTrackedYamlLoader extends YamlProcessor {
57
58
59
+ private static final boolean HAS_RESOLVER_LIMIT = ReflectionUtils .findMethod (Resolver .class , "addImplicitResolver" ,
60
+ Tag .class , Pattern .class , String .class , int .class ) != null ;
61
+
58
62
private final Resource resource ;
59
63
60
64
OriginTrackedYamlLoader (Resource resource ) {
@@ -75,7 +79,7 @@ private Yaml createYaml(LoaderOptions loaderOptions) {
75
79
BaseConstructor constructor = new OriginTrackingConstructor (loaderOptions );
76
80
Representer representer = new Representer ();
77
81
DumperOptions dumperOptions = new DumperOptions ();
78
- LimitedResolver resolver = new LimitedResolver ();
82
+ Resolver resolver = HAS_RESOLVER_LIMIT ? new NoTimestampResolverWithLimit () : new NoTimestampResolver ();
79
83
return new Yaml (constructor , representer , dumperOptions , loaderOptions , resolver );
80
84
}
81
85
@@ -167,7 +171,7 @@ private static Node get(Node node) {
167
171
/**
168
172
* {@link Resolver} that limits {@link Tag#TIMESTAMP} tags.
169
173
*/
170
- private static class LimitedResolver extends Resolver {
174
+ private static class NoTimestampResolver extends Resolver {
171
175
172
176
@ Override
173
177
public void addImplicitResolver (Tag tag , Pattern regexp , String first ) {
@@ -179,4 +183,19 @@ public void addImplicitResolver(Tag tag, Pattern regexp, String first) {
179
183
180
184
}
181
185
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
+
182
201
}
0 commit comments