Skip to content

Commit 0059f66

Browse files
committed
- light refactoring for clarity and defensive programming
1 parent 59fd088 commit 0059f66

File tree

1 file changed

+55
-45
lines changed

1 file changed

+55
-45
lines changed

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

Lines changed: 55 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -118,60 +118,70 @@ public <T> T deserializeObject(final String inputString, final Class<T> clazz, M
118118
* @param serializedObject the parent object whose children will be iterated to set additional data
119119
* @param rawJson the raw json
120120
*/
121-
@SuppressWarnings("unchecked")
122-
private void setChildAdditionalData(IJsonBackedObject serializedObject, JsonObject rawJson) {
121+
private void setChildAdditionalData(final IJsonBackedObject serializedObject, final JsonObject rawJson) {
123122
// Use reflection to iterate through fields for eligible Graph children
124-
for (java.lang.reflect.Field field : serializedObject.getClass().getFields()) {
125-
try {
126-
Object fieldObject = field.get(serializedObject);
127-
128-
// If the object is a HashMap, iterate through its children
129-
if (fieldObject instanceof HashMap) {
130-
HashMap<String, Object> serializableChildren = (HashMap<String, Object>) fieldObject;
131-
Iterator<Entry<String, Object>> it = serializableChildren.entrySet().iterator();
123+
if(rawJson != null) {
124+
for (java.lang.reflect.Field field : serializedObject.getClass().getFields()) {
125+
try {
126+
if(field != null) {
127+
final Object fieldObject = field.get(serializedObject);
128+
if (fieldObject instanceof HashMap) {
129+
// If the object is a HashMap, iterate through its children
130+
@SuppressWarnings("unchecked")
131+
final HashMap<String, Object> serializableChildren = (HashMap<String, Object>) fieldObject;
132+
final Iterator<Entry<String, Object>> it = serializableChildren.entrySet().iterator();
132133

133-
while (it.hasNext()) {
134-
Map.Entry<String, Object> pair = (Map.Entry<String, Object>)it.next();
135-
Object child = pair.getValue();
134+
while (it.hasNext()) {
135+
final Map.Entry<String, Object> pair = (Map.Entry<String, Object>)it.next();
136+
final Object child = pair.getValue();
136137

137-
// If the item is a valid Graph object, set its additional data
138-
if (child instanceof IJsonBackedObject) {
139-
AdditionalDataManager childAdditionalDataManager = ((IJsonBackedObject) child).additionalDataManager();
140-
if(rawJson != null && field != null && rawJson.get(field.getName()) != null && rawJson.get(field.getName()).isJsonObject()
141-
&& rawJson.get(field.getName()).getAsJsonObject().get(pair.getKey()).isJsonObject()) {
142-
childAdditionalDataManager.setAdditionalData(rawJson.get(field.getName()).getAsJsonObject().get(pair.getKey()).getAsJsonObject());
143-
setChildAdditionalData((IJsonBackedObject) child,rawJson.get(field.getName()).getAsJsonObject().get(pair.getKey()).getAsJsonObject());
138+
// If the item is a valid Graph object, set its additional data
139+
if (child instanceof IJsonBackedObject) {
140+
final AdditionalDataManager childAdditionalDataManager = ((IJsonBackedObject) child).additionalDataManager();
141+
final JsonElement fieldElement = rawJson.get(field.getName());
142+
if(fieldElement != null && fieldElement.isJsonObject()
143+
&& fieldElement.getAsJsonObject().get(pair.getKey()) != null
144+
&& fieldElement.getAsJsonObject().get(pair.getKey()).isJsonObject()) {
145+
childAdditionalDataManager.setAdditionalData(fieldElement.getAsJsonObject().get(pair.getKey()).getAsJsonObject());
146+
setChildAdditionalData((IJsonBackedObject) child,fieldElement.getAsJsonObject().get(pair.getKey()).getAsJsonObject());
147+
}
148+
}
144149
}
145150
}
146-
}
147-
}
148-
// If the object is a list of Graph objects, iterate through elements
149-
else if (fieldObject instanceof List && rawJson != null) {
150-
final JsonElement collectionJson = rawJson.get(field.getName());
151-
final List<?> fieldObjectList = (List<?>) fieldObject;
152-
if (collectionJson.isJsonArray() && ((JsonArray)collectionJson).size() == fieldObjectList.size()) {
153-
final JsonArray rawJsonArray = (JsonArray) collectionJson;
154-
for (int i = 0; i < fieldObjectList.size(); i++) {
155-
final Object element = fieldObjectList.get(i);
156-
if (element instanceof IJsonBackedObject) {
157-
final JsonElement elementRawJson = rawJsonArray.get(i);
158-
setChildAdditionalData((IJsonBackedObject) element, elementRawJson.getAsJsonObject());
151+
// If the object is a list of Graph objects, iterate through elements
152+
else if (fieldObject instanceof List) {
153+
final JsonElement collectionJson = rawJson.get(field.getName());
154+
final List<?> fieldObjectList = (List<?>) fieldObject;
155+
if (collectionJson != null && collectionJson.isJsonArray()) {
156+
final JsonArray rawJsonArray = (JsonArray) collectionJson;
157+
if(rawJsonArray.size() == fieldObjectList.size()) {
158+
for (int i = 0; i < fieldObjectList.size(); i++) {
159+
final Object element = fieldObjectList.get(i);
160+
if (element instanceof IJsonBackedObject) {
161+
final JsonElement elementRawJson = rawJsonArray.get(i);
162+
if(elementRawJson != null) {
163+
setChildAdditionalData((IJsonBackedObject) element, elementRawJson.getAsJsonObject());
164+
}
165+
}
166+
}
167+
}
168+
}
169+
}
170+
// If the object is a valid Graph object, set its additional data
171+
else if (fieldObject instanceof IJsonBackedObject) {
172+
final IJsonBackedObject serializedChild = (IJsonBackedObject) fieldObject;
173+
final AdditionalDataManager childAdditionalDataManager = serializedChild.additionalDataManager();
174+
final JsonElement fieldElement = rawJson.get(field.getName());
175+
if(fieldElement != null && fieldElement.isJsonObject()) {
176+
childAdditionalDataManager.setAdditionalData(fieldElement.getAsJsonObject());
177+
setChildAdditionalData((IJsonBackedObject) fieldObject,fieldElement.getAsJsonObject());
159178
}
160179
}
161180
}
181+
} catch (IllegalArgumentException | IllegalAccessException e) {
182+
//Not throwing the IllegalArgumentException as the Serialized Object would still be usable even if the additional data is not set.
183+
logger.logError("Unable to set child fields of " + serializedObject.getClass().getSimpleName(), e);
162184
}
163-
// If the object is a valid Graph object, set its additional data
164-
else if (fieldObject != null && fieldObject instanceof IJsonBackedObject) {
165-
IJsonBackedObject serializedChild = (IJsonBackedObject) fieldObject;
166-
AdditionalDataManager childAdditionalDataManager = serializedChild.additionalDataManager();
167-
if(rawJson != null && field != null && rawJson.get(field.getName()) != null && rawJson.get(field.getName()).isJsonObject()) {
168-
childAdditionalDataManager.setAdditionalData(rawJson.get(field.getName()).getAsJsonObject());
169-
setChildAdditionalData((IJsonBackedObject) fieldObject,rawJson.get(field.getName()).getAsJsonObject());
170-
}
171-
}
172-
} catch (IllegalArgumentException | IllegalAccessException e) {
173-
//Not throwing the IllegalArgumentException as the Serialized Object would still be usable even if the additional data is not set.
174-
logger.logError("Unable to set child fields of " + serializedObject.getClass().getSimpleName(), e);
175185
}
176186
}
177187
}

0 commit comments

Comments
 (0)