Repository: johnzon Updated Branches: refs/heads/master 297654206 -> b2d205738
JOHNZON-193 ensure objectbuilder is reusable (todo: check it is valid since the map is not accurate for that but it is what the spec designed) Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/b2d20573 Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/b2d20573 Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/b2d20573 Branch: refs/heads/master Commit: b2d205738c65fb53e768fca445fa611515417c19 Parents: 2976542 Author: Romain Manni-Bucau <[email protected]> Authored: Thu Oct 25 12:40:58 2018 +0200 Committer: Romain Manni-Bucau <[email protected]> Committed: Thu Oct 25 12:40:58 2018 +0200 ---------------------------------------------------------------------- .../johnzon/core/JsonObjectBuilderImpl.java | 2 -- .../org/apache/johnzon/core/JsonObjectImpl.java | 3 ++- .../apache/johnzon/core/JsonObjectImplTest.java | 20 ++++++++++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/johnzon/blob/b2d20573/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java index b0d276f..b89a671 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java @@ -171,7 +171,5 @@ class JsonObjectBuilderImpl implements JsonObjectBuilder, Serializable { Map<String, JsonValue> dump = (Collections.unmodifiableMap(attributeMap)); return new JsonObjectImpl(dump); } - - } } http://git-wip-us.apache.org/repos/asf/johnzon/blob/b2d20573/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectImpl.java index bb3a5ae..a260e25 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectImpl.java @@ -27,6 +27,7 @@ import java.io.ObjectStreamException; import java.io.Serializable; import java.util.AbstractMap; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; @@ -54,7 +55,7 @@ final class JsonObjectImpl extends AbstractMap<String, JsonValue> implements Jso JsonObjectImpl(final Map<String, JsonValue> backingMap) { super(); - this.unmodifieableBackingMap = backingMap; + this.unmodifieableBackingMap = new LinkedHashMap<>(backingMap); } @Override http://git-wip-us.apache.org/repos/asf/johnzon/blob/b2d20573/johnzon-core/src/test/java/org/apache/johnzon/core/JsonObjectImplTest.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonObjectImplTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonObjectImplTest.java index 1557070..2e418e6 100644 --- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonObjectImplTest.java +++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonObjectImplTest.java @@ -24,7 +24,10 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import java.util.stream.IntStream; + import javax.json.Json; +import javax.json.JsonArrayBuilder; import javax.json.JsonObject; import javax.json.JsonObjectBuilder; import javax.json.JsonValue; @@ -33,6 +36,23 @@ import org.junit.Test; public class JsonObjectImplTest { @Test + public void reuseObjectBuilder() { + final JsonObjectBuilder jsonObjectBuilder = Json.createObjectBuilder(); + final JsonArrayBuilder jsonArrayBuilder = Json.createArrayBuilder(); + IntStream.range(1, 10).forEach(numer -> { + jsonObjectBuilder.add("key", String.format("Key %d", numer)); + jsonObjectBuilder.add("value", String.format("Value %d", numer)); + jsonArrayBuilder.add(jsonObjectBuilder); + }); + final String message = jsonArrayBuilder.build().toString(); + assertEquals("[{\"key\":\"Key 1\",\"value\":\"Value 1\"},{\"key\":\"Key 2\",\"value\":\"Value 2\"}," + + "{\"key\":\"Key 3\",\"value\":\"Value 3\"},{\"key\":\"Key 4\",\"value\":\"Value 4\"},{\"key\":\"Key " + + "5\",\"value\":\"Value 5\"},{\"key\":\"Key 6\",\"value\":\"Value 6\"},{\"key\":\"Key 7\"," + + "\"value\":\"Value 7\"},{\"key\":\"Key 8\",\"value\":\"Value 8\"},{\"key\":\"Key 9\"," + + "\"value\":\"Value 9\"}]", message); + } + + @Test public void boolErrors() { { final JsonObject val = Json.createObjectBuilder().add("a", true).build();
