[ 
https://issues.apache.org/jira/browse/NIFI-5664?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16641165#comment-16641165
 ] 

ASF GitHub Bot commented on NIFI-5664:
--------------------------------------

Github user snagacarl commented on the issue:

    https://github.com/apache/nifi/pull/3049
  
    Great suggestions.  I can incorporate and re-test this week.  Thanks for 
your feedback!


> LookupRecord cannot handle JSON array properties from MongoDBLookupService
> --------------------------------------------------------------------------
>
>                 Key: NIFI-5664
>                 URL: https://issues.apache.org/jira/browse/NIFI-5664
>             Project: Apache NiFi
>          Issue Type: Bug
>          Components: Core Framework
>    Affects Versions: 1.8.0, 1.7.1
>            Reporter: Carl Gieringer
>            Priority: Major
>
> We are using a LookupRecord processor to add an array property to a Record.  
> The LookupRecord's `Lookup Service` is a MongoDBLookupService. The idea is 
> for the LookupRecord to query Mongo documents by the Record's `_id`, to 
> extract the array property at `f` on that document, and to insert that array 
> into the Record at the RecordPath `f`. This flow results in the conversion 
> error copied below, which completely prevents the FlowFile from proceeding 
> (routes to Failure/Unmatched.) It appears that the `MongoDBLookupService` (or 
> perhaps its `MongoDBControllerService`) stores Mongo document arrays as 
> `ArrayList`s, which `DataTypeUtils#toArray` does not support. A simple fix 
> appears to be to add a few lines to `DataTypeUtils#toArray` to support 
> `ArrayList`s. I will provide a PR for this issue.
> This issue appears in 1.7.1, and is extant in 1.8.0-SNAPSHOT (2018-10-02 
> b4c8e0179). I am not aware of any workaround to enrich a Record with an array 
> from Mongo.
> LookupRecord Configuration
> ||Property||Value||
> |Result RecordPath|/f|
> |Record Result Contents|Insert Entire Record|
> |_id|/_id|
> MongoDBLookupService Configuration
> ||Property||Value||
> |Lookup Value Field|f|
> Conversion error (with irrelevant Mongo document and schema properties 
> elided):
> {code:java}
> 2018-10-04 15:00:31,348 ERROR [Timer-Driven Process Thread-1] 
> o.a.n.processors.standard.LookupRecord 
> LookupRecord[id=339bf72c-91c3-36f0-ac14-bc8b734e2582] Failed to write 
> MapRecord[{... f=[Document{{fid=5762addaffa7cf0980267acb, l=1.0}}, 
> Document{{fid=5762adf32fc74d0418104201, l=2.12}}, 
> Document{{fid=5762addd18b8b607802fec6f, l=3.32}}, 
> Document{{fid=587542dd638e870838a79d08, l=1.0}}, 
> Document{{fid=5762addbffa7cf0980267acd, l=3.32}}], 
> i=[Ljava.lang.Object;@35dee8fc, ...] with schema {
>   "namespace": "nifi",
>   "name": "MongoPosting",
>   "type": "record",
>   "fields": [
>     ...
>     { "name": "f", "type": [
>         "null",
>         { "type": "array", "items": {
>             "type": "record", "name": "PostingFeatureDetails", "fields": [
>                 { "name": "fid", "type": "string" },
>                 { "name": "l" , "type": ["null", "double"] }
>             ]}
>         }
>     ]},
>     ...
>   ]
> } as a JSON Object due to 
> org.apache.nifi.serialization.record.util.IllegalTypeConversionException: 
> Cannot convert value [[Document{{fid=5762addaffa7cf0980267acb, l=1.0}}, 
> Document{{fid=5762adf32fc74d0418104201, l=2.12}}, 
> Document{{fid=5762addd18b8b607802fec6f, l=3.32}}, 
> Document{{fid=587542dd638e870838a79d08, l=1.0}}, 
> Document{{fid=5762addbffa7cf0980267acd, l=3.32}}]] of type class 
> java.util.ArrayList to Object Array for field f: 
> org.apache.nifi.serialization.record.util.IllegalTypeConversionException: 
> Cannot convert value [[Document{{fid=5762addaffa7cf0980267acb, l=1.0}}, 
> Document{{fid=5762adf32fc74d0418104201, l=2.12}}, 
> Document{{fid=5762addd18b8b607802fec6f, l=3.32}}, 
> Document{{fid=587542dd638e870838a79d08, l=1.0}}, 
> Document{{fid=5762addbffa7cf0980267acd, l=3.32}}]] of type class 
> java.util.ArrayList to Object Array for field f
> org.apache.nifi.serialization.record.util.IllegalTypeConversionException: 
> Cannot convert value [[Document{{fid=5762addaffa7cf0980267acb, l=1.0}}, 
> Document{{fid=5762adf32fc74d0418104201, l=2.12}}, 
> Document{{fid=5762addd18b8b607802fec6f, l=3.32}}, 
> Document{{fid=587542dd638e870838a79d08, l=1.0}}, 
> Document{{fid=5762addbffa7cf0980267acd, l=3.32}}]] of type class 
> java.util.ArrayList to Object Array for field f
>     at 
> org.apache.nifi.serialization.record.util.DataTypeUtils.toArray(DataTypeUtils.java:347)
>     at 
> org.apache.nifi.serialization.record.util.DataTypeUtils.convertType(DataTypeUtils.java:153)
>     at 
> org.apache.nifi.serialization.record.util.DataTypeUtils.convertType(DataTypeUtils.java:115)
>     at 
> org.apache.nifi.json.WriteJsonResult.writeValue(WriteJsonResult.java:284)
>     at 
> org.apache.nifi.json.WriteJsonResult.writeRecord(WriteJsonResult.java:187)
>     at 
> org.apache.nifi.json.WriteJsonResult.writeRecord(WriteJsonResult.java:136)
>     at 
> org.apache.nifi.serialization.AbstractRecordSetWriter.write(AbstractRecordSetWriter.java:59)
>     at 
> org.apache.nifi.processors.standard.AbstractRouteRecord$1.process(AbstractRouteRecord.java:148)
>     at 
> org.apache.nifi.controller.repository.StandardProcessSession.read(StandardProcessSession.java:2218)
>     at 
> org.apache.nifi.controller.repository.StandardProcessSession.read(StandardProcessSession.java:2186)
>     at 
> org.apache.nifi.processors.standard.AbstractRouteRecord.onTrigger(AbstractRouteRecord.java:121)
>     at 
> org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
>     at 
> org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1165)
>     at 
> org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:203)
>     at 
> org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:117)
>     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>     at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
>     at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
>     at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
>     at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>     at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>     at java.lang.Thread.run(Thread.java:748)
> 2018-10-04 15:00:31,349 ERROR [Timer-Driven Process Thread-1] 
> o.a.n.processors.standard.LookupRecord 
> LookupRecord[id=339bf72c-91c3-36f0-ac14-bc8b734e2582] Failed to process 
> StandardFlowFileRecord[uuid=29b498fe-787f-4c62-a237-f95a8ebcb0b2,claim=StandardContentClaim
>  [resourceClaim=StandardResourceClaim[id=1538665215854-2, container=default, 
> section=2], offset=100486, 
> length=635840],offset=624238,name=1675395032391,size=11602]: 
> org.apache.nifi.serialization.record.util.IllegalTypeConversionException: 
> Cannot convert value [[Document{{fid=5762addaffa7cf0980267acb, l=1.0}}, 
> Document{{fid=5762adf32fc74d0418104201, l=2.12}}, 
> Document{{fid=5762addd18b8b607802fec6f, l=3.32}}, 
> Document{{fid=587542dd638e870838a79d08, l=1.0}}, 
> Document{{fid=5762addbffa7cf0980267acd, l=3.32}}]] of type class 
> java.util.ArrayList to Object Array for field f
> org.apache.nifi.serialization.record.util.IllegalTypeConversionException: 
> Cannot convert value [[Document{{fid=5762addaffa7cf0980267acb, l=1.0}}, 
> Document{{fid=5762adf32fc74d0418104201, l=2.12}}, 
> Document{{fid=5762addd18b8b607802fec6f, l=3.32}}, 
> Document{{fid=587542dd638e870838a79d08, l=1.0}}, 
> Document{{fid=5762addbffa7cf0980267acd, l=3.32}}]] of type class 
> java.util.ArrayList to Object Array for field f
>     at 
> org.apache.nifi.serialization.record.util.DataTypeUtils.toArray(DataTypeUtils.java:347)
>     at 
> org.apache.nifi.serialization.record.util.DataTypeUtils.convertType(DataTypeUtils.java:153)
>     at 
> org.apache.nifi.serialization.record.util.DataTypeUtils.convertType(DataTypeUtils.java:115)
>     at 
> org.apache.nifi.json.WriteJsonResult.writeValue(WriteJsonResult.java:284)
>     at 
> org.apache.nifi.json.WriteJsonResult.writeRecord(WriteJsonResult.java:187)
>     at 
> org.apache.nifi.json.WriteJsonResult.writeRecord(WriteJsonResult.java:136)
>     at 
> org.apache.nifi.serialization.AbstractRecordSetWriter.write(AbstractRecordSetWriter.java:59)
>     at 
> org.apache.nifi.processors.standard.AbstractRouteRecord$1.process(AbstractRouteRecord.java:148)
>     at 
> org.apache.nifi.controller.repository.StandardProcessSession.read(StandardProcessSession.java:2218)
>     at 
> org.apache.nifi.controller.repository.StandardProcessSession.read(StandardProcessSession.java:2186)
>     at 
> org.apache.nifi.processors.standard.AbstractRouteRecord.onTrigger(AbstractRouteRecord.java:121)
>     at 
> org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
>     at 
> org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1165)
>     at 
> org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:203)
>     at 
> org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:117)
>     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>     at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
>     at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
>     at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
>     at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>     at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>     at java.lang.Thread.run(Thread.java:748){code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to