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)); + } } }
