Peter Turcsanyi created NIFI-15362:
--------------------------------------

             Summary: 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


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 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