diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/env/OriginTrackedYamlLoader.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/env/OriginTrackedYamlLoader.java index b2a87f8792..ffa6558dc7 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/env/OriginTrackedYamlLoader.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/env/OriginTrackedYamlLoader.java @@ -30,6 +30,7 @@ import org.yaml.snakeyaml.constructor.BaseConstructor; import org.yaml.snakeyaml.constructor.Constructor; import org.yaml.snakeyaml.constructor.SafeConstructor; import org.yaml.snakeyaml.error.Mark; +import org.yaml.snakeyaml.nodes.CollectionNode; import org.yaml.snakeyaml.nodes.MappingNode; import org.yaml.snakeyaml.nodes.Node; import org.yaml.snakeyaml.nodes.NodeTuple; @@ -109,6 +110,9 @@ class OriginTrackedYamlLoader extends YamlProcessor { return constructTrackedObject(node, super.constructObject(node)); } } + else if (node instanceof CollectionNode && ((CollectionNode) node).getValue().isEmpty()) { + return constructTrackedObject(node, super.constructObject(node)); + } else if (node instanceof MappingNode) { replaceMappingNodeKeys((MappingNode) node); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedYamlLoaderTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedYamlLoaderTests.java index 4252c1ad22..279d727fa5 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedYamlLoaderTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedYamlLoaderTests.java @@ -17,6 +17,7 @@ package org.springframework.boot.env; import java.nio.charset.StandardCharsets; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -120,6 +121,14 @@ class OriginTrackedYamlLoaderTests { assertThat(getLocation(nullValue)).isEqualTo("28:13"); } + @Test + void processEmptyListAndMap() { + OriginTrackedValue emptymap = getValue("emptymap"); + OriginTrackedValue emptylist = getValue("emptylist"); + assertThat(emptymap.getValue()).isEqualTo(Collections.EMPTY_MAP); + assertThat(emptylist.getValue()).isEqualTo(Collections.EMPTY_LIST); + } + @Test void unsupportedType() throws Exception { String yaml = "value: !!java.net.URL [!!java.lang.String [!!java.lang.StringBuilder [\"http://localhost:9000/\"]]]"; diff --git a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-yaml.yml b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-yaml.yml index 1def7c53c4..044c8aef44 100644 --- a/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-yaml.yml +++ b/spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-yaml.yml @@ -26,6 +26,8 @@ example: - bar2: bling empty: "" null-value: null +emptylist: [] +emptymap: {} --- spring: