Skip to content

Commit 700451b

Browse files
committed
- fixes a bug where additional properties for upload sessions would not be send to the service
1 parent 566d653 commit 700451b

File tree

2 files changed

+59
-12
lines changed

2 files changed

+59
-12
lines changed

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

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
import com.google.gson.JsonElement;
3030
import com.google.gson.JsonObject;
3131
import com.microsoft.graph.logger.ILogger;
32+
33+
import java.lang.reflect.Field;
34+
import java.lang.reflect.Type;
3235
import java.util.HashMap;
3336
import java.util.Iterator;
3437
import java.util.List;
@@ -185,23 +188,46 @@ public <T> String serializeObject(final T serializableObject) {
185188
JsonElement outJsonTree = gson.toJsonTree(serializableObject);
186189

187190
if (serializableObject instanceof IJsonBackedObject) {
188-
IJsonBackedObject serializableJsonObject = (IJsonBackedObject) serializableObject;
189-
190-
AdditionalDataManager additionalData = serializableJsonObject.additionalDataManager();
191-
192-
// If the item is a valid Graph object, add its additional data
193-
if (outJsonTree.isJsonObject()) {
194-
JsonObject outJson = outJsonTree.getAsJsonObject();
195-
196-
addAdditionalDataToJson(additionalData, outJson);
197-
outJson = getChildAdditionalData(serializableJsonObject, outJson);
198-
199-
outJsonTree = outJson;
191+
outJsonTree = getDataFromAdditionalDataManager(outJsonTree, serializableObject);
192+
} else if (outJsonTree.isJsonObject()) {
193+
final Field[] fields = serializableObject.getClass().getDeclaredFields();
194+
JsonObject outJson = outJsonTree.getAsJsonObject();
195+
for(Field field : fields) {
196+
if(outJson.has(field.getName())) {
197+
final Type[] interfaces = field.getType().getGenericInterfaces();
198+
for(Type interfaceType : interfaces) {
199+
if(interfaceType == IJsonBackedObject.class) {
200+
try {
201+
outJsonTree = getDataFromAdditionalDataManager(outJsonTree, field.get(serializableObject));
202+
} catch (IllegalAccessException ex ) {
203+
logger.logDebug("Couldn't access prop" + field.getName());
204+
}
205+
break;
206+
}
207+
}
208+
}
200209
}
201210
}
202211

203212
return outJsonTree.toString();
204213
}
214+
private <T> JsonElement getDataFromAdditionalDataManager(JsonElement outJsonTree, final T serializableObject) {
215+
IJsonBackedObject serializableJsonObject = (IJsonBackedObject) serializableObject;
216+
217+
AdditionalDataManager additionalData = serializableJsonObject.additionalDataManager();
218+
219+
// If the item is a valid Graph object, add its additional data
220+
if (outJsonTree.isJsonObject()) {
221+
JsonObject outJson = outJsonTree.getAsJsonObject();
222+
223+
addAdditionalDataToJson(additionalData, outJson);
224+
outJson = getChildAdditionalData(serializableJsonObject, outJson);
225+
226+
return outJson;
227+
} else {
228+
return outJsonTree;
229+
}
230+
}
205231

206232
/**
207233
* Recursively populates additional data for each child object

src/test/java/com/microsoft/graph/serializer/AdditionalDataTests.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,24 @@
1111
import com.google.gson.JsonObject;
1212
import com.google.gson.JsonParser;
1313
import com.google.gson.JsonPrimitive;
14+
import com.microsoft.graph.authentication.IAuthenticationProvider;
15+
import com.microsoft.graph.authentication.MockAuthenticationProvider;
16+
import com.microsoft.graph.core.DefaultClientConfig;
1417
import com.microsoft.graph.logger.DefaultLogger;
1518
import com.microsoft.graph.models.extensions.Drive;
19+
import com.microsoft.graph.models.extensions.DriveItemCreateUploadSessionBody;
20+
import com.microsoft.graph.models.extensions.DriveItemUploadableProperties;
1621
import com.microsoft.graph.models.extensions.Entity;
22+
import com.microsoft.graph.models.extensions.IGraphServiceClient;
1723
import com.microsoft.graph.models.extensions.PlannerAssignment;
1824
import com.microsoft.graph.models.extensions.PlannerAssignments;
1925
import com.microsoft.graph.models.extensions.PlannerTask;
2026
import com.microsoft.graph.models.extensions.PlannerTaskDetails;
27+
import com.microsoft.graph.models.extensions.UploadSession;
2128
import com.microsoft.graph.models.extensions.User;
29+
import com.microsoft.graph.requests.extensions.GraphServiceClient;
30+
import com.microsoft.graph.requests.extensions.IDriveItemCreateUploadSessionRequest;
31+
import com.microsoft.graph.requests.extensions.IDriveItemCreateUploadSessionRequestBuilder;
2232

2333
public class AdditionalDataTests {
2434
public DefaultSerializer serializer;
@@ -55,6 +65,17 @@ public void testChildAdditionalData() {
5565

5666
assertEquals("{\"manager\":{\"id\":\"1\",\"additionalData\":\"additionalValue\"},\"id\":\"2\"}", serializedObject);
5767
}
68+
69+
@Test
70+
public void testPropsAdditionalDataOnNonIJSONObjects() {
71+
final DriveItemUploadableProperties upProps = new DriveItemUploadableProperties();
72+
upProps.name = "vacation.gif";
73+
upProps.additionalDataManager().put("@microsoft.graph.conflictBehavior", new JsonPrimitive("rename"));
74+
final DriveItemCreateUploadSessionBody body = new DriveItemCreateUploadSessionBody();
75+
body.item = upProps;
76+
String serializedObject = serializer.serializeObject(body);
77+
assertEquals("{\"item\":{\"name\":\"vacation.gif\"},\"@microsoft.graph.conflictBehavior\":\"rename\"}", serializedObject);
78+
}
5879

5980
@Test
6081
public void testHashMapChildAnnotationData() {

0 commit comments

Comments
 (0)