Sanghavi created NIFI-11786:
-------------------------------
Summary: JsonTreeReader with InferSchema generating
NullPointerException for Specific inputs
Key: NIFI-11786
URL: https://issues.apache.org/jira/browse/NIFI-11786
Project: Apache NiFi
Issue Type: Bug
Components: Core Framework
Affects Versions: 1.21.0
Reporter: Sanghavi
Attachments: TestSplitNullPointer.json, TestSplitNullPointer.png
As part of a Dataflow, we were trying to split the list of controller services
(response from API - /nifi-api/flow/controller/controller-services) using
SplitRecord processor with JsonTreeReader and JsonRecordSetWriter controller
services (both running on Infer schema mode).
During which we noticed that, among the list of controller service, if a
controller service record having reference components containing "bulletins"
field populated then schema is generating *"bulletins" : "ARRAY[null]"* instead
of {*}"bulletins" : "ARRAY[RECORD]"{*}.
Due to which _isCompatibleDataType_ function of _DataTypeUtils_ is unable to
process null datatype resulting in NullPointerException.
Please find below the stack trace:-
~java.lang.NullPointerException: null~
~at
org.apache.nifi.serialization.record.util.DataTypeUtils.isCompatibleDataType(DataTypeUtils.java:282)~
~at
org.apache.nifi.serialization.record.util.DataTypeUtils.isArrayTypeCompatible(DataTypeUtils.java:786)~
~at
org.apache.nifi.serialization.record.util.DataTypeUtils.isCompatibleDataType(DataTypeUtils.java:284)~
~at
org.apache.nifi.serialization.record.util.DataTypeUtils.isRecordTypeCompatible(DataTypeUtils.java:693)~
~at
org.apache.nifi.serialization.record.util.DataTypeUtils.isCompatibleDataType(DataTypeUtils.java:307)~
~at
org.apache.nifi.serialization.record.util.DataTypeUtils.isArrayTypeCompatible(DataTypeUtils.java:786)~
~at
org.apache.nifi.serialization.record.util.DataTypeUtils.isCompatibleDataType(DataTypeUtils.java:284)~
~at
org.apache.nifi.serialization.record.util.DataTypeUtils.isCompatibleDataType(DataTypeUtils.java:278)~
~at
org.apache.nifi.serialization.record.util.DataTypeUtils.chooseDataType(DataTypeUtils.java:339)~
~at
org.apache.nifi.serialization.record.util.DataTypeUtils.convertType(DataTypeUtils.java:226)~
~at
org.apache.nifi.serialization.record.util.DataTypeUtils.convertType(DataTypeUtils.java:154)~
~at
org.apache.nifi.serialization.record.util.DataTypeUtils.convertType(DataTypeUtils.java:150)~
~at
org.apache.nifi.json.JsonTreeRowRecordReader.convertField(JsonTreeRowRecordReader.java:259)~
~at
org.apache.nifi.json.JsonTreeRowRecordReader.convertJsonNodeToRecord(JsonTreeRowRecordReader.java:168)~
~at
org.apache.nifi.json.JsonTreeRowRecordReader.convertField(JsonTreeRowRecordReader.java:253)~
~at
org.apache.nifi.json.JsonTreeRowRecordReader.convertJsonNodeToRecord(JsonTreeRowRecordReader.java:168)~
~at
org.apache.nifi.json.JsonTreeRowRecordReader.convertJsonNodeToRecord(JsonTreeRowRecordReader.java:114)~
~at
org.apache.nifi.json.JsonTreeRowRecordReader.convertJsonNodeToRecord(JsonTreeRowRecordReader.java:105)~
~at
org.apache.nifi.json.AbstractJsonRowRecordReader.nextRecord(AbstractJsonRowRecordReader.java:181)~
~at
org.apache.nifi.serialization.RecordReader.nextRecord(RecordReader.java:50)~
~at org.apache.nifi.serialization.RecordReader$1.next(RecordReader.java:96)~
~at
org.apache.nifi.serialization.record.PushBackRecordSet.next(PushBackRecordSet.java:43)~
~at
org.apache.nifi.serialization.record.PushBackRecordSet.isAnotherRecord(PushBackRecordSet.java:59)~
~at
org.apache.nifi.processors.standard.SplitRecord$1.process(SplitRecord.java:164)~
~at
org.apache.nifi.controller.repository.StandardProcessSession.read(StandardProcessSession.java:2692)~
~at
org.apache.nifi.controller.repository.StandardProcessSession.read(StandardProcessSession.java:2660)~
~at
org.apache.nifi.processors.standard.SplitRecord.onTrigger(SplitRecord.java:153)~
~at
org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)~
~at
org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1360)~
~at
org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:246)~
~at
org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:102)~
~at org.apache.nifi.engine.FlowEngine$2.run(FlowEngine.java:110)~
~at
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)~
~at
java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)~
~at
java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)~
~at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)~
~at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)~
~at java.base/java.lang.Thread.run(Thread.java:834)~
This setup was tested in 1.18.0, and with same configuration we are getting
expected results.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)