Skip to content

Commit 5c423f4

Browse files
JSON serialization of "null" now assigns a correct empty value for every possible data type (#666)
* Revert "Added webp-imageio lib as dependency to support webp (#657)" This reverts commit 2beb566. * FromJson assigns empty strg if input strg is null Issue:101141 * Cover null serialization for all posible toClass * convertObjectTo unit tests * Empty commit --------- Co-authored-by: tomas-sexenian <tsexenian@genexus.com>
1 parent 31bb1a8 commit 5c423f4

File tree

2 files changed

+141
-9
lines changed

2 files changed

+141
-9
lines changed

common/src/main/java/com/genexus/CommonUtil.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2732,7 +2732,7 @@ public static Object convertObjectTo(Object obj, Class toClass, boolean fail) th
27322732
try
27332733
{
27342734

2735-
if (objStr.isEmpty())
2735+
if (objStr.isEmpty() || objStr.equals("null"))
27362736
objStr ="0";
27372737
else
27382738
{
@@ -2771,13 +2771,13 @@ else if (className.equals("long") || className.equals("java.lang.Long") || class
27712771
}
27722772
else if (className.equals("string") || className.indexOf("java.lang.String") != -1)
27732773
{
2774-
return objStr;
2774+
return objStr.equals("null") ? "" : objStr;
27752775
}
27762776
else if (className.equals("double") || className.equals("java.lang.Double") || className.equals("[D"))
27772777
{
27782778
try
27792779
{
2780-
if (objStr.isEmpty())
2780+
if (objStr.isEmpty() || objStr.equals("null"))
27812781
objStr = "0";
27822782
return Double.valueOf(objStr);
27832783
}
@@ -2792,7 +2792,7 @@ else if (className.equals("float") || className.equals("java.lang.Float") || cla
27922792
{
27932793
try
27942794
{
2795-
if (objStr.isEmpty())
2795+
if (objStr.isEmpty() || objStr.equals("null"))
27962796
objStr = "0";
27972797
return Float.valueOf(objStr);
27982798
}
@@ -2807,7 +2807,7 @@ else if (className.equals("boolean") || className.equals("java.lang.Boolean") ||
28072807
{
28082808
try
28092809
{
2810-
return Boolean.valueOf(objStr);
2810+
return objStr.equals("null") ? false : Boolean.valueOf(objStr);
28112811
}
28122812
catch(Exception e)
28132813
{
@@ -2820,7 +2820,7 @@ else if (className.indexOf("java.math.BigDecimal") != -1)
28202820
{
28212821
try
28222822
{
2823-
if (objStr.isEmpty())
2823+
if (objStr.isEmpty() || objStr.equals("null"))
28242824
objStr = "0";
28252825
return DecimalUtil.stringToDec(objStr);
28262826
}
@@ -2834,7 +2834,9 @@ else if (className.indexOf("java.math.BigDecimal") != -1)
28342834
else if (className.indexOf("java.util.Date") != -1)
28352835
{
28362836
try {
2837-
if (objStr.indexOf('/')>0) //Json CallAjax
2837+
if (objStr.equals("null"))
2838+
return nullDate();
2839+
else if (objStr.indexOf('/')>0) //Json CallAjax
28382840
return LocalUtil.getISO8601Date(objStr);
28392841
else
28402842
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)
28452847
else if(className.indexOf("java.util.UUID") != -1)
28462848
{
28472849
try {
2848-
return UUID.fromString(objStr);
2850+
return objStr.equals("null") ? new UUID(0,0) : UUID.fromString(objStr);
28492851
}catch(IllegalArgumentException e)
28502852
{
28512853
if(fail)

java/src/test/java/com/genexus/TestCommonUtil.java

Lines changed: 131 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import com.genexus.specific.java.LogManager;
55
import org.junit.Assert;
66
import org.junit.Test;
7+
import java.util.Date;
8+
import java.util.UUID;
79

810
public class TestCommonUtil {
911

@@ -114,4 +116,132 @@ public void testFormat() {
114116
Assert.assertEquals(expectedResult, result);
115117
}
116118

117-
}
119+
@Test
120+
public void testConvertObjectTo() {
121+
initialize();
122+
123+
Object obj;
124+
Object result;
125+
126+
// Test case 1: Pass in a non-null integer
127+
obj = 1;
128+
try{
129+
Class integerClass = Class.forName("java.lang.Integer");
130+
result = CommonUtil.convertObjectTo(obj, integerClass, true);
131+
Assert.assertEquals(Integer.valueOf("1"), result);
132+
} catch (Exception e){
133+
Assert.fail("Test failed " + e);
134+
}
135+
136+
// Test case 2: Pass in a "null" integer
137+
obj = "null";
138+
try{
139+
Class integerClass = Class.forName("java.lang.Integer");
140+
result = CommonUtil.convertObjectTo(obj, integerClass, true);
141+
Assert.assertEquals(Integer.valueOf("0"), result);
142+
} catch (Exception e){
143+
Assert.fail("Test failed " + e);
144+
}
145+
146+
// Test case 3: Pass in a non-null string
147+
obj = "Hello world";
148+
try {
149+
Class stringClass = Class.forName("java.lang.String");
150+
result = CommonUtil.convertObjectTo(obj, stringClass, true);
151+
Assert.assertEquals("Hello world", result);
152+
} catch (Exception e){
153+
Assert.fail("Test failed " + e);
154+
}
155+
156+
// Test case 4: Pass in a "null" string
157+
obj = "null";
158+
try{
159+
Class stringClass = Class.forName("java.lang.String");
160+
result = CommonUtil.convertObjectTo(obj, stringClass, true);
161+
Assert.assertEquals("", result);
162+
} catch (Exception e){
163+
Assert.fail("Test failed " + e);
164+
}
165+
166+
// Test case 5: Pass in a non-null decimal
167+
obj = 1.5;
168+
try{
169+
Class decimalClass = Class.forName("java.lang.Float");
170+
result = CommonUtil.convertObjectTo(obj, decimalClass, true);
171+
Assert.assertEquals(Float.valueOf("1.5"), result);
172+
} catch (Exception e){
173+
Assert.fail("Test failed " + e);
174+
}
175+
176+
// Test case 6: Pass in a "null" decimal
177+
obj = "null";
178+
try{
179+
Class decimalClass = Class.forName("java.lang.Float");
180+
result = CommonUtil.convertObjectTo(obj, decimalClass, true);
181+
Assert.assertEquals(Float.valueOf("0"), result);
182+
} catch (Exception e){
183+
Assert.fail("Test failed " + e);
184+
}
185+
186+
// Test case 7: Pass in a non-null boolean
187+
obj = true;
188+
try{
189+
Class booleanClass = Class.forName("java.lang.Boolean");
190+
result = CommonUtil.convertObjectTo(obj, booleanClass, true);
191+
Assert.assertEquals(true, result);
192+
} catch (Exception e){
193+
Assert.fail("Test failed " + e);
194+
}
195+
196+
// Test case 7: Pass in a "null" boolean
197+
obj = "null";
198+
try{
199+
Class booleanClass = Class.forName("java.lang.Boolean");
200+
result = CommonUtil.convertObjectTo(obj, booleanClass, true);
201+
Assert.assertEquals(false, result);
202+
} catch (Exception e){
203+
Assert.fail("Test failed " + e);
204+
}
205+
206+
// Test case 8: Pass in a non-null date
207+
obj = new Date(0);
208+
try{
209+
Class dateClass = Class.forName("java.util.Date");
210+
result = CommonUtil.convertObjectTo(obj, dateClass, true);
211+
Assert.assertEquals(LocalUtil.getISO8601Date("0001/01/01"), result);
212+
} catch (Exception e){
213+
Assert.fail("Test failed " + e);
214+
}
215+
216+
// Test case 9: Pass in a "null" date
217+
obj = "null";
218+
try{
219+
Class dateClass = Class.forName("java.util.Date");
220+
result = CommonUtil.convertObjectTo(obj, dateClass, true);
221+
Assert.assertEquals(CommonUtil.nullDate(), result);
222+
} catch (Exception e){
223+
Assert.fail("Test failed " + e);
224+
}
225+
226+
// Test case 9: Pass in a non-null uuid
227+
obj = UUID.randomUUID();
228+
try{
229+
Class uudiClass = Class.forName("java.util.UUID");
230+
result = CommonUtil.convertObjectTo(obj, uudiClass, true);
231+
Assert.assertEquals(UUID.fromString(obj.toString()), result);
232+
} catch (Exception e){
233+
Assert.fail("Test failed " + e);
234+
}
235+
236+
// Test case 10: Pass in a "null" uuid
237+
obj = "null";
238+
try{
239+
Class uudiClass = Class.forName("java.util.UUID");
240+
result = CommonUtil.convertObjectTo(obj, uudiClass, true);
241+
Assert.assertEquals(new UUID(0,0), result);
242+
} catch (Exception e){
243+
Assert.fail("Test failed " + e);
244+
}
245+
}
246+
247+
}

0 commit comments

Comments
 (0)