From 02f2004dcf4bca535ce4dee0b08626466879627a Mon Sep 17 00:00:00 2001 From: Naveed Khan Date: Tue, 21 Jul 2026 12:10:26 +0530 Subject: [PATCH] fix failed conversion in DoubleLocaleConverter when input is non-Double Number (1.X) Signed-off-by: Naveed Khan --- .../locale/converters/DoubleLocaleConverter.java | 6 +++--- .../converters/DoubleLocaleConverterTest.java | 13 +++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/apache/commons/beanutils/locale/converters/DoubleLocaleConverter.java b/src/main/java/org/apache/commons/beanutils/locale/converters/DoubleLocaleConverter.java index 30532cf37..01fb6136a 100644 --- a/src/main/java/org/apache/commons/beanutils/locale/converters/DoubleLocaleConverter.java +++ b/src/main/java/org/apache/commons/beanutils/locale/converters/DoubleLocaleConverter.java @@ -169,9 +169,9 @@ public DoubleLocaleConverter(final Object defaultValue, final Locale locale, fin @Override protected Object parse(final Object value, final String pattern) throws ParseException { final Number result = (Number) super.parse(value, pattern); - if (result instanceof Long) { - return Double.valueOf(result.doubleValue()); + if (result == null || result instanceof Double) { + return result; } - return result; + return Double.valueOf(result.doubleValue()); } } diff --git a/src/test/java/org/apache/commons/beanutils/locale/converters/DoubleLocaleConverterTest.java b/src/test/java/org/apache/commons/beanutils/locale/converters/DoubleLocaleConverterTest.java index c52ba9801..1c2e86cbe 100644 --- a/src/test/java/org/apache/commons/beanutils/locale/converters/DoubleLocaleConverterTest.java +++ b/src/test/java/org/apache/commons/beanutils/locale/converters/DoubleLocaleConverterTest.java @@ -49,6 +49,19 @@ public void tearDown() { super.tearDown(); } + /** + * Passing a non-Double Number directly (e.g. Integer) must return a Double, not fail the conversion. + */ + public void testConvertFromNonDoubleNumber() { + + converter = new DoubleLocaleConverter(); + + assertEquals(Double.valueOf(42.0), converter.convert(Double.class, Integer.valueOf(42), null)); + assertEquals(Double.valueOf(3.14f), converter.convert(Double.class, Float.valueOf(3.14f), null)); + assertEquals(Double.valueOf(100L), converter.convert(Double.class, Long.valueOf(100L), null)); + + } + /** * Test Converter() constructor *