[
https://issues.apache.org/jira/browse/NIFI-5894?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17833185#comment-17833185
]
René Zeidler edited comment on NIFI-5894 at 4/2/24 12:59 PM:
-------------------------------------------------------------
I encountered the same NPE on NiFi 1.23.2 using a PutFTP processor:
{code:java}
java.lang.NullPointerException: Cannot invoke
"java.util.Calendar.getTimeInMillis()" because the return value of
"org.apache.commons.net.ftp.FTPFile.getTimestamp()" is null
at
org.apache.nifi.processors.standard.util.FTPTransfer.newFileInfo(FTPTransfer.java:319)
at
org.apache.nifi.processors.standard.util.FTPTransfer.getRemoteFileInfo(FTPTransfer.java:382)
at
org.apache.nifi.processors.standard.PutFileTransfer.identifyAndResolveConflictFile(PutFileTransfer.java:211)
at
org.apache.nifi.processors.standard.PutFileTransfer.onTrigger(PutFileTransfer.java:117)
at
org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
at
org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1361)
at
org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:247)
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:572)
at
java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358)
at
java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583){code}
The FTP server (a FileZilla FTP server) returned a null timestamp only for a
certain file. After manually deleting and uploading the file, it now returns
the correct timestamp, so I can't reproduce the scenario. However, FTP servers
returning null timestamps seems to be possible, so adding a check for it
instead of letting the processor fail with an uncaught NPE seems to make sense.
The relevant part of the code hasn't changed in the current main branch, so the
issue still occurs:
https://github.com/apache/nifi/blob/322deaa23eb5141174bb2c25b97b2a96b2596eac/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/FTPTransfer.java#L321
was (Author: JIRAUSER297247):
I encountered the same NPE on NiFi 1.23.2 using a PutFTP processor:
{code:java}
java.lang.NullPointerException: Cannot invoke
"java.util.Calendar.getTimeInMillis()" because the return value of
"org.apache.commons.net.ftp.FTPFile.getTimestamp()" is null
at
org.apache.nifi.processors.standard.util.FTPTransfer.newFileInfo(FTPTransfer.java:319)
at
org.apache.nifi.processors.standard.util.FTPTransfer.getRemoteFileInfo(FTPTransfer.java:382)
at
org.apache.nifi.processors.standard.PutFileTransfer.identifyAndResolveConflictFile(PutFileTransfer.java:211)
at
org.apache.nifi.processors.standard.PutFileTransfer.onTrigger(PutFileTransfer.java:117)
at
org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
at
org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1361)
at
org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:247)
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:572)
at
java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358)
at
java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583){code}
> FTPTransfer NullPointerException - FTPFile.getTimestamp() returns null
> ----------------------------------------------------------------------
>
> Key: NIFI-5894
> URL: https://issues.apache.org/jira/browse/NIFI-5894
> Project: Apache NiFi
> Issue Type: Bug
> Components: Extensions
> Affects Versions: 1.8.0
> Reporter: henning ottesen
> Assignee: Eric Ulicny
> Priority: Major
> Time Spent: 1h 20m
> Remaining Estimate: 0h
>
> 2018-12-13 10:34:07,405 WARN [Timer-Driven Process Thread-2]
> o.a.n.controller.tasks.ConnectableTask Administratively Yielding
> ListFTP[id=a6cee9c8-0167-1000-2bc2-5e69d2e33af5] due to uncaught Exception:
> java.lang.NullPointerException java.lang.NullPointerException: null
> at
> org.apache.nifi.processors.standard.util.FTPTransfer.newFileInfo(FTPTransfer.java:305)
> at
> org.apache.nifi.processors.standard.util.FTPTransfer.getListing(FTPTransfer.java:270)
> at
> org.apache.nifi.processors.standard.util.FTPTransfer.getListing(FTPTransfer.java:260)
> at
> org.apache.nifi.processors.standard.util.FTPTransfer.getListing(FTPTransfer.java:191)
> at
> org.apache.nifi.processors.standard.ListFileTransfer.performListing(ListFileTransfer.java:106)
> at
> org.apache.nifi.processor.util.list.AbstractListProcessor.listByTrackingTimestamps(AbstractListProcessor.java:471)
> at
> org.apache.nifi.processor.util.list.AbstractListProcessor.onTrigger(AbstractListProcessor.java:413)
> 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)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)