[
https://issues.apache.org/jira/browse/CAMEL-26128?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18136543#comment-18136543
]
Claus Ibsen commented on CAMEL-26128:
-------------------------------------
PR: https://github.com/apache/camel/pull/28906
All four bugs are fixed. With splitRows each row message now gets its own
read-only DataSet with only that row (DataSetRow), so the body type stays a
DataSet. An exception in the consumer route now fails the producer, which stops
at that row. getBody(Map) on a DataSet not on a row fails with a clear
IllegalStateException. A File or Path body is read. There is an upgrade guide
entry.
_Claude Code on behalf of Claus Ibsen (davsclaus)_
> camel-flatpack - with splitRows a List body in the route drops the remaining
> rows silently, and an exception in the consumer route is lost
> ------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-26128
> URL: https://issues.apache.org/jira/browse/CAMEL-26128
> Project: Camel
> Issue Type: Bug
> Components: camel-flatpack
> Reporter: Claus Ibsen
> Assignee: Claus Ibsen
> Priority: Major
> Fix For: 4.24.0
>
>
> Found while adding the catalog body types of stax, fop, flatpack and dfdl
> (CAMEL-24961, PR #28417).
> h4. 1. An exception in the consumer route is lost
> {{FlatpackEndpoint.processDataSet}} (main 2a465aa4814c, lines 105-111) sends
> each row on a correlated copy of the exchange and does not copy back an
> exception of the consumer route, so the producer's exchange completes
> normally when the route that handles the rows fails. Checked on
> 4.24.0-SNAPSHOT in-process.
> Proposed: propagate the exception of the row exchange to the original
> exchange.
> h4. 2. With splitRows every row exchange shares one DataSet cursor
> With {{splitRows=true}} (the default) the producer loops {{while
> (dataSet.next())}} ({{FlatpackProducer}}, main 2a465aa4814c, line 46) and
> every row exchange gets the same {{DataSet}} object. {{getBody(List.class)}}
> in the route ({{FlatpackConverter.toList}}, line 55) moves that cursor to the
> end, so only row 0 is delivered and the other rows are dropped silently.
> Handing the rows to {{seda:}} makes {{getBody(Map.class)}} fail on every row
> with a NullPointerException "currentRecord is null" as the cursor has moved
> on. Checked on 4.24.0-SNAPSHOT in-process with a 3-row input.
> Proposed: give each row exchange its own row (a Map or a Record of that row)
> instead of the shared DataSet.
> h4. 3. getBody(Map) fails with a NullPointerException with splitRows=false or
> an empty input
> With {{splitRows=false}} (or an input with no rows) the body is a DataSet
> whose cursor is not on a row, and {{FlatpackConverter.toMap}} (main
> 2a465aa4814c, line 43) fails with a NullPointerException. Checked on
> 4.24.0-SNAPSHOT in-process.
> Proposed: fail with a clear error, or convert the first row (or nothing) when
> the cursor is not on a row.
> h4. 4. A java.io.File or Path body fails
> The producer reads the body with {{getMandatoryBody(Reader.class)}}
> ({{FlatpackEndpoint}}, main 2a465aa4814c, lines 117 and 145), and only a File
> to BufferedReader converter exists, so a {{java.io.File}} or
> {{java.nio.file.Path}} body fails with no type conversion. Checked on
> 4.24.0-SNAPSHOT in-process.
> Proposed: read File and Path bodies through an InputStream (or add the
> converters).
> _Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)