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

Peter Turcsanyi updated NIFI-15362:
-----------------------------------
    Status: Patch Available  (was: Open)

> QuerySalesforce fails to parse Time data type
> ---------------------------------------------
>
>                 Key: NIFI-15362
>                 URL: https://issues.apache.org/jira/browse/NIFI-15362
>             Project: Apache NiFi
>          Issue Type: Bug
>            Reporter: Peter Turcsanyi
>            Assignee: Peter Turcsanyi
>            Priority: Major
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> QuerySalesforceObject in Property Based mode cannot process Time fields due 
> to parse error:
> {code:java}
> 2025-12-17 22:36:18,650 ERROR [Timer-Driven Process Thread-1] 
> o.a.n.p.salesforce.QuerySalesforceObject 
> QuerySalesforceObject[id=5c29b18f-216a-3631-f910-07db393ffc3c] Couldn't read 
> records from input
> java.lang.RuntimeException: 
> org.apache.nifi.serialization.MalformedRecordException: Successfully parsed a 
> JSON object from input but failed to convert into a Record object with the 
> given schema
>       at 
> org.apache.nifi.processors.salesforce.QuerySalesforceObject.lambda$processRecordsCallback$3(QuerySalesforceObject.java:481)
>       at 
> org.apache.nifi.controller.repository.StandardProcessSession.write(StandardProcessSession.java:3107)
>       at 
> org.apache.nifi.processors.salesforce.QuerySalesforceObject.processQuery(QuerySalesforceObject.java:437)
>       at 
> org.apache.nifi.processors.salesforce.QuerySalesforceObject.onTrigger(QuerySalesforceObject.java:387)
>       at 
> org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
>       at 
> org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1274)
>       at 
> org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:229)
>       at 
> org.apache.nifi.controller.scheduling.AbstractTimeBasedSchedulingAgent.lambda$doScheduleOnce$0(AbstractTimeBasedSchedulingAgent.java:59)
>       at org.apache.nifi.engine.FlowEngine.lambda$wrap$1(FlowEngine.java:105)
>       at 
> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
>       at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
>       at 
> java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
>       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)
> Caused by: org.apache.nifi.serialization.MalformedRecordException: 
> Successfully parsed a JSON object from input but failed to convert into a 
> Record object with the given schema
>       at 
> org.apache.nifi.json.AbstractJsonRowRecordReader.nextRecord(AbstractJsonRowRecordReader.java:169)
>       at 
> org.apache.nifi.serialization.RecordReader.nextRecord(RecordReader.java:50)
>       at 
> org.apache.nifi.processors.salesforce.QuerySalesforceObject.handleRecordSet(QuerySalesforceObject.java:497)
>       at 
> org.apache.nifi.processors.salesforce.QuerySalesforceObject.lambda$processRecordsCallback$3(QuerySalesforceObject.java:473)
>       ... 14 common frames omitted
> Caused by: 
> org.apache.nifi.serialization.record.field.FieldConversionException: 
> Conversion failed for [23:05:30.000Z] named [time__c] to 
> [java.time.LocalTime] [java.time.format.DateTimeParseException] Text 
> '23:05:30.000Z' could not be parsed at index 12
>       at 
> org.apache.nifi.serialization.record.field.ObjectLocalTimeFieldConverter.convertField(ObjectLocalTimeFieldConverter.java:77)
>       at 
> org.apache.nifi.serialization.record.field.ObjectTimeFieldConverter.convertField(ObjectTimeFieldConverter.java:45)
>       at 
> org.apache.nifi.serialization.record.field.ObjectTimeFieldConverter.convertField(ObjectTimeFieldConverter.java:31)
>       at 
> org.apache.nifi.serialization.record.util.DataTypeUtils.convertType(DataTypeUtils.java:224)
>       at 
> org.apache.nifi.serialization.record.util.DataTypeUtils.convertType(DataTypeUtils.java:174)
>       at 
> org.apache.nifi.json.JsonTreeRowRecordReader.convertField(JsonTreeRowRecordReader.java:220)
>       at 
> org.apache.nifi.json.JsonTreeRowRecordReader.convertJsonNodeToRecord(JsonTreeRowRecordReader.java:164)
>       at 
> org.apache.nifi.json.JsonTreeRowRecordReader.convertJsonNodeToRecord(JsonTreeRowRecordReader.java:118)
>       at 
> org.apache.nifi.json.JsonTreeRowRecordReader.convertJsonNodeToRecord(JsonTreeRowRecordReader.java:109)
>       at 
> org.apache.nifi.json.AbstractJsonRowRecordReader.nextRecord(AbstractJsonRowRecordReader.java:164)
>       ... 17 common frames omitted
> {code}
>  
> Salesforce's query API endpoint sends DateTime and Time fields with different 
> zone offset formats:
> {code:java}
>   "datetime__c" : "2025-11-30T23:05:30.000+0000",
>   "time__c" : "23:05:30.000Z"
> {code}
> NIFI-13671 fixed DateTime parsing, but broke Time parsing. Using 'Z' pattern 
> letter for zone offset works for "+0000" but not for "Z". The "Z" in the Time 
> field requires 'X' pattern letter which is a better choice for DateTime as 
> well because 'X' is more flexible (accepts both "Z" and "+0000").



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

Reply via email to