diff --git a/common/src/main/java/com/genexus/CommonUtil.java b/common/src/main/java/com/genexus/CommonUtil.java index a59eb6f45..1356c9e9c 100644 --- a/common/src/main/java/com/genexus/CommonUtil.java +++ b/common/src/main/java/com/genexus/CommonUtil.java @@ -2732,7 +2732,7 @@ public static Object convertObjectTo(Object obj, Class toClass, boolean fail) th try { - if (objStr.isEmpty()) + if (objStr.isEmpty() || objStr.equals("null")) objStr ="0"; else { @@ -2771,13 +2771,13 @@ else if (className.equals("long") || className.equals("java.lang.Long") || class } else if (className.equals("string") || className.indexOf("java.lang.String") != -1) { - return objStr; + return objStr.equals("null") ? "" : objStr; } else if (className.equals("double") || className.equals("java.lang.Double") || className.equals("[D")) { try { - if (objStr.isEmpty()) + if (objStr.isEmpty() || objStr.equals("null")) objStr = "0"; return Double.valueOf(objStr); } @@ -2792,7 +2792,7 @@ else if (className.equals("float") || className.equals("java.lang.Float") || cla { try { - if (objStr.isEmpty()) + if (objStr.isEmpty() || objStr.equals("null")) objStr = "0"; return Float.valueOf(objStr); } @@ -2807,7 +2807,7 @@ else if (className.equals("boolean") || className.equals("java.lang.Boolean") || { try { - return Boolean.valueOf(objStr); + return objStr.equals("null") ? false : Boolean.valueOf(objStr); } catch(Exception e) { @@ -2820,7 +2820,7 @@ else if (className.indexOf("java.math.BigDecimal") != -1) { try { - if (objStr.isEmpty()) + if (objStr.isEmpty() || objStr.equals("null")) objStr = "0"; return DecimalUtil.stringToDec(objStr); } @@ -2834,7 +2834,9 @@ else if (className.indexOf("java.math.BigDecimal") != -1) else if (className.indexOf("java.util.Date") != -1) { try { - if (objStr.indexOf('/')>0) //Json CallAjax + if (objStr.equals("null")) + return nullDate(); + else if (objStr.indexOf('/')>0) //Json CallAjax return LocalUtil.getISO8601Date(objStr); else return new java.text.SimpleDateFormat("EEE MMM dd HH:mm:ss zzz Z").parse(objStr); @@ -2845,7 +2847,7 @@ else if (className.indexOf("java.util.Date") != -1) else if(className.indexOf("java.util.UUID") != -1) { try { - return UUID.fromString(objStr); + return objStr.equals("null") ? new UUID(0,0) : UUID.fromString(objStr); }catch(IllegalArgumentException e) { if(fail) diff --git a/java/src/test/java/com/genexus/TestCommonUtil.java b/java/src/test/java/com/genexus/TestCommonUtil.java index a89a25d35..046762ad0 100644 --- a/java/src/test/java/com/genexus/TestCommonUtil.java +++ b/java/src/test/java/com/genexus/TestCommonUtil.java @@ -4,6 +4,8 @@ import com.genexus.specific.java.LogManager; import org.junit.Assert; import org.junit.Test; +import java.util.Date; +import java.util.UUID; public class TestCommonUtil { @@ -114,4 +116,132 @@ public void testFormat() { Assert.assertEquals(expectedResult, result); } -} + @Test + public void testConvertObjectTo() { + initialize(); + + Object obj; + Object result; + + // Test case 1: Pass in a non-null integer + obj = 1; + try{ + Class integerClass = Class.forName("java.lang.Integer"); + result = CommonUtil.convertObjectTo(obj, integerClass, true); + Assert.assertEquals(Integer.valueOf("1"), result); + } catch (Exception e){ + Assert.fail("Test failed " + e); + } + + // Test case 2: Pass in a "null" integer + obj = "null"; + try{ + Class integerClass = Class.forName("java.lang.Integer"); + result = CommonUtil.convertObjectTo(obj, integerClass, true); + Assert.assertEquals(Integer.valueOf("0"), result); + } catch (Exception e){ + Assert.fail("Test failed " + e); + } + + // Test case 3: Pass in a non-null string + obj = "Hello world"; + try { + Class stringClass = Class.forName("java.lang.String"); + result = CommonUtil.convertObjectTo(obj, stringClass, true); + Assert.assertEquals("Hello world", result); + } catch (Exception e){ + Assert.fail("Test failed " + e); + } + + // Test case 4: Pass in a "null" string + obj = "null"; + try{ + Class stringClass = Class.forName("java.lang.String"); + result = CommonUtil.convertObjectTo(obj, stringClass, true); + Assert.assertEquals("", result); + } catch (Exception e){ + Assert.fail("Test failed " + e); + } + + // Test case 5: Pass in a non-null decimal + obj = 1.5; + try{ + Class decimalClass = Class.forName("java.lang.Float"); + result = CommonUtil.convertObjectTo(obj, decimalClass, true); + Assert.assertEquals(Float.valueOf("1.5"), result); + } catch (Exception e){ + Assert.fail("Test failed " + e); + } + + // Test case 6: Pass in a "null" decimal + obj = "null"; + try{ + Class decimalClass = Class.forName("java.lang.Float"); + result = CommonUtil.convertObjectTo(obj, decimalClass, true); + Assert.assertEquals(Float.valueOf("0"), result); + } catch (Exception e){ + Assert.fail("Test failed " + e); + } + + // Test case 7: Pass in a non-null boolean + obj = true; + try{ + Class booleanClass = Class.forName("java.lang.Boolean"); + result = CommonUtil.convertObjectTo(obj, booleanClass, true); + Assert.assertEquals(true, result); + } catch (Exception e){ + Assert.fail("Test failed " + e); + } + + // Test case 7: Pass in a "null" boolean + obj = "null"; + try{ + Class booleanClass = Class.forName("java.lang.Boolean"); + result = CommonUtil.convertObjectTo(obj, booleanClass, true); + Assert.assertEquals(false, result); + } catch (Exception e){ + Assert.fail("Test failed " + e); + } + + // Test case 8: Pass in a non-null date + obj = new Date(0); + try{ + Class dateClass = Class.forName("java.util.Date"); + result = CommonUtil.convertObjectTo(obj, dateClass, true); + Assert.assertEquals(LocalUtil.getISO8601Date("0001/01/01"), result); + } catch (Exception e){ + Assert.fail("Test failed " + e); + } + + // Test case 9: Pass in a "null" date + obj = "null"; + try{ + Class dateClass = Class.forName("java.util.Date"); + result = CommonUtil.convertObjectTo(obj, dateClass, true); + Assert.assertEquals(CommonUtil.nullDate(), result); + } catch (Exception e){ + Assert.fail("Test failed " + e); + } + + // Test case 9: Pass in a non-null uuid + obj = UUID.randomUUID(); + try{ + Class uudiClass = Class.forName("java.util.UUID"); + result = CommonUtil.convertObjectTo(obj, uudiClass, true); + Assert.assertEquals(UUID.fromString(obj.toString()), result); + } catch (Exception e){ + Assert.fail("Test failed " + e); + } + + // Test case 10: Pass in a "null" uuid + obj = "null"; + try{ + Class uudiClass = Class.forName("java.util.UUID"); + result = CommonUtil.convertObjectTo(obj, uudiClass, true); + Assert.assertEquals(new UUID(0,0), result); + } catch (Exception e){ + Assert.fail("Test failed " + e); + } + } + +} \ No newline at end of file