The numbers I'd like to parse could have one the following structures:
123,456,789.01
123.45
-1234
1,234

(there are several rows in one file so it is possible that different structures 
appear in a file)

Setting the precision already works fine and the decimal separator is treated 
correctly.
The current problem is that I can't tell bindy to ignore the comma sings in 
every number,
because they are for grouping purposes and not needed in the BigDecimal field.

If I keep the comma sign in these numbers the parsing process will raise a 
NumberFormatException
mentioning a malformed number. If I remove that comma signs in a test file, 
everything works fine and the number
is mapped to the datafield correctly, but sadly that can't be a solution, 
because this csv files are provided by
different system that cannot be changed.

If I use the following annotation
@DataField(pos = 2, precision = 2, pattern = "#,###.##")
and use Double instead of BigDecimal I can keep the comma sings. But I can't 
use Double for several reasons.

The source code of the FormatFactory class (version 2.13.1) that I linked in my 
question also shows that the pattern is used for Double types (and several 
other types) but not for BigDecimal types.

-----Ursprüngliche Nachricht-----
Gesendet: Wednesday, 20 August 2014 um 19:33:05 Uhr
Von: "Charles Moulliard" <[email protected]>
An: [email protected]
Betreff: Re: Camel Bindy: parse a BigDecimal number with a given pattern
The @DataField of Camel bindy proposes the parameter precision like also a
pattern but not a grouping separator

Example

    @DataField(pos = 2, precision = 2, pattern = "00.00")
    private BigDecimal bigDecimal;

Do you have an example to propose about such use case ?


On Wed, Aug 20, 2014 at 3:43 PM, <[email protected]> wrote:

> Hello,
>
> I currently have a problem concerning Camel Bindy. I have a csv file that
> should be parsed with Camel Bindy using a given model class. This csv file
> contains a number that should be parsed as a BigDecimal. The problem is
> that
> this number contains a comma as a grouping separator and a point as the
> decimal separator.
> If I start the camel route the unmarshal process will throw a
> NumberFormatException mentioning the invalid format of that number. So I
> tried to add a pattern to the DataField annotation, but the error stays.
>
> After digging throw the documentation (http://camel.apache.org/bindy.html)
> and the source code of FormatFactory
> (
> http://grepcode.com/file_/repo1.maven.org/maven2/org.apache.camel/camel-bindy/2.13.1/org/apache/camel/dataformat/bindy/FormatFactory.java/?v=source
> )
> I'm a little bit confused, because the documentation mentions the ability
> to
> specify a grouping separator, but the source code shows that the pattern is
> ignored for BigDecimal data types.
>
> Does anyone know how to specify that grouping separator? Or is this not
> implemented yet?
>
> Many thanks in advance.
>
> Best regards.
> Tom
>
> P.S. I also posted that question on stackoverflow
> (
> http://stackoverflow.com/questions/25381052/camel-bindy-add-pattern-for-bigdecimal-type
> ),
> but with no luck yet.
>
> P.P.S. I posted that question using nabble.com (
> http://camel.465427.n5.nabble.com/Camel-Users-f465428.html) some moments
> ago, but it seems that there is a problem with my mail provider that
> doesn't allow services like this. So I'm sending this question directly
> now. Sorry for any inconveniences.
>



-- 
Charles Moulliard
Apache Committer / Architect @RedHat
Twitter : @cmoulliard | Blog :  http://cmoulliard.github.io

Reply via email to