This is an automated email from the ASF dual-hosted git repository.

jleroux pushed a commit to branch revert-846-revert-845-OFBIZ-13168
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git

commit d6ab0417acd03f5196d2edf054e42ae48ab03d56
Author: Jacques Le Roux <jacques.le.r...@les7arts.com>
AuthorDate: Wed Nov 6 09:29:21 2024 +0100

    Revert "Revert "Fixed: Support non-breaking spaces in string to be 
converted …"
    
    This reverts commit 74ca62b257237d17e3c8cba78a5654680c89bc11.
---
 .../src/main/java/org/apache/ofbiz/base/util/ObjectType.java  | 11 +++++++++++
 .../test/java/org/apache/ofbiz/base/util/ObjectTypeTests.java |  7 +++++++
 2 files changed, 18 insertions(+)

diff --git 
a/framework/base/src/main/java/org/apache/ofbiz/base/util/ObjectType.java 
b/framework/base/src/main/java/org/apache/ofbiz/base/util/ObjectType.java
index 6e98f5bd66..74b54b8032 100644
--- a/framework/base/src/main/java/org/apache/ofbiz/base/util/ObjectType.java
+++ b/framework/base/src/main/java/org/apache/ofbiz/base/util/ObjectType.java
@@ -20,6 +20,7 @@ package org.apache.ofbiz.base.util;
 
 import java.io.Serializable;
 import java.lang.reflect.InvocationTargetException;
+import java.math.BigDecimal;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
@@ -330,6 +331,15 @@ public class ObjectType {
         }
 
         if (converter != null) {
+            // numeric types : replace non-breaking spaces (which break 
parsing) by normal spaces
+            List<?> numericClasses = UtilMisc.toList(BigDecimal.class, 
Double.class, Float.class);
+            if (obj instanceof String && numericClasses.contains(targetClass)) 
{
+                final String[] tmp = {String.valueOf(obj)};
+                List<Character> nonBreakingWhitespaces = 
UtilMisc.toList('\u00A0', '\u202F', '\u2007');
+                nonBreakingWhitespaces.forEach(character -> tmp[0] = 
tmp[0].replace(character, ' '));
+                obj = tmp[0];
+            }
+
             if (converter instanceof LocalizedConverter) {
                 LocalizedConverter<Object, Object> localizedConverter = 
UtilGenerics.cast(converter);
                 if (timeZone == null) {
@@ -345,6 +355,7 @@ public class ObjectType {
                     throw new GeneralException(e.getMessage(), e);
                 }
             }
+
             try {
                 return converter.convert(obj);
             } catch (ConversionException e) {
diff --git 
a/framework/base/src/test/java/org/apache/ofbiz/base/util/ObjectTypeTests.java 
b/framework/base/src/test/java/org/apache/ofbiz/base/util/ObjectTypeTests.java
index c6308597fd..0afdd88b73 100644
--- 
a/framework/base/src/test/java/org/apache/ofbiz/base/util/ObjectTypeTests.java
+++ 
b/framework/base/src/test/java/org/apache/ofbiz/base/util/ObjectTypeTests.java
@@ -48,6 +48,7 @@ public class ObjectTypeTests {
     // These numbers are all based on 1 / 128, which is a binary decimal
     // that can be represented by both float and double
     private final BigDecimal dcml = new BigDecimal("781.25");
+    private final BigDecimal largeBigDecimal = new BigDecimal("29000");
     private final Double dbl = Double.valueOf("7.8125E2");
     private final Float flt = Float.valueOf("7.8125E2");
     private final Long lng = Long.valueOf("781");
@@ -385,6 +386,12 @@ public class ObjectTypeTests {
                 new String[] {"TimeDuration", 
"org.apache.ofbiz.base.util.TimeDuration"}, duration);
         simpleTypeOrObjectConvertTestError("String->error-TimeDuration", "o",
                 new String[] {"TimeDuration", 
"org.apache.ofbiz.base.util.TimeDuration"});
+
+        // usual pattern assumes that the String->BigDecimal conversion will 
break with bad timezone/locale
+        // which is not the case for this particular test
+        assertEquals("String->BigDecimal supports NBSP",
+                simpleTypeOrObjectConvert("29 000", "BigDecimal", null, 
LOCALE_DATA.goodTimeZone,
+                        LOCALE_DATA.goodLocale, false), largeBigDecimal);
     }
 
     @Test

Reply via email to