Browse Source

Fix bug where using a YAML with anchors couldn't be loaded

Closes gh-33404
pull/33411/head
Moritz Halbritter 3 years ago
parent
commit
b3878e84ae
  1. 6
      spring-boot-project/spring-boot/src/main/java/org/springframework/boot/env/OriginTrackedYamlLoader.java
  2. 9
      spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedYamlLoaderTests.java
  3. 6
      spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/anchors.yml

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

@ -79,7 +79,7 @@ class OriginTrackedYamlLoader extends YamlProcessor { @@ -79,7 +79,7 @@ class OriginTrackedYamlLoader extends YamlProcessor {
}
List<Map<String, Object>> load() {
final List<Map<String, Object>> result = new ArrayList<>();
List<Map<String, Object>> result = new ArrayList<>();
process((properties, map) -> result.add(getFlattenedMap(map)));
return result;
}
@ -119,7 +119,9 @@ class OriginTrackedYamlLoader extends YamlProcessor { @@ -119,7 +119,9 @@ class OriginTrackedYamlLoader extends YamlProcessor {
}
private void replaceMappingNodeKeys(MappingNode node) {
node.setValue(node.getValue().stream().map(KeyScalarNode::get).toList());
List<NodeTuple> newValue = new ArrayList<>();
node.getValue().stream().map(KeyScalarNode::get).forEach(newValue::add);
node.setValue(newValue);
}
private Object constructTrackedObject(Node node, Object value) {

9
spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedYamlLoaderTests.java vendored

@ -173,6 +173,15 @@ class OriginTrackedYamlLoaderTests { @@ -173,6 +173,15 @@ class OriginTrackedYamlLoaderTests {
assertThat(loaded.get("test.b.boot")).hasToString("b");
}
@Test
void loadWhenUsingAnchors() {
Resource resource = new ClassPathResource("anchors.yml", getClass());
this.loader = new OriginTrackedYamlLoader(resource);
Map<String, Object> loaded = this.loader.load().get(0);
assertThat(loaded.get("some.path.config.key")).hasToString("value");
assertThat(loaded.get("some.anotherpath.config.key")).hasToString("value");
}
private OriginTrackedValue getValue(String name) {
if (this.result == null) {
this.result = this.loader.load();

6
spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/anchors.yml vendored

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
some:
path: &anchor
config:
key: value
anotherpath:
<<: *anchor
Loading…
Cancel
Save