Repository: johnzon Updated Branches: refs/heads/master 2dd46d889 -> 6a2d5511f
JOHNZON-103 fix JsonPointer encoding for JsonPatch Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/6a2d5511 Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/6a2d5511 Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/6a2d5511 Branch: refs/heads/master Commit: 6a2d5511f35f5d1bd93fd814e0d3069aed72cb11 Parents: 2dd46d8 Author: Mark Struberg <[email protected]> Authored: Tue Feb 28 21:11:10 2017 +0100 Committer: Mark Struberg <[email protected]> Committed: Tue Feb 28 21:11:10 2017 +0100 ---------------------------------------------------------------------- .../main/java/org/apache/johnzon/core/JsonPatchDiff.java | 9 +++++---- .../java/org/apache/johnzon/core/JsonPatchDiffTest.java | 4 +--- 2 files changed, 6 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/johnzon/blob/6a2d5511/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPatchDiff.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPatchDiff.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPatchDiff.java index 2d0f05c..a326f94 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPatchDiff.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPatchDiff.java @@ -70,21 +70,22 @@ class JsonPatchDiff { JsonValue targetValue = target.get(attributeName); if (isJsonObject(targetValue) && isJsonObject(targetValue)) { - diffJsonObjects(patchBuilder, basePath + attributeName + "/", (JsonObject) sourceEntry.getValue(), (JsonObject) targetValue); + diffJsonObjects(patchBuilder, basePath + JsonPointerUtil.encode(attributeName) + "/", + (JsonObject) sourceEntry.getValue(), (JsonObject) targetValue); } else if (!sourceEntry.getValue().equals(targetValue)) { // replace the original value - patchBuilder.replace(basePath + attributeName, targetValue); + patchBuilder.replace(basePath + JsonPointerUtil.encode(attributeName), targetValue); } } else { // the value got removed - patchBuilder.remove(basePath + attributeName); + patchBuilder.remove(basePath + JsonPointerUtil.encode(attributeName)); } } Set<Map.Entry<String, JsonValue>> targetEntries = target.entrySet(); for (Map.Entry<String, JsonValue> targetEntry : targetEntries) { if (!source.containsKey(targetEntry.getKey())) { - patchBuilder.add(basePath + targetEntry.getKey(), targetEntry.getValue()); + patchBuilder.add(basePath + JsonPointerUtil.encode(targetEntry.getKey()), targetEntry.getValue()); } } http://git-wip-us.apache.org/repos/asf/johnzon/blob/6a2d5511/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchDiffTest.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchDiffTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchDiffTest.java index b578eb0..67b2458 100644 --- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchDiffTest.java +++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchDiffTest.java @@ -74,9 +74,7 @@ public class JsonPatchDiffTest { Assert.assertEquals(target, patched); } - //X TODO @Test - @Ignore("TODO define how escaping must get handled") public void testAddDiffNewObjectWithEscaping() { JsonObject target = Json.createObjectBuilder() @@ -91,7 +89,7 @@ public class JsonPatchDiffTest { JsonArray operations = patch.toJsonArray(); assertEquals(1, operations.size()); - containsOperation(operations, JsonPatch.Operation.ADD, "/a~/", target.get("a")); + containsOperation(operations, JsonPatch.Operation.ADD, "/a~0~1", target.get("a")); // now try to apply that patch. JsonObject patched = patch.apply(JsonValue.EMPTY_JSON_OBJECT);
