Repository: nifi Updated Branches: refs/heads/master f6d8eada6 -> db966cf34
NIFI-5765 Fixing WriteJsonResult to use chosenDataType when writing an Array value Fixing the same bug in PutElasticsearchHttpRecord.java This closes #3114. Signed-off-by: Koji Kawamura <ijokaruma...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/nifi/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/db966cf3 Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/db966cf3 Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/db966cf3 Branch: refs/heads/master Commit: db966cf34879ea0d750ae7ab72344b228f889f59 Parents: f6d8ead Author: Joe Percivall <jperciv...@apache.org> Authored: Mon Oct 29 16:04:05 2018 -0400 Committer: Koji Kawamura <ijokaruma...@apache.org> Committed: Tue Oct 30 11:51:17 2018 +0900 ---------------------------------------------------------------------- .../PutElasticsearchHttpRecord.java | 2 +- .../org/apache/nifi/json/WriteJsonResult.java | 22 ++++---- .../apache/nifi/json/TestWriteJsonResult.java | 59 +++++++++++++++----- 3 files changed, 56 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi/blob/db966cf3/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/main/java/org/apache/nifi/processors/elasticsearch/PutElasticsearchHttpRecord.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/main/java/org/apache/nifi/processors/elasticsearch/PutElasticsearchHttpRecord.java b/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/main/java/org/apache/nifi/processors/elasticsearch/PutElasticsearchHttpRecord.java index 2448716..ac36604 100644 --- a/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/main/java/org/apache/nifi/processors/elasticsearch/PutElasticsearchHttpRecord.java +++ b/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/main/java/org/apache/nifi/processors/elasticsearch/PutElasticsearchHttpRecord.java @@ -569,7 +569,7 @@ public class PutElasticsearchHttpRecord extends AbstractElasticsearchHttpProcess default: if (coercedValue instanceof Object[]) { final Object[] values = (Object[]) coercedValue; - final ArrayDataType arrayDataType = (ArrayDataType) dataType; + final ArrayDataType arrayDataType = (ArrayDataType) chosenDataType; final DataType elementType = arrayDataType.getElementType(); writeArray(values, fieldName, generator, elementType); } else { http://git-wip-us.apache.org/repos/asf/nifi/blob/db966cf3/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/json/WriteJsonResult.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/json/WriteJsonResult.java b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/json/WriteJsonResult.java index d113f8d..5708f5e 100755 --- a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/json/WriteJsonResult.java +++ b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/json/WriteJsonResult.java @@ -17,17 +17,8 @@ package org.apache.nifi.json; -import java.io.IOException; -import java.io.OutputStream; -import java.math.BigInteger; -import java.text.DateFormat; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.function.Supplier; - -import org.apache.nifi.record.NullSuppression; import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.record.NullSuppression; import org.apache.nifi.schema.access.SchemaAccessWriter; import org.apache.nifi.serialization.AbstractRecordSetWriter; import org.apache.nifi.serialization.RecordSetWriter; @@ -49,6 +40,15 @@ import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.JsonGenerator; import org.codehaus.jackson.util.MinimalPrettyPrinter; +import java.io.IOException; +import java.io.OutputStream; +import java.math.BigInteger; +import java.text.DateFormat; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.function.Supplier; + public class WriteJsonResult extends AbstractRecordSetWriter implements RecordSetWriter, RawRecordWriter { private final ComponentLog logger; private final SchemaAccessWriter schemaAccess; @@ -376,7 +376,7 @@ public class WriteJsonResult extends AbstractRecordSetWriter implements RecordSe default: if (coercedValue instanceof Object[]) { final Object[] values = (Object[]) coercedValue; - final ArrayDataType arrayDataType = (ArrayDataType) dataType; + final ArrayDataType arrayDataType = (ArrayDataType) chosenDataType; final DataType elementType = arrayDataType.getElementType(); writeArray(values, fieldName, generator, elementType); } else { http://git-wip-us.apache.org/repos/asf/nifi/blob/db966cf3/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/json/TestWriteJsonResult.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/json/TestWriteJsonResult.java b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/json/TestWriteJsonResult.java index 3d26e74..75447f2 100755 --- a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/json/TestWriteJsonResult.java +++ b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/json/TestWriteJsonResult.java @@ -17,7 +17,20 @@ package org.apache.nifi.json; -import static org.junit.Assert.assertEquals; +import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.record.NullSuppression; +import org.apache.nifi.schema.access.SchemaNameAsAttribute; +import org.apache.nifi.serialization.SimpleRecordSchema; +import org.apache.nifi.serialization.record.DataType; +import org.apache.nifi.serialization.record.MapRecord; +import org.apache.nifi.serialization.record.Record; +import org.apache.nifi.serialization.record.RecordField; +import org.apache.nifi.serialization.record.RecordFieldType; +import org.apache.nifi.serialization.record.RecordSchema; +import org.apache.nifi.serialization.record.RecordSet; +import org.apache.nifi.serialization.record.SerializedForm; +import org.junit.Test; +import org.mockito.Mockito; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -38,20 +51,7 @@ import java.util.List; import java.util.Map; import java.util.TimeZone; -import org.apache.nifi.record.NullSuppression; -import org.apache.nifi.logging.ComponentLog; -import org.apache.nifi.schema.access.SchemaNameAsAttribute; -import org.apache.nifi.serialization.SimpleRecordSchema; -import org.apache.nifi.serialization.record.DataType; -import org.apache.nifi.serialization.record.MapRecord; -import org.apache.nifi.serialization.record.Record; -import org.apache.nifi.serialization.record.RecordField; -import org.apache.nifi.serialization.record.RecordFieldType; -import org.apache.nifi.serialization.record.RecordSchema; -import org.apache.nifi.serialization.record.RecordSet; -import org.apache.nifi.serialization.record.SerializedForm; -import org.junit.Test; -import org.mockito.Mockito; +import static org.junit.Assert.assertEquals; public class TestWriteJsonResult { @@ -472,4 +472,33 @@ public class TestWriteJsonResult { final String output = new String(data, StandardCharsets.UTF_8); assertEquals(expected, output); } + + @Test + public void testChoiceArray() throws IOException { + final List<RecordField> fields = new ArrayList<>(); + fields.add(new RecordField("path", RecordFieldType.CHOICE.getChoiceDataType(RecordFieldType.ARRAY.getArrayDataType(RecordFieldType.STRING.getDataType())))); + final RecordSchema schema = new SimpleRecordSchema(fields); + + Object[] paths = new Object[1]; + paths[0] = "10.2.1.3"; + + final Map<String, Object> values = new HashMap<>(); + values.put("path", paths); + final Record record = new MapRecord(schema, values); + + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try (final WriteJsonResult writer = new WriteJsonResult(Mockito.mock(ComponentLog.class), schema, new SchemaNameAsAttribute(), baos, false, + NullSuppression.NEVER_SUPPRESS, OutputGrouping.OUTPUT_ARRAY, null, null, null)) { + writer.beginRecordSet(); + writer.writeRecord(record); + writer.finishRecordSet(); + } + + final byte[] data = baos.toByteArray(); + + final String expected = "[{\"path\":[\"10.2.1.3\"]}]"; + + final String output = new String(data, StandardCharsets.UTF_8); + assertEquals(expected, output); + } }