Repository: olingo-odata4
Updated Branches:
  refs/heads/master 120adfea5 -> 591f9522b


OLINGO-1009: refining the cycle detection logic


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/591f9522
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/591f9522
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/591f9522

Branch: refs/heads/master
Commit: 591f9522b5056bc924e998a1acb4bcc156211b67
Parents: 120adfe
Author: Ramesh Reddy <[email protected]>
Authored: Fri Sep 9 19:00:57 2016 -0500
Committer: Ramesh Reddy <[email protected]>
Committed: Fri Sep 9 19:00:57 2016 -0500

----------------------------------------------------------------------
 .../server/core/serializer/json/ODataJsonSerializer.java  |  8 +++-----
 .../server/core/serializer/xml/ODataXmlSerializer.java    | 10 +++++-----
 2 files changed, 8 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/591f9522/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
----------------------------------------------------------------------
diff --git 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
index f6e6015..edca2e4 100644
--- 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
+++ 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
@@ -323,13 +323,11 @@ public class ODataJsonSerializer extends 
AbstractODataSerializer {
       final SelectOption select, final boolean onlyReference, Set<String> 
ancestors, final JsonGenerator json)
       throws IOException, SerializerException {
     boolean cycle = false;
-    if (expand != null && cycleDetected(ancestors, getEntityId(entity))) {
-        cycle = true;
-    } else {
+    if (expand != null) {
       if (ancestors == null) {
         ancestors = new HashSet<String>();
       }
-      ancestors.add(getEntityId(entity));
+      cycle = !ancestors.add(getEntityId(entity));
     }
     try {
       json.writeStartObject();
@@ -383,7 +381,7 @@ public class ODataJsonSerializer extends 
AbstractODataSerializer {
       }
       json.writeEndObject();
     } finally {
-      if (!cycle && ancestors != null) {
+      if (expand != null && !cycle && ancestors != null) {
         ancestors.remove(getEntityId(entity));
       }
     }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/591f9522/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java
----------------------------------------------------------------------
diff --git 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java
 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java
index 56ee391..d8acbf4 100644
--- 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java
+++ 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java
@@ -440,13 +440,11 @@ public class ODataXmlSerializer extends 
AbstractODataSerializer {
       final XMLStreamWriter writer, final boolean top, final boolean 
writeOnlyRef, Set<String> ancestors)
       throws XMLStreamException, SerializerException {
     boolean cycle = false;
-    if (expand != null && cycleDetected(ancestors, getEntityId(entity))) {
-      cycle = true;
-    } else {
+    if (expand != null) {
       if (ancestors == null) {
         ancestors = new HashSet<String>();
       }
-      ancestors.add(getEntityId(entity));
+      cycle = !ancestors.add(getEntityId(entity));
     }
 
     if (cycle || writeOnlyRef) {
@@ -531,7 +529,9 @@ public class ODataXmlSerializer extends 
AbstractODataSerializer {
       
       writer.writeEndElement(); // entry
     } finally {
-      ancestors.remove(getEntityId(entity));
+      if (!cycle && ancestors != null) {
+        ancestors.remove(getEntityId(entity));
+      }
     }
   }
 

Reply via email to