Keep YAML entries that haven an empty array value
Prior to this commit, a YAML entry that define an empty array value was lost. This commit makes sure to flag it with an empty String, which corresponds as an empty comma separated list of entries in the properties format. Issue: SPR-16769
This commit is contained in:
parent
2bd3b534fb
commit
e51330e905
|
@ -293,10 +293,14 @@ public abstract class YamlProcessor {
|
|||
// Need a compound key
|
||||
@SuppressWarnings("unchecked")
|
||||
Collection<Object> collection = (Collection<Object>) value;
|
||||
int count = 0;
|
||||
for (Object object : collection) {
|
||||
buildFlattenedMap(result,
|
||||
Collections.singletonMap("[" + (count++) + "]", object), key);
|
||||
if (collection.isEmpty()) {
|
||||
result.put(key, "");
|
||||
} else {
|
||||
int count = 0;
|
||||
for (Object object : collection) {
|
||||
buildFlattenedMap(result, Collections.singletonMap(
|
||||
"[" + (count++) + "]", object), key);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -19,6 +19,7 @@ package org.springframework.beans.factory.config;
|
|||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Test;
|
||||
|
@ -116,6 +117,20 @@ public class YamlMapFactoryBeanTests {
|
|||
assertEquals(Integer.valueOf(3), sub.get("key1.key2"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void mapWithEmptyArrayValue() {
|
||||
this.factory.setResources(new ByteArrayResource("a: alpha\ntest: []".getBytes()));
|
||||
assertTrue(this.factory.getObject().containsKey("test"));
|
||||
assertEquals(((List<?>)this.factory.getObject().get("test")).size(), 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void mapWithEmptyValue() {
|
||||
this.factory.setResources(new ByteArrayResource("a: alpha\ntest:".getBytes()));
|
||||
assertTrue(this.factory.getObject().containsKey("test"));
|
||||
assertNull(this.factory.getObject().get("test"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDuplicateKey() throws Exception {
|
||||
this.factory.setResources(new ByteArrayResource("mymap:\n foo: bar\nmymap:\n bar: foo".getBytes()));
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -207,6 +207,15 @@ public class YamlPropertiesFactoryBeanTests {
|
|||
assertThat(properties.getProperty("spam"), equalTo(""));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoadEmptyArrayValue() {
|
||||
YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
|
||||
factory.setResources(new ByteArrayResource("a: alpha\ntest: []".getBytes()));
|
||||
Properties properties = factory.getObject();
|
||||
assertThat(properties.getProperty("a"), equalTo("alpha"));
|
||||
assertThat(properties.getProperty("test"), equalTo(""));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoadArrayOfString() throws Exception {
|
||||
YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
|
||||
|
|
Loading…
Reference in New Issue