[
https://issues.apache.org/jira/browse/NIFI-12704?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17855696#comment-17855696
]
ASF subversion and git services commented on NIFI-12704:
--------------------------------------------------------
Commit a52d6a8214dc2b323ae238a87eb5fc7571de72cc in nifi's branch
refs/heads/main from EndzeitBegins
[ https://gitbox.apache.org/repos/asf?p=nifi.git;h=a52d6a8214 ]
NIFI-12704 Avoid NPE in escapeJson() for Root Path
This closes #8450
Signed-off-by: David Handermann <[email protected]>
> Record Path function escapeJson raises NPE when given root "/" as argument
> --------------------------------------------------------------------------
>
> Key: NIFI-12704
> URL: https://issues.apache.org/jira/browse/NIFI-12704
> Project: Apache NiFi
> Issue Type: Bug
> Components: Core Framework
> Affects Versions: 1.24.0, 2.0.0-M2
> Environment: Docker, RedHat 8
> Reporter: Stephen Jeffrey Hindmarch
> Assignee: endzeit
> Priority: Minor
> Time Spent: 1h
> Remaining Estimate: 0h
>
> My use case is I want to create a field called "original" which is the
> escaped string of my whole record. This will preserve the original contents
> of the message before I start transforming it.
> My expectation is that I should be able to use an UpdateRecord processor to
> create the field using RecordPath language.
> What actually happens is that when I use
> {code:java}
> escapeJson(/)
> {code}
> as the function the result is that the processor throws a Null Pointer
> Exception (NPE).
> Detail:
> For any input flow file containing JSON records, define an UpdateRecord
> processor with these settings.
> * Replacement Value Strategy = Record Path Value
> * /original = escapeJson(/)
> When the flow file is presented to the processor, the processor generates an
> NPE.
> For example, I present this record.
> {noformat}
> [{"hello":"world","record":{"key":"one","value":"hello","subrecord":{"key":"two","value":"bob"}},"array":[0,1,2]}]{noformat}
> If the escapeJson function is offered an existing field to escape then it
> works as expected. Stack trace as follows.
> {noformat}
> 2024-01-31 12:17:15 2024-01-31 12:17:14,741 ERROR [Timer-Driven Process
> Thread-8] o.a.n.processors.standard.UpdateRecord
> UpdateRecord[id=5f6b498d-018d-1000-0000-0000323c6b89] Failed to process
> StandardFlowFileRecord[uuid=2d4a3eab-e752-4117-93d3-3e5515b6f3f8,claim=StandardContentClaim
> [resourceClaim=StandardResourceClaim[id=1706703050563-1, container=default,
> section=1], offset=114,
> length=114],offset=0,name=2d4a3eab-e752-4117-93d3-3e5515b6f3f8,size=114];
> will route to failure
> 2024-01-31 12:17:15
> org.apache.nifi.record.path.exception.RecordPathException:
> java.lang.NullPointerException
> 2024-01-31 12:17:15 at
> org.apache.nifi.record.path.RecordPath.compile(RecordPath.java:105)
> 2024-01-31 12:17:15 at
> com.github.benmanes.caffeine.cache.LocalLoadingCache.lambda$newMappingFunction$2(LocalLoadingCache.java:145)
> 2024-01-31 12:17:15 at
> com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2406)
> 2024-01-31 12:17:15 at
> java.base/java.util.concurrent.ConcurrentHashMap.compute(Unknown Source)
> 2024-01-31 12:17:15 at
> com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2404)
> 2024-01-31 12:17:15 at
> com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2387)
> 2024-01-31 12:17:15 at
> com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:108)
> 2024-01-31 12:17:15 at
> com.github.benmanes.caffeine.cache.LocalLoadingCache.get(LocalLoadingCache.java:56)
> 2024-01-31 12:17:15 at
> org.apache.nifi.record.path.util.RecordPathCache.getCompiled(RecordPathCache.java:34)
> 2024-01-31 12:17:15 at
> org.apache.nifi.processors.standard.UpdateRecord.process(UpdateRecord.java:166)
> 2024-01-31 12:17:15 at
> org.apache.nifi.processors.standard.AbstractRecordProcessor$1.process(AbstractRecordProcessor.java:147)
> 2024-01-31 12:17:15 at
> org.apache.nifi.controller.repository.StandardProcessSession.write(StandardProcessSession.java:3432)
> 2024-01-31 12:17:15 at
> org.apache.nifi.processors.standard.AbstractRecordProcessor.onTrigger(AbstractRecordProcessor.java:122)
> 2024-01-31 12:17:15 at
> org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
> 2024-01-31 12:17:15 at
> org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1361)
> 2024-01-31 12:17:15 at
> org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:247)
> 2024-01-31 12:17:15 at
> org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:102)
> 2024-01-31 12:17:15 at
> org.apache.nifi.engine.FlowEngine$2.run(FlowEngine.java:110)
> 2024-01-31 12:17:15 at
> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
> 2024-01-31 12:17:15 at
> java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source)
> 2024-01-31 12:17:15 at
> java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown
> Source)
> 2024-01-31 12:17:15 at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
> 2024-01-31 12:17:15 at
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
> 2024-01-31 12:17:15 at java.base/java.lang.Thread.run(Unknown Source)
> 2024-01-31 12:17:15 Caused by: java.lang.NullPointerException: null
> 2024-01-31 12:17:15 at
> org.apache.nifi.record.path.paths.RecordPathCompiler.buildPath(RecordPathCompiler.java:131)
> 2024-01-31 12:17:15 at
> org.apache.nifi.record.path.paths.RecordPathCompiler.getArgPaths(RecordPathCompiler.java:511)
> 2024-01-31 12:17:15 at
> org.apache.nifi.record.path.paths.RecordPathCompiler.buildPath(RecordPathCompiler.java:328)
> 2024-01-31 12:17:15 at
> org.apache.nifi.record.path.paths.RecordPathCompiler.compile(RecordPathCompiler.java:100)
> 2024-01-31 12:17:15 at
> org.apache.nifi.record.path.RecordPath.compile(RecordPath.java:101)
> 2024-01-31 12:17:15 ... 23 common frames omitted{noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)