mirror of https://github.com/apache/nifi.git
NIFI-12704 Avoid NPE in escapeJson() for Root Path
This closes #8450 Signed-off-by: David Handermann <exceptionfactory@apache.org>
This commit is contained in:
parent
bd1ad8f9f4
commit
a52d6a8214
|
@ -130,6 +130,10 @@ public class RecordPathCompiler {
|
||||||
return new RootPath();
|
return new RootPath();
|
||||||
}
|
}
|
||||||
case CHILD_REFERENCE: {
|
case CHILD_REFERENCE: {
|
||||||
|
if (tree.getChildCount() == 0) {
|
||||||
|
return new RootPath();
|
||||||
|
}
|
||||||
|
|
||||||
final Tree childTree = tree.getChild(0);
|
final Tree childTree = tree.getChild(0);
|
||||||
if (childTree == null) {
|
if (childTree == null) {
|
||||||
return new RootPath();
|
return new RootPath();
|
||||||
|
|
|
@ -2287,6 +2287,17 @@ public class TestRecordPath {
|
||||||
assertEquals(48, fieldValues.get(0).getValue());
|
assertEquals(48, fieldValues.get(0).getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRecordRootReferenceInFunction() {
|
||||||
|
final Record record = createSimpleRecord();
|
||||||
|
|
||||||
|
final FieldValue singleArgumentFieldValue = evaluateSingleFieldValue("escapeJson(/)", record);
|
||||||
|
assertEquals("{\"id\":48,\"name\":\"John Doe\",\"missing\":null}", singleArgumentFieldValue.getValue());
|
||||||
|
final FieldValue multipleArgumentsFieldValue = evaluateSingleFieldValue("mapOf(\"copy\",/)", record);
|
||||||
|
assertInstanceOf(MapRecord.class, multipleArgumentsFieldValue.getValue());
|
||||||
|
assertEquals(record.toString(), ((MapRecord) multipleArgumentsFieldValue.getValue()).getValue("copy"));
|
||||||
|
}
|
||||||
|
|
||||||
private List<RecordField> getDefaultFields() {
|
private List<RecordField> getDefaultFields() {
|
||||||
final List<RecordField> fields = new ArrayList<>();
|
final List<RecordField> fields = new ArrayList<>();
|
||||||
fields.add(new RecordField("id", RecordFieldType.INT.getDataType()));
|
fields.add(new RecordField("id", RecordFieldType.INT.getDataType()));
|
||||||
|
@ -2339,4 +2350,11 @@ public class TestRecordPath {
|
||||||
return new MapRecord(schema, values);
|
return new MapRecord(schema, values);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static FieldValue evaluateSingleFieldValue(RecordPath recordPath, Record record) {
|
||||||
|
return recordPath.evaluate(record).getSelectedFields().findFirst().get();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static FieldValue evaluateSingleFieldValue(String path, Record record) {
|
||||||
|
return evaluateSingleFieldValue(RecordPath.compile(path), record);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue