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); + } }