diff options
author | Luca Cavanna <javanna@users.noreply.github.com> | 2017-05-15 18:15:20 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-15 18:15:20 +0200 |
commit | e14ba81ac1bf4c576f96e62fbe1c6f6024b10f5b (patch) | |
tree | ed9aa0f43ac738e40351357b142cb7e0a6cd893a | |
parent | dcb63ab8bcf0cd133e80c32770ce65fd1303087c (diff) |
Make ObjectParser support string to boolean conversion (#24668)
We generally accept string values when a boolean is expected. We've been doing that in our parsing code, but we missed that bit when moving parsing code to ObjectParser, which throws an error instead. This commit makes ObjectParser parse also string values into booleans. It throws an error in case the value is not `true` or `false`.
Closes #21802
-rw-r--r-- | core/src/main/java/org/elasticsearch/common/xcontent/ObjectParser.java | 2 | ||||
-rw-r--r-- | core/src/test/java/org/elasticsearch/common/xcontent/ObjectParserTests.java | 18 |
2 files changed, 12 insertions, 8 deletions
diff --git a/core/src/main/java/org/elasticsearch/common/xcontent/ObjectParser.java b/core/src/main/java/org/elasticsearch/common/xcontent/ObjectParser.java index c07f4d11d8..6dc6697594 100644 --- a/core/src/main/java/org/elasticsearch/common/xcontent/ObjectParser.java +++ b/core/src/main/java/org/elasticsearch/common/xcontent/ObjectParser.java @@ -398,7 +398,7 @@ public final class ObjectParser<Value, Context> extends AbstractObjectParser<Val LONG(VALUE_NUMBER, VALUE_STRING), LONG_OR_NULL(VALUE_NUMBER, VALUE_STRING, VALUE_NULL), INT(VALUE_NUMBER, VALUE_STRING), - BOOLEAN(VALUE_BOOLEAN), + BOOLEAN(VALUE_BOOLEAN, VALUE_STRING), STRING_ARRAY(START_ARRAY, VALUE_STRING), FLOAT_ARRAY(START_ARRAY, VALUE_NUMBER, VALUE_STRING), DOUBLE_ARRAY(START_ARRAY, VALUE_NUMBER, VALUE_STRING), diff --git a/core/src/test/java/org/elasticsearch/common/xcontent/ObjectParserTests.java b/core/src/test/java/org/elasticsearch/common/xcontent/ObjectParserTests.java index 84c9518051..0d879e4813 100644 --- a/core/src/test/java/org/elasticsearch/common/xcontent/ObjectParserTests.java +++ b/core/src/test/java/org/elasticsearch/common/xcontent/ObjectParserTests.java @@ -31,6 +31,7 @@ import java.io.UncheckedIOException; import java.net.URI; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import static org.hamcrest.Matchers.hasSize; @@ -108,7 +109,6 @@ public class ObjectParserTests extends ESTestCase { s = objectParser.parse(parser, null); assertNotNull(s.object); assertEquals(s.object.test, 0); - } /** @@ -353,7 +353,11 @@ public class ObjectParserTests extends ESTestCase { builder.field("string_array_field", "5"); } boolean nullValue = randomBoolean(); - builder.field("boolean_field", nullValue); + if (randomBoolean()) { + builder.field("boolean_field", nullValue); + } else { + builder.field("boolean_field", Boolean.toString(nullValue)); + } builder.field("string_or_null", nullValue ? null : "5"); builder.endObject(); XContentParser parser = createParser(JsonXContent.jsonXContent, builder.string()); @@ -424,19 +428,19 @@ public class ObjectParserTests extends ESTestCase { objectParser.declareStringOrNull(TestStruct::setString_or_null, new ParseField("string_or_null")); objectParser.declareBoolean(TestStruct::setNull_value, new ParseField("boolean_field")); TestStruct parse = objectParser.parse(parser, new TestStruct(), null); - assertArrayEquals(parse.double_array_field.toArray(), Arrays.asList(2.1d).toArray()); + assertArrayEquals(parse.double_array_field.toArray(), Collections.singletonList(2.1d).toArray()); assertEquals(parse.double_field, 2.1d, 0.0d); - assertArrayEquals(parse.long_array_field.toArray(), Arrays.asList(4L).toArray()); + assertArrayEquals(parse.long_array_field.toArray(), Collections.singletonList(4L).toArray()); assertEquals(parse.long_field, 4L); - assertArrayEquals(parse.string_array_field.toArray(), Arrays.asList("5").toArray()); + assertArrayEquals(parse.string_array_field.toArray(), Collections.singletonList("5").toArray()); assertEquals(parse.string_field, "5"); - assertArrayEquals(parse.int_array_field.toArray(), Arrays.asList(1).toArray()); + assertArrayEquals(parse.int_array_field.toArray(), Collections.singletonList(1).toArray()); assertEquals(parse.int_field, 1); - assertArrayEquals(parse.float_array_field.toArray(), Arrays.asList(3.1f).toArray()); + assertArrayEquals(parse.float_array_field.toArray(), Collections.singletonList(3.1f).toArray()); assertEquals(parse.float_field, 3.1f, 0.0f); assertEquals(nullValue, parse.null_value); |