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

Support grouping separator for Camel Bindy (BigDecimal)

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.13.2
    • Fix Version/s: None
    • Component/s: camel-bindy
    • Labels:
      None
    • Estimated Complexity:
      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

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

              Dates

              • Created:
                Updated:
                Resolved: