Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
2.13.2
-
None
-
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); }