Hi,

We are running Camel 2.4 and are to unmarshal FixedLength lines to objects
using Bindy.

The FLV record is defined with:
@FixedLengthRecord(length = 128, paddingChar = ' ')
I.e. 128 character long with spaces as default paddingchar.

The last "field" in the line is defined as:
@DataField(pos = 62, length = 67, align = "L")
I.e. it takes up the last 67 characters, left aligned using the default
paddingchar.

This implies, that if this last field does not contain any data, the last 67
characters of the FixedLength line will be spaces.

When feeding a line with no data in the last field into the
BindyFixedLengthDataFormat it will fail, because the codes does this when
reading the line:

...
while (scanner.hasNextLine()) {

  // Read the line
  String line = scanner.nextLine().trim();

  LOG.debug("Handling line : " + line);
...

The trim() will remove the last 67 characters in the line (as they are
spaces) and then this part of the code:

...
  // Check if the record length corresponds to the parameter
  // provided in the @FixedLengthRecord
  if ((line.length() < factory.recordLength()) || (line.length() >
factory.recordLength())) {
    throw new java.lang.IllegalArgumentException("Size of the record : " +
line.length() + " is not equal to   the value provided in the model : " +
factory.recordLength() + " !");
  }
...

will throw an exception telling that the size of the record length is not
equal ....

The same problem will arise in the case of leading spaces in the line.

How come the lines are trimmed? 
When working with FixedLength records it must be the resposibility of the
user to ensure the records are of proper length - so the code should, in my
view, not perform any modifications (like trimming) of the records.

Regards
Mikael 
-- 
View this message in context: 
http://camel.465427.n5.nabble.com/BindyFixedLengthDataFormat-trimming-lines-tp3374142p3374142.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to