Prolog: Camel Bindy will throw an IllegalArgumentException if the current
InputStream doesn't contain any data (see
https://fisheye6.atlassian.com/browse/camel-git/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java?hb=true
at line 174 and 200).
I have the following scenario:
An external program provides my program with csv files containing some data. My
program grabs that data, fills in missing entries and writes everything to a
storage. If the external program provides an empty file to signalize no new
data, my program should still fill the missing data, because now every expected
entry is missing.
Currently I bypassed the exception of the unmarshal process with a choice and
an expression to check the file length which is kind of unpleasant.
.choice().when(simple("${body.length} == 0"))
.setBody(constant(ImmutableList.of()))
.otherwise()
.unmarshal(format)
....
I know it is a good idea to check if any data is available at that stream, but
why should that method throw an Exception instead of return an empty
collection? The calling method could handle that if it wants to. Or if it is
mandatory that the Exception gets thrown in the unmarshal method, then an
additional annotation would be great to explicitly allow empty files to be
parsed (and get an empty collection in return). Something like
@CsvRecord(allowEmptyFiles = true).
Thanks in advance for any feedback.