Skip to content

Commit 69df140

Browse files
committed
Removed DerivedClassIdentifier and related code from:
- DefaultSerializer - CollectionResponseDeserializer ... as this is now taken care by ODataTypeParametrizedJsonBackedTypeAdapter. Tests covering this change: - com.microsoft.graph.serializer.DefaultSerializerTest.testDeserializationOfObjectWithODataTypeProperty - com.microsoft.graph.serializer.ODataTypeParametrizedIJsonBackedTypedAdapterTest.testDeserializationOfNestedODataTypeAnnotatedObjects
1 parent 88eca42 commit 69df140

File tree

6 files changed

+54
-34
lines changed

6 files changed

+54
-34
lines changed

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424

2525
import java.lang.reflect.InvocationTargetException;
2626
import java.lang.reflect.Type;
27-
import java.util.ArrayList;
2827
import java.util.List;
2928
import java.util.Objects;
3029

@@ -112,7 +111,7 @@ public static <T1, T2 extends BaseRequestBuilder<T1>> BaseCollectionPage<T1, T2>
112111
final Class<?> responseClass = Class.forName(responseClassCanonicalName);
113112
final JsonObject responseJson = new JsonObject();
114113
responseJson.add("value", json);
115-
final BaseCollectionResponse<T1> response = CollectionResponseSerializer.deserialize(responseJson, responseClass, logger);
114+
final BaseCollectionResponse<T1> response = CollectionResponseDeserializer.deserialize(responseJson, responseClass, logger);
116115
/** eg: com.microsoft.graph.requests.AttachmentCollectionRequestBuilder */
117116
final String responseBuilderCanonicalName = responseClassCanonicalName
118117
.substring(0, responseClassCanonicalName.length() - responseLength) + "RequestBuilder";

src/main/java/com/microsoft/graph/serializer/CollectionResponseSerializer.java renamed to src/main/java/com/microsoft/graph/serializer/CollectionResponseDeserializer.java

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,13 @@
3737
import com.microsoft.graph.http.BaseCollectionResponse;
3838
import com.microsoft.graph.logger.ILogger;
3939

40-
/** Specialized serializer to handle collection responses */
41-
public class CollectionResponseSerializer {
40+
/** Specialized de-serializer to handle collection responses */
41+
public class CollectionResponseDeserializer {
4242
private static DefaultSerializer serializer;
4343
/**
4444
* Not available for instantiation
4545
*/
46-
private CollectionResponseSerializer() {}
46+
private CollectionResponseDeserializer() {}
4747
/**
4848
* Deserializes the JsonElement
4949
*
@@ -83,19 +83,10 @@ public static <T1> BaseCollectionResponse<T1> deserialize(@Nonnull final JsonEle
8383
logger.logDebug("could not find class" + baseEntityClassCanonicalName);
8484
}
8585
try {
86-
final DerivedClassIdentifier derivedClassIdentifier = new DerivedClassIdentifier(logger);
8786
for(JsonElement sourceElement : sourceArray) {
8887
if(sourceElement.isJsonObject()) {
8988
final JsonObject sourceObject = sourceElement.getAsJsonObject();
90-
Class<?> entityClass = derivedClassIdentifier.identify(sourceObject, baseEntityClass);
91-
if(entityClass == null) {
92-
if(baseEntityClass == null) {
93-
logger.logError("Could not find target class for object " + sourceObject.toString(), null);
94-
continue;
95-
} else
96-
entityClass = baseEntityClass; // it is possible the odata type is absent or we can't find the derived type (not in SDK yet)
97-
}
98-
final T1 targetObject = (T1)serializer.deserializeObject(sourceObject, entityClass);
89+
final T1 targetObject = (T1)serializer.deserializeObject(sourceObject, baseEntityClass);
9990
((IJsonBackedObject)targetObject).setRawObject(serializer, sourceObject);
10091
list.add(targetObject);
10192
} else if (sourceElement.isJsonPrimitive()) {

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

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,6 @@ public class DefaultSerializer implements ISerializer {
5858
*/
5959
private final Gson gson;
6060

61-
/**
62-
* Derived class identifier
63-
*/
64-
private final DerivedClassIdentifier derivedClassIdentifier;
6561

6662
/**
6763
* Creates a DefaultSerializer
@@ -71,7 +67,6 @@ public class DefaultSerializer implements ISerializer {
7167
public DefaultSerializer(@Nonnull final ILogger logger) {
7268
this.logger = Objects.requireNonNull(logger, "parameter logger cannot be null");
7369
this.gson = GsonFactory.getGsonInstance(logger);
74-
this.derivedClassIdentifier = new DerivedClassIdentifier(logger);
7570
}
7671

7772
@Override
@@ -108,16 +103,7 @@ public <T> T deserializeObject(@Nonnull final JsonElement rawElement, @Nonnull f
108103
if (jsonObject instanceof IJsonBackedObject) {
109104
logger.logDebug("Deserializing type " + clazz.getSimpleName());
110105
final JsonObject rawObject = rawElement.isJsonObject() ? rawElement.getAsJsonObject() : null;
111-
112-
// If there is a derived class, try to get it and deserialize to it
113-
T jo = jsonObject;
114-
if (rawElement.isJsonObject()) {
115-
final Class<?> derivedClass = derivedClassIdentifier.identify(rawObject, clazz);
116-
if (derivedClass != null)
117-
jo = (T) gson.fromJson(rawElement, derivedClass);
118-
}
119-
120-
final IJsonBackedObject jsonBackedObject = (IJsonBackedObject) jo;
106+
final IJsonBackedObject jsonBackedObject = (IJsonBackedObject) jsonObject;
121107

122108
if(rawElement.isJsonObject()) {
123109
jsonBackedObject.setRawObject(this, rawObject);
@@ -129,7 +115,7 @@ public <T> T deserializeObject(@Nonnull final JsonElement rawElement, @Nonnull f
129115
JsonElement convertedHeaders = gson.toJsonTree(responseHeaders);
130116
jsonBackedObject.additionalDataManager().put(GRAPH_RESPONSE_HEADERS_KEY, convertedHeaders);
131117
}
132-
return jo;
118+
return jsonObject;
133119
} else {
134120
logger.logDebug("Deserializing a non-IJsonBackedObject type " + clazz.getSimpleName());
135121
return jsonObject;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ public JsonElement serialize(final BaseCollectionPage<?, ?> src,
239239
public BaseCollectionResponse<?> deserialize(final JsonElement json,
240240
final Type typeOfT,
241241
final JsonDeserializationContext context) throws JsonParseException {
242-
return CollectionResponseSerializer.deserialize(json, typeOfT, logger);
242+
return CollectionResponseDeserializer.deserialize(json, typeOfT, logger);
243243
}
244244
};
245245

src/test/java/com/microsoft/graph/models/TestIJsonBackedObject.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,22 @@
1111

1212
public abstract class TestIJsonBackedObject implements IJsonBackedObject {
1313

14+
AdditionalDataManager additionalDataManager = mock(AdditionalDataManager.class);
15+
16+
String rawObject;
17+
1418
@Override
1519
public void setRawObject(@NotNull ISerializer serializer, @NotNull JsonObject json) {
16-
// Do nothing
20+
this.rawObject = json.toString();
1721
}
1822

1923
@Nullable
2024
@Override
2125
public AdditionalDataManager additionalDataManager() {
22-
return mock(AdditionalDataManager.class);
26+
return additionalDataManager;
27+
}
28+
29+
public String getRawObject() {
30+
return rawObject;
2331
}
2432
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.microsoft.graph.serializer;
2+
3+
import com.google.gson.Gson;
4+
import com.google.gson.JsonElement;
5+
import com.microsoft.graph.logger.ILogger;
6+
import com.microsoft.graph.models.ReactionStub;
7+
import com.microsoft.graph.models.SubReactionStub1;
8+
import org.junit.jupiter.api.Test;
9+
import org.mockito.Mockito;
10+
11+
import static org.junit.jupiter.api.Assertions.assertEquals;
12+
import static org.junit.jupiter.api.Assertions.assertTrue;
13+
import static org.mockito.Mockito.mock;
14+
15+
public class DefaultSerializerTest {
16+
17+
final ILogger logger = mock(ILogger.class);
18+
Gson gson = GsonFactory.getGsonInstance(logger);
19+
DefaultSerializer defaultSerializer = new DefaultSerializer(logger);
20+
21+
@Test
22+
public void testDeserializationOfObjectWithODataTypeProperty() {
23+
// Given
24+
final String testJsonResponse =
25+
"{\"@odata.type\": \"#microsoft.graph.subReactionStub1\"}";
26+
27+
// When
28+
ReactionStub reaction = defaultSerializer.deserializeObject(testJsonResponse, ReactionStub.class);
29+
30+
// Then
31+
assertTrue(reaction instanceof SubReactionStub1);
32+
assertEquals("{\"@odata.type\":\"#microsoft.graph.subReactionStub1\"}", reaction.getRawObject());
33+
Mockito.verify(reaction.additionalDataManager()).setAdditionalData(gson.fromJson(testJsonResponse, JsonElement.class).getAsJsonObject());
34+
}
35+
36+
}

0 commit comments

Comments
 (0)