mirror of https://github.com/apache/nifi.git
NIFI-7909: Change DataTypeUtils.toInteger() to use Math.toIntExact()
This closes #4596 Signed-off-by: Mike Thomsen <mthomsen@apache.org>
This commit is contained in:
parent
c2960998ac
commit
4c235f0405
|
@ -1525,7 +1525,12 @@ public class DataTypeUtils {
|
|||
}
|
||||
|
||||
if (value instanceof Number) {
|
||||
return ((Number) value).intValue();
|
||||
try {
|
||||
return Math.toIntExact(((Number) value).longValue());
|
||||
} catch (ArithmeticException ae) {
|
||||
throw new IllegalTypeConversionException("Cannot convert value [" + value + "] of type " + value.getClass() + " to Integer for field " + fieldName
|
||||
+ " as it causes an arithmetic overflow (the value is too large, e.g.)", ae);
|
||||
}
|
||||
}
|
||||
|
||||
if (value instanceof String) {
|
||||
|
|
|
@ -594,6 +594,7 @@
|
|||
<exclude>src/test/resources/TestForkRecord/schema/schema.avsc</exclude>
|
||||
<exclude>src/test/resources/TestConvertRecord/schema/person.avsc</exclude>
|
||||
<exclude>src/test/resources/TestConvertRecord/input/person.json</exclude>
|
||||
<exclude>src/test/resources/TestConvertRecord/input/person_long_id.json</exclude>
|
||||
<exclude>src/test/resources/TestValidateRecord/missing-array.json</exclude>
|
||||
<exclude>src/test/resources/TestValidateRecord/missing-array.avsc</exclude>
|
||||
<exclude>src/test/resources/TestValidateRecord/missing-array-with-default.avsc</exclude>
|
||||
|
|
|
@ -279,4 +279,34 @@ public class TestConvertRecord {
|
|||
"`123`\t`John`\t`|'^`\n";
|
||||
assertEquals(expected, new String(flowFile.toByteArray()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJSONLongToInt() throws InitializationException, IOException {
|
||||
final TestRunner runner = TestRunners.newTestRunner(ConvertRecord.class);
|
||||
final JsonTreeReader jsonReader = new JsonTreeReader();
|
||||
runner.addControllerService("reader", jsonReader);
|
||||
|
||||
final String inputSchemaText = new String(Files.readAllBytes(Paths.get("src/test/resources/TestConvertRecord/schema/person.avsc")));
|
||||
final String outputSchemaText = new String(Files.readAllBytes(Paths.get("src/test/resources/TestConvertRecord/schema/person.avsc")));
|
||||
|
||||
runner.setProperty(jsonReader, SchemaAccessUtils.SCHEMA_ACCESS_STRATEGY, SchemaAccessUtils.SCHEMA_TEXT_PROPERTY);
|
||||
runner.setProperty(jsonReader, SchemaAccessUtils.SCHEMA_TEXT, inputSchemaText);
|
||||
runner.enableControllerService(jsonReader);
|
||||
|
||||
final JsonRecordSetWriter jsonWriter = new JsonRecordSetWriter();
|
||||
runner.addControllerService("writer", jsonWriter);
|
||||
runner.setProperty(jsonWriter, SchemaAccessUtils.SCHEMA_ACCESS_STRATEGY, SchemaAccessUtils.SCHEMA_TEXT_PROPERTY);
|
||||
runner.setProperty(jsonWriter, SchemaAccessUtils.SCHEMA_TEXT, outputSchemaText);
|
||||
runner.setProperty(jsonWriter, "Pretty Print JSON", "true");
|
||||
runner.setProperty(jsonWriter, "Schema Write Strategy", "full-schema-attribute");
|
||||
runner.enableControllerService(jsonWriter);
|
||||
|
||||
runner.enqueue(Paths.get("src/test/resources/TestConvertRecord/input/person_long_id.json"));
|
||||
|
||||
runner.setProperty(ConvertRecord.RECORD_READER, "reader");
|
||||
runner.setProperty(ConvertRecord.RECORD_WRITER, "writer");
|
||||
|
||||
runner.run();
|
||||
runner.assertAllFlowFilesTransferred(ConvertRecord.REL_FAILURE, 1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
[ {
|
||||
"id" : 2156760545,
|
||||
"name" : {
|
||||
"last" : "Doe",
|
||||
"first" : "John"
|
||||
}
|
||||
} ]
|
Loading…
Reference in New Issue