Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-7742

Support grouping separator for Camel Bindy (BigDecimal)

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.13.2
    • None
    • camel-bindy
    • None
    • Unknown

    Description

      Issue

      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?
      

      Solution

          public void parsePattern(String formattedString,
                            Locale locale,
                            String pattern,
                            char groupingSeparator,
                            char decimalSeparator) throws ParseException {
      
              DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale);
              symbols.setGroupingSeparator(groupingSeparator);
              symbols.setDecimalSeparator(decimalSeparator);
              DecimalFormat decimalFormat = new DecimalFormat(pattern, symbols);
              decimalFormat.setParseBigDecimal(true);
      
              // parse the string
              BigDecimal bigDecimal = (BigDecimal) decimalFormat.parse(formattedString);
              bigDecimal.setScale(precision);
              System.out.println(bigDecimal);
          }
      

      Attachments

        Activity

          People

            cmoulliard Moulliard Charles
            cmoulliard Moulliard Charles
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: