[ 
https://issues.apache.org/jira/browse/NIFI-9890?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Martin Hynar resolved NIFI-9890.
--------------------------------
    Fix Version/s: 1.20.0
       Resolution: Fixed

The problem is eventually fixed in 1.20.0

> Record conversion fails in JoltTransformREcord
> ----------------------------------------------
>
>                 Key: NIFI-9890
>                 URL: https://issues.apache.org/jira/browse/NIFI-9890
>             Project: Apache NiFi
>          Issue Type: Bug
>    Affects Versions: 1.15.3
>            Reporter: Martin Hynar
>            Priority: Major
>             Fix For: 1.20.0
>
>
> Hello, I am struggling with JOLT transformation of record flow file. The flow 
> is quite simple
>  # Consume records from Kafka - ConsumeKafkaRecord, where reader is Avro 
> Reader Confluent Reference and writer is Json Record Set - this step is OK 
> and flowfiles are correctly sent to success.
>  # Transform records - using JoltTransformRecord, with JsonTreeReader and 
> Json Record Set Writer - the transformation is very simple, new field is 
> created from existing fields. On writing result, bellow exception is thrown. 
> Worth mentioning, the problematic field is not used in the transformation at 
> all.
> The exception is this
>  
> {code:java}
> 2022-04-07 03:32:40,170 ERROR [Timer-Driven Process Thread-1] 
> o.a.n.p.jolt.record.JoltTransformRecord 
> JoltTransformRecord[id=2ea633ad-c1f3-1909-0000-0000686dd600] Unable to 
> transform 
> StandardFlowFileRecord[uuid=e32039eb-e7f9-46ea-a7a4-ad9cf3709b71,claim=StandardContentClaim
>  [resourceClaim=StandardResourceClaim[id=1649063785609-18280, 
> container=default, section=872], offset=381094, 
> length=1143917],offset=0,name=e32039eb-e7f9-46ea-a7a4-ad9cf3709b71,size=1143917]
>  due to 
> org.apache.nifi.serialization.record.util.IllegalTypeConversionException: 
> Cannot convert value [[Ljava.lang.Object;@d786ea4] of type 
> CHOICE[ARRAY[STRING], ARRAY[INT]] to Map for field IgnoreIssues because the 
> type is not supported: 
> org.apache.nifi.serialization.record.util.IllegalTypeConversionException: 
> Cannot convert value [[Ljava.lang.Object;@d786ea4] of type 
> CHOICE[ARRAY[STRING], ARRAY[INT]] to Map for field IgnoreIssues because the 
> type is not supported
> org.apache.nifi.serialization.record.util.IllegalTypeConversionException: 
> Cannot convert value [[Ljava.lang.Object;@d786ea4] of type 
> CHOICE[ARRAY[STRING], ARRAY[INT]] to Map for field IgnoreIssues because the 
> type is not supported
>     at 
> org.apache.nifi.serialization.record.util.DataTypeUtils.convertRecordFieldtoObject(DataTypeUtils.java:858)
>     at 
> org.apache.nifi.processors.jolt.record.JoltTransformRecord.transform(JoltTransformRecord.java:409)
>     at 
> org.apache.nifi.processors.jolt.record.JoltTransformRecord.onTrigger(JoltTransformRecord.java:334)
>     at 
> org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
>     at 
> org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1273)
>     at 
> org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:214)
>     at 
> org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:103)
>     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) {code}
>  
> What I found about the field is that in the record, there are these values
> {noformat}
>   "IgnoreIssues" : [ ],
>   "IgnoreIssues" : [ ],
>   "IgnoreIssues" : [ 0 ],
>   "IgnoreIssues" : [ 0 ],
>   "IgnoreIssues" : [ ],
>   "IgnoreIssues" : [ ],
> {noformat}
> so, single value arrays mixed with empty arrays.
>  
> Also, what I tried was to redirect all failed flow files into SplitRecord 
> processor with max records = 1. When these single record flowfiles were 
> returned to the same transformation, they passed.
> The array is very often empty and I have flow files that pass the 
> transformation, I think it is when all records have empty array in this field.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to