This is an automated email from the ASF dual-hosted git repository.
archanarai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/olingo-odata2.git
The following commit(s) were added to refs/heads/master by this push:
new 156e167 [OLINGO-1365]Child entities not serialized if parent has no
property
156e167 is described below
commit 156e167c9de4238dee75f8c82995463aa5ee84f3
Author: Archana Rai <[email protected]>
AuthorDate: Wed Jun 12 10:50:58 2019 +0530
[OLINGO-1365]Child entities not serialized if parent has no property
---
.../ep/serializer/JsonEntryEntitySerializer.java | 12 +++---
.../serializer/JsonEntryEntitySerializerTest.java | 45 ++++++++++++++++++++++
2 files changed, 52 insertions(+), 5 deletions(-)
diff --git
a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/ep/serializer/JsonEntryEntitySerializer.java
b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/ep/serializer/JsonEntryEntitySerializer.java
index b727538..fec92c8 100644
---
a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/ep/serializer/JsonEntryEntitySerializer.java
+++
b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/ep/serializer/JsonEntryEntitySerializer.java
@@ -92,7 +92,7 @@ public class JsonEntryEntitySerializer {
}
writeProperties(entityInfo, data.getProperties(), type,
containsMetadata);
- writeNavigationProperties(writer, entityInfo, data.getNavigations(),
type);
+ writeNavigationProperties(writer, entityInfo, data.getNavigations(),
type, data.getProperties().isEmpty());
jsonStreamWriter.endObject();
writer.flush();
@@ -107,7 +107,7 @@ public class JsonEntryEntitySerializer {
private void writeNavigationProperties(final Writer writer, final
EntityInfoAggregator entityInfo,
final Map<String, Object> data,
- final EdmEntityType type) throws EdmException, EntityProviderException,
IOException {
+ final EdmEntityType type, boolean emptyData) throws EdmException,
EntityProviderException, IOException {
for (final String navigationPropertyName :
type.getNavigationPropertyNames()) {
if (data.containsKey(navigationPropertyName)) {
if (data.get(navigationPropertyName) == null) {
@@ -115,7 +115,10 @@ public class JsonEntryEntitySerializer {
}
if (data.get(navigationPropertyName) instanceof Entity ||
data.get(navigationPropertyName) instanceof EntityCollection) {
- jsonStreamWriter.separator();
+ if( !emptyData){
+ jsonStreamWriter.separator();
+ }
+ emptyData=false;
jsonStreamWriter.name(navigationPropertyName);
writeExpandedNavigationProperty(writer, entityInfo, data, type,
navigationPropertyName);
} else if (data.get(navigationPropertyName) instanceof Map<?,?>){
@@ -157,8 +160,7 @@ public class JsonEntryEntitySerializer {
if(inlineData == null){
throw new EntityProviderException(EntityProviderException.NULL_VALUE);
}
- if (inlineData != null && inlineData.getProperties() != null &&
- !inlineData.getProperties().isEmpty()) {
+ if (inlineData != null && inlineData.getProperties() != null) {
final EntitySerializerProperties inlineProperties =
inlineData.getWriteProperties() == null ?
EntitySerializerProperties.
serviceRoot(properties.getServiceRoot()).build() :
inlineData.getWriteProperties();
diff --git
a/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/ep/serializer/JsonEntryEntitySerializerTest.java
b/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/ep/serializer/JsonEntryEntitySerializerTest.java
index e3e06f0..69524a4 100644
---
a/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/ep/serializer/JsonEntryEntitySerializerTest.java
+++
b/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/ep/serializer/JsonEntryEntitySerializerTest.java
@@ -739,6 +739,51 @@ public class JsonEntryEntitySerializerTest extends
BaseTest {
assertNotNull(json);
assertEquals("{\"Id\":\"1\",\"Version\":1,\"nr_Building\":{\"Id\":\"1\",\"Name\":\"Building1\"}}",
json);
}
+
+ @Test
+ public void unbalancedPropertyEntryWithMultipleInlineEntry() throws
Exception {
+ final EdmEntitySet entitySet =
MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms");
+ Entity roomData = new Entity();
+ roomData.addProperty("Id", "1");
+ roomData.addProperty("Version", 1);
+
+ Entity nrBuildingData = new Entity();
+ EntityCollection roomsCollection = new EntityCollection();
+ Entity nbRoomData = new Entity();
+ nbRoomData.addProperty("Id", "1");
+ nbRoomData.addProperty("Version", 1);
+ roomsCollection.addEntity(nbRoomData);
+ nrBuildingData.addNavigation("nb_Rooms", roomsCollection);
+ roomData.addNavigation("nr_Building", nrBuildingData);
+
+ EntityCollection nrEmployeeCollection = new EntityCollection();
+ Entity employeeData = new Entity();
+ Entity managerData = new Entity();
+ managerData.addProperty("EmployeeId", "1");
+ managerData.addProperty("ImageUrl", "hhtp://url");
+ employeeData.addNavigation("ne_Manager", managerData);
+ Entity neRoomData = new Entity();
+ neRoomData.addProperty("Id", "1");
+ neRoomData.addProperty("Version", 1);
+ employeeData.addNavigation("ne_Room", neRoomData);
+ nrEmployeeCollection.addEntity(employeeData);
+ nrEmployeeCollection.addEntity(managerData);
+ roomData.addNavigation("nr_Employees", nrEmployeeCollection);
+
+ final ODataResponse response =
+ new JsonSerializerDeserializer().writeEntry(entitySet, roomData);
+ assertNotNull(response);
+ assertNotNull(response.getEntity());
+ assertNull("EntitypProvider must not set content header",
response.getContentHeader());
+
+ final String json = StringHelper.inputStreamToString((InputStream)
response.getEntity());
+ assertNotNull(json);
+ assertEquals("{\"Id\":\"1\",\"Version\":1,\"nr_Employees\":[{" +
+
"\"ne_Manager\":{\"EmployeeId\":\"1\"},\"ne_Room\":{\"Id\":\"1\",\"Version\":1}},"+
+ "{\"EmployeeId\":\"1\",\"ImageUrl\":\"hhtp://url\"}],"+
+ "\"nr_Building\":{\"nb_Rooms\":[{\"Id\":\"1\",\"Version\":1}]}}",
json);
+ }
+
@Test
public void entryWithEmptyInlineEntry() throws Exception {
final EdmEntitySet entitySet =
MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms");