Skip to content

Commit abd03ca

Browse files
Merge pull request #169 from microsoftgraph/planneritem-issue-fix
Added null checks to rawJson and outJson
2 parents e64e922 + caad163 commit abd03ca

File tree

2 files changed

+58
-7
lines changed

2 files changed

+58
-7
lines changed

src/main/java/com/microsoft/graph/serializer/DefaultSerializer.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -134,18 +134,21 @@ private void setChildAdditionalData(IJsonBackedObject serializedObject, JsonObje
134134
// If the item is a valid Graph object, set its additional data
135135
if (child instanceof IJsonBackedObject) {
136136
AdditionalDataManager childAdditionalDataManager = ((IJsonBackedObject) child).additionalDataManager();
137-
childAdditionalDataManager.setAdditionalData(rawJson.get(field.getName()).getAsJsonObject());
138-
setChildAdditionalData((IJsonBackedObject) child,rawJson.get(field.getName()).getAsJsonObject());
137+
if(rawJson != null && field != null && rawJson.get(field.getName()) != null && rawJson.get(field.getName()).isJsonObject()) {
138+
childAdditionalDataManager.setAdditionalData(rawJson.get(field.getName()).getAsJsonObject());
139+
setChildAdditionalData((IJsonBackedObject) child,rawJson.get(field.getName()).getAsJsonObject());
140+
}
139141
}
140142
}
141143
}
142144
// If the object is a valid Graph object, set its additional data
143145
else if (fieldObject != null && fieldObject instanceof IJsonBackedObject) {
144146
IJsonBackedObject serializedChild = (IJsonBackedObject) fieldObject;
145147
AdditionalDataManager childAdditionalDataManager = serializedChild.additionalDataManager();
146-
147-
childAdditionalDataManager.setAdditionalData(rawJson.get(field.getName()).getAsJsonObject());
148-
setChildAdditionalData((IJsonBackedObject) fieldObject,rawJson.get(field.getName()).getAsJsonObject());
148+
if(rawJson != null && field != null && rawJson.get(field.getName()) != null && rawJson.get(field.getName()).isJsonObject()) {
149+
childAdditionalDataManager.setAdditionalData(rawJson.get(field.getName()).getAsJsonObject());
150+
setChildAdditionalData((IJsonBackedObject) fieldObject,rawJson.get(field.getName()).getAsJsonObject());
151+
}
149152
}
150153
} catch (IllegalArgumentException | IllegalAccessException e) {
151154
logger.logError("Unable to access child fields of " + serializedObject.getClass().getSimpleName(), e);
@@ -229,8 +232,9 @@ private JsonObject getChildAdditionalData(IJsonBackedObject serializableObject,
229232
else if (fieldObject != null && fieldObject instanceof IJsonBackedObject) {
230233
IJsonBackedObject serializableChild = (IJsonBackedObject) fieldObject;
231234
AdditionalDataManager childAdditionalData = serializableChild.additionalDataManager();
232-
233-
addAdditionalDataToJson(childAdditionalData, outJson.get(field.getName()).getAsJsonObject());
235+
if(outJson != null && field != null && outJson.get(field.getName()) != null && outJson.get(field.getName()).isJsonObject()) {
236+
addAdditionalDataToJson(childAdditionalData, outJson.get(field.getName()).getAsJsonObject());
237+
}
234238

235239
// Serialize its children
236240
outJson = getChildAdditionalData(serializableChild, outJson);

src/test/java/com/microsoft/graph/functional/PlannerTests.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.google.gson.JsonElement;
1717
import com.google.gson.JsonObject;
1818
import com.google.gson.JsonPrimitive;
19+
import com.microsoft.graph.logger.DefaultLogger;
1920
import com.microsoft.graph.models.extensions.PlannerAssignedToTaskBoardTaskFormat;
2021
import com.microsoft.graph.models.extensions.PlannerAssignment;
2122
import com.microsoft.graph.models.extensions.PlannerAssignments;
@@ -35,6 +36,7 @@
3536
import com.microsoft.graph.requests.extensions.IPlannerTaskDetailsRequest;
3637
import com.microsoft.graph.requests.extensions.IPlannerTaskRequest;
3738
import com.microsoft.graph.serializer.AdditionalDataManager;
39+
import com.microsoft.graph.serializer.DefaultSerializer;
3840

3941
@Ignore
4042
public class PlannerTests {
@@ -402,6 +404,51 @@ public void testDeleteBucket() {
402404
req.addHeader("If-Match", createdBucket.etag);
403405
req.delete();
404406
}
407+
408+
@Test
409+
public void testPlannerChecklistItemDeserialization() throws Exception{
410+
String input = "{\"@odata.context\":\"https://graph.microsoft.com/v1.0/$metadata#planner/tasks('433tZlfn_USJwWRL9khDx8kALTM7')/details/$entity\",\"@odata.etag\":\"W/\\\"JzEtVGFza0RldGFpbHMgQEBAQEBAQEBAQEBAQEBAcCc=\\\"\",\"description\":\"This is a test description of test event two.\",\"previewType\":\"automatic\",\"id\":\"433tZlfn_USJwWRL9khDx8kALTM7\",\"references\":{},\"checklist\":{\"55554\":{\"@odata.type\":\"#microsoft.graph.plannerChecklistItem\",\"isChecked\":false,\"title\":\"Test Item 2\",\"orderHint\":\"8586580527[2\",\"lastModifiedDateTime\":\"2018-11-30T05:01:53.0387892Z\",\"lastModifiedBy\":{\"user\":{\"displayName\":null,\"id\":\"ec786dee-da15-4896-8e73-57141477bae7\"}}},\"91100\":{\"@odata.type\":\"#microsoft.graph.plannerChecklistItem\",\"isChecked\":true,\"title\":\"Test Item 1 \",\"orderHint\":\"8586580528393292964Pc\",\"lastModifiedDateTime\":\"2018-11-30T05:01:47.4138223Z\",\"lastModifiedBy\":{\"user\":{\"displayName\":null,\"id\":\"ec786dee-da15-4896-8e73-57141477bae7\"}}}}}";
411+
final DefaultSerializer serializer = new DefaultSerializer(new DefaultLogger());
412+
PlannerTaskDetails ptd = serializer.deserializeObject(input, PlannerTaskDetails.class);
413+
assertNotNull(ptd);
414+
PlannerChecklistItem item1 = ptd.checklist.get("91100");
415+
assertEquals(item1.title,"Test Item 1 ");
416+
PlannerChecklistItem item2 = ptd.checklist.get("55554");
417+
assertEquals(item2.title,"Test Item 2");
418+
}
419+
420+
@Test
421+
public void testPlannerTaskDetailsDeserialization() {
422+
String input = "{\r\n" +
423+
" \"references\": {},\r\n" +
424+
" \"@odata.etag\": \"W/\\\"JzEtVGFza0RldGFpbHMgQEBAQEBAQEBAQEBAQEBAUCc=\\\"\",\r\n" +
425+
" \"description\": null,\r\n" +
426+
" \"checklist\": {\r\n" +
427+
" \"42660\": {\r\n" +
428+
" \"lastModifiedDateTime\": \"2018-10-28T14:29:37.7423391Z\",\r\n" +
429+
" \"@odata.type\": \"#microsoft.graph.plannerChecklistItem\",\r\n" +
430+
" \"orderHint\": \"8586608699726429822PK\",\r\n" +
431+
" \"lastModifiedBy\": {\r\n" +
432+
" \"user\": {\r\n" +
433+
" \"displayName\": null,\r\n" +
434+
" \"id\": \"f3a1dfe8-f2ef-4870-9642-413d468c571c\"\r\n" +
435+
" }\r\n" +
436+
" },\r\n" +
437+
" \"title\": \"Ein Checklisteneintrag\",\r\n" +
438+
" \"isChecked\": false\r\n" +
439+
" }\r\n" +
440+
" },\r\n" +
441+
" \"@odata.context\": \"https://graph.microsoft.com/v1.0/$metadata#planner/tasks('C6iIn6oJcEGcLX5XAiKeCZcAOv30')/details/$entity\",\r\n" +
442+
" \"previewType\": \"automatic\",\r\n" +
443+
" \"id\": \"C6iIn6oJcEGcLX5XAiKeCZcAOv30\"\r\n" +
444+
"}";
445+
final DefaultSerializer serializer = new DefaultSerializer(new DefaultLogger());
446+
PlannerTaskDetails ptd = serializer.deserializeObject(input, PlannerTaskDetails.class);
447+
assertNotNull(ptd);
448+
PlannerChecklistItem item = ptd.checklist.get("42660");
449+
assertEquals(item.title, "Ein Checklisteneintrag");
450+
assertEquals(item.isChecked, false);
451+
}
405452

406453
@AfterClass
407454
public static void tearDown() throws InterruptedException {

0 commit comments

Comments
 (0)