提交 e51330e9 编写于 作者: S Stephane Nicoll

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
上级 2bd3b534
...@@ -293,10 +293,14 @@ public abstract class YamlProcessor { ...@@ -293,10 +293,14 @@ public abstract class YamlProcessor {
// Need a compound key // Need a compound key
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
Collection<Object> collection = (Collection<Object>) value; Collection<Object> collection = (Collection<Object>) value;
int count = 0; if (collection.isEmpty()) {
for (Object object : collection) { result.put(key, "");
buildFlattenedMap(result, } else {
Collections.singletonMap("[" + (count++) + "]", object), key); int count = 0;
for (Object object : collection) {
buildFlattenedMap(result, Collections.singletonMap(
"[" + (count++) + "]", object), key);
}
} }
} }
else { else {
......
/* /*
* 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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -19,6 +19,7 @@ package org.springframework.beans.factory.config; ...@@ -19,6 +19,7 @@ package org.springframework.beans.factory.config;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import org.junit.Test; import org.junit.Test;
...@@ -116,6 +117,20 @@ public class YamlMapFactoryBeanTests { ...@@ -116,6 +117,20 @@ public class YamlMapFactoryBeanTests {
assertEquals(Integer.valueOf(3), sub.get("key1.key2")); 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 @Test
public void testDuplicateKey() throws Exception { public void testDuplicateKey() throws Exception {
this.factory.setResources(new ByteArrayResource("mymap:\n foo: bar\nmymap:\n bar: foo".getBytes())); this.factory.setResources(new ByteArrayResource("mymap:\n foo: bar\nmymap:\n bar: foo".getBytes()));
......
/* /*
* 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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -207,6 +207,15 @@ public class YamlPropertiesFactoryBeanTests { ...@@ -207,6 +207,15 @@ public class YamlPropertiesFactoryBeanTests {
assertThat(properties.getProperty("spam"), equalTo("")); 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 @Test
public void testLoadArrayOfString() throws Exception { public void testLoadArrayOfString() throws Exception {
YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean(); YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册