You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by st...@apache.org on 2017/09/25 21:21:34 UTC
johnzon git commit: JOHNZON-135 also support deduplication in arrays
Repository: johnzon
Updated Branches:
refs/heads/master 60f48cf65 -> ade1c2717
JOHNZON-135 also support deduplication in arrays
Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/ade1c271
Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/ade1c271
Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/ade1c271
Branch: refs/heads/master
Commit: ade1c27179830d06488cd80da0fa5ec233025f53
Parents: 60f48cf
Author: Mark Struberg <st...@apache.org>
Authored: Mon Sep 25 23:19:45 2017 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Mon Sep 25 23:20:14 2017 +0200
----------------------------------------------------------------------
.../johnzon/mapper/MappingGeneratorImpl.java | 10 ++++-
.../johnzon/mapper/MappingParserImpl.java | 4 +-
.../johnzon/mapper/CircularObjectsTest.java | 42 ++++++++++++++++++++
3 files changed, 53 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/johnzon/blob/ade1c271/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java
index 20b50ce..a76b447 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java
@@ -92,7 +92,7 @@ public class MappingGeneratorImpl implements MappingGenerator {
}
if (object instanceof Iterable) {
- doWriteIterable((Iterable) object, ignoredProperties, config.isDeduplicateObjects() ? new JsonPointerTracker(null, "/") : null);
+ doWriteIterable((Iterable) object, ignoredProperties, jsonPointer);
return;
}
@@ -424,7 +424,13 @@ public class MappingGeneratorImpl implements MappingGenerator {
} else if (o == null) {
generator.writeNull();
} else {
- doWriteObject(o, generator, true, ignoredProperties, jsonPointer);
+ String valJsonPointer = jsonPointers.get(o);
+ if (valJsonPointer != null) {
+ // write the JsonPointer instead
+ generator.write(valJsonPointer);
+ } else {
+ doWriteObject(o, generator, true, ignoredProperties, jsonPointer);
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/johnzon/blob/ade1c271/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
index 101b438..f35fe40 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
@@ -600,7 +600,9 @@ public class MappingParserImpl implements MappingParser {
final Object array = Array.newInstance(componentType, jsonArray.size());
int i = 0;
for (final JsonValue value : jsonArray) {
- Array.set(array, i++, toObject(null, value, componentType, itemConverter, jsonPointer));
+ Array.set(array, i, toObject(null, value, componentType, itemConverter,
+ config.isDeduplicateObjects() ? new JsonPointerTracker(jsonPointer, i) : null));
+ i++;
}
return array;
}
http://git-wip-us.apache.org/repos/asf/johnzon/blob/ade1c271/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/CircularObjectsTest.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/CircularObjectsTest.java b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/CircularObjectsTest.java
index 4af1d29..c473c6d 100644
--- a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/CircularObjectsTest.java
+++ b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/CircularObjectsTest.java
@@ -18,6 +18,7 @@
*/
package org.apache.johnzon.mapper;
+import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
@@ -114,6 +115,47 @@ public class CircularObjectsTest {
}
}
+ @Test
+ public void testCyclesInArrays() {
+ Person karl = new Person("Karl");
+ Person andrea = new Person("Andrea");
+ Person lu = new Person("Lu");
+ Person sue = new Person("Sue");
+
+ karl.setMarriedTo(andrea);
+ karl.getKids().add(lu);
+ karl.getKids().add(sue);
+
+ andrea.setMarriedTo(karl);
+ andrea.getKids().add(lu);
+ andrea.getKids().add(sue);
+
+ lu.setFather(karl);
+ lu.setMother(andrea);
+
+ sue.setFather(karl);
+ sue.setMother(andrea);
+
+ Mapper mapper = new MapperBuilder().setAccessModeName("field").setDeduplicateObjects(true).build();
+
+ // test deep array
+ Person[] people = new Person[4];
+ people[0] = karl;
+ people[1] = andrea;
+ people[2] = lu;
+ people[3] = sue;
+
+ String peopleJson = mapper.writeArrayAsString(people);
+ Person[] people2 = mapper.readArray(new StringReader(peopleJson), Person.class);
+ assertNotNull(people2);
+ assertEquals(4, people2.length);
+ assertEquals("Karl", people2[0].getName());
+ assertEquals("Andrea", people2[1].getName());
+ assertEquals("Lu", people2[2].getName());
+ assertEquals("Sue", people2[3].getName());
+
+ }
+
public static class Person {
private String name;
private Person marriedTo;