Skip to content

Commit 078e146

Browse files
committed
Filter empty YAML documents
Update `OriginTrackedYamlLoader` so that empty documents are filtered from the result. Prior to this commit, our origin wrapper would confuse the YAML processor and cause empty documents to be included in the Map with a key of "document" and no value. Closes gh-22493
1 parent fdc6e80 commit 078e146

File tree

3 files changed

+22
-0
lines changed

3 files changed

+22
-0
lines changed

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.ArrayList;
2020
import java.util.List;
2121
import java.util.Map;
22+
import java.util.NoSuchElementException;
2223
import java.util.regex.Pattern;
2324
import java.util.stream.Collectors;
2425

@@ -82,6 +83,15 @@ List<Map<String, Object>> load() {
8283
*/
8384
private class OriginTrackingConstructor extends SafeConstructor {
8485

86+
@Override
87+
public Object getData() throws NoSuchElementException {
88+
Object data = super.getData();
89+
if (data instanceof CharSequence && ((CharSequence) data).length() == 0) {
90+
return null;
91+
}
92+
return data;
93+
}
94+
8595
@Override
8696
protected Object constructObject(Node node) {
8797
if (node instanceof ScalarNode) {

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,13 @@ void unsupportedType() throws Exception {
128128
assertThatExceptionOfType(ConstructorException.class).isThrownBy(this.loader::load);
129129
}
130130

131+
@Test
132+
void emptyDocumentes() {
133+
this.loader = new OriginTrackedYamlLoader(new ClassPathResource("test-empty-yaml.yml", getClass()));
134+
List<Map<String, Object>> loaded = this.loader.load();
135+
assertThat(loaded).isEmpty();
136+
}
137+
131138
private OriginTrackedValue getValue(String name) {
132139
if (this.result == null) {
133140
this.result = this.loader.load();
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
---
3+
4+
---
5+
---

0 commit comments

Comments
 (0)