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 <archana....@sap.com>
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");

Reply via email to