[ https://issues.apache.org/jira/browse/NIFI-12704?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Pierre Villard updated NIFI-12704: ---------------------------------- Fix Version/s: 2.0.0-M4 > 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 > Fix For: 2.0.0-M4, 1.27.0 > > 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)