Author: robertlazarski
Date: Thu Mar 19 22:54:34 2020
New Revision: 1875438

URL: http://svn.apache.org/viewvc?rev=1875438&view=rev
Log:
AXIS2-5724 Apply patch from community, to ADB ConverterUtil class

Modified:
    
axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/ConverterUtil.java
    
axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/ConverterUtilTest.java

Modified: 
axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/ConverterUtil.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/ConverterUtil.java?rev=1875438&r1=1875437&r2=1875438&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/ConverterUtil.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/ConverterUtil.java
 Thu Mar 19 22:54:34 2020
@@ -79,6 +79,8 @@ import java.lang.reflect.InvocationTarge
 import java.lang.reflect.Method;
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.text.NumberFormat;
+import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
@@ -1344,7 +1346,15 @@ public class ConverterUtil {
      * @return 0 if equal , + value if greater than , - value if less than
      */
     public static long compare(BigInteger binBigInteger, String value) {
-        return binBigInteger.longValue() - Long.parseLong(value);
+        //AXIS2-5724 - Handle Decimal String value when casting to Long.
+        long param;
+        try {
+            NumberFormat nf = NumberFormat.getInstance();
+            param = nf.parse(value).longValue();
+        } catch (Exception e) {
+            throw new ObjectConversionException(e);
+        }
+        return binBigInteger.longValue() - param;
     }
 
     /**

Modified: 
axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/ConverterUtilTest.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/ConverterUtilTest.java?rev=1875438&r1=1875437&r2=1875438&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/ConverterUtilTest.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/ConverterUtilTest.java
 Thu Mar 19 22:54:34 2020
@@ -566,4 +566,21 @@ public class ConverterUtilTest extends T
         // 
https://stackoverflow.com/questions/46372764/axis2-adb-and-mininclusive-2147483648
         assertThat(ConverterUtil.compare(3, "-2147483648")).isGreaterThan(0);
     }
+
+    public void 
testCompareBigIntegerValueIsLessThanTotalDigitsFacetRestriction() {
+        //AXIS2-5724 - Handle Decimal String value when casting to Long.
+        BigInteger value = BigInteger.valueOf(100L);
+        String totalDigitsFromXsd = "3";
+        String decimalNotationString = 
ConverterUtil.convertToStandardDecimalNotation(totalDigitsFromXsd).toPlainString();
+        assertThat(ConverterUtil.compare(value, 
decimalNotationString)).isLessThan(0L);
+    }
+
+    public void 
testCompareBigIntegerValueIsGreaterThanOrEqualToTotalDigitsFacetRestriction() {
+        //AXIS2-5724 - Handle Decimal String value when casting to Long.
+        BigInteger value = BigInteger.valueOf(1000L);
+        String totalDigitsFromXsd = "3";
+        String decimalNotationString = 
ConverterUtil.convertToStandardDecimalNotation(totalDigitsFromXsd).toPlainString();
+        long result = ConverterUtil.compare(value, decimalNotationString);
+        assertThat(result).isAtLeast(0L);
+    }
 }


Reply via email to