Hi

Yeah sounds like an issue, you are welcome to log a JIRA and provide a
patch or better github PR
http://camel.apache.org/contributing

On Tue, Dec 20, 2016 at 5:01 PM, dabby11 <marco.dabb...@gmail.com> wrote:
> Hi,
>
>   I'm developing a route with Camel 2.16.1 that uses Bindy to process a file
> with fixed length records. The file consists of a header and many rows.
> I'm unmarshalling the stream with the following data format:
>
> BindyFixedLengthDataFormat bindy = new
> BindyFixedLengthDataFormat(DocumentRow.class);
> bindy.setLocale("default");
>
> and my model classes are something like:
>
> @FixedLengthRecord(header = DocumentHeader.class)
> public class DocumentRow {
>
>     ...
>
>         @DataField(pos = 10, pattern="+000000000.00;-000000000.00", precision 
> = 2,
> length = 13, decimalSeparator = ",")
>         private BigDecimal value;
>
>     ...
> }
>
> @FixedLengthRecord
> public class DocumentHeader {
>
>     ...
>
>         @DataField(pos = 365, pattern="+000000000000.00;-000000000000.00",
> precision = 2,  length = 16, decimalSeparator = ",")
>         private BigDecimal total;
>
>     ...
>
> }
>
> Bindy fails to parse the DocumentHeader.total field with a
> java.lang.NumberFormatException.
>
> It seems the locale specified with bindy.setLocale("default") is not passed
> to the inner headerFactory in the BindyFixedLengthDataFormat and Bindy tries
> to parse the number calling BigDecimal constructor, instead of parsing it
> with DecimalFormat.
> Indeed, if I execute the following (ugly!) code before creating the route:
>
>   bindy.getFactory();
>
>   Field field =
> BindyFixedLengthDataFormat.class.getDeclaredField("headerFactory");
>   field.setAccessible(true);
>   BindyFixedLengthFactory headerFactory =
> (BindyFixedLengthFactory)field.get(bindy);
>
>   headerFactory.setLocale(bindy.getLocale());
>
> to force the locale, everything's fine.
>
> So I think that in BindyFixedLengthDataFormat.createModelFactory() after
> headerFactory creation there should be a call to
>
>     headerFactory.setLocale(getLocale())
>
> or something like that (and a similar line for footerFactory).
>
> I checked 2.17.x and 2.18.x branches of BindyFixedLengthDataFormat.java and
> there's not something like this.
>
> So the question is: is this really an issue with Bindy or should I achieve
> this result in a different way ?
>
> Regards,
>   Marco
>
>
>
> --
> View this message in context: 
> http://camel.465427.n5.nabble.com/camel-bindy-issue-with-header-and-missing-locale-tp5791746.html
> Sent from the Camel - Users mailing list archive at Nabble.com.



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to