You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by rs...@apache.org on 2018/05/22 09:54:20 UTC
johnzon git commit: JOHNZON-172 fixed applying patch to wrong empty
value
Repository: johnzon
Updated Branches:
refs/heads/master 3c28e3501 -> b59498070
JOHNZON-172 fixed applying patch to wrong empty value
Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/b5949807
Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/b5949807
Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/b5949807
Branch: refs/heads/master
Commit: b594980702cb9ce0f7814ebee1e1bf603775c9ae
Parents: 3c28e35
Author: Reinhard Sandtner <rs...@apache.org>
Authored: Tue May 22 11:51:41 2018 +0200
Committer: Reinhard Sandtner <rs...@apache.org>
Committed: Tue May 22 11:51:41 2018 +0200
----------------------------------------------------------------------
.../apache/johnzon/core/JsonPointerImpl.java | 14 ++++++-----
.../org/apache/johnzon/core/JsonPatchTest.java | 26 ++++++++++++++++++++
2 files changed, 34 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/johnzon/blob/b5949807/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPointerImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPointerImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPointerImpl.java
index b674ad9..50c19f7 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPointerImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPointerImpl.java
@@ -358,7 +358,7 @@ public class JsonPointerImpl implements JsonPointer {
JsonObject jsonObject = (JsonObject) jsonValue;
JsonObjectBuilder objectBuilder = Json.createObjectBuilder();
- if (jsonObject.isEmpty()) {
+ if (jsonObject.isEmpty() && isPositionToAdd(currentPath)) {
objectBuilder.add(lastReferenceToken, newValue);
} else {
for (Map.Entry<String, JsonValue> entry : jsonObject.entrySet()) {
@@ -367,8 +367,7 @@ public class JsonPointerImpl implements JsonPointer {
objectBuilder.add(entry.getKey(), addInternal(entry.getValue(), newValue, currentPath));
currentPath.remove(entry.getKey());
- if (currentPath.size() == referenceTokens.size() - 1 &&
- currentPath.get(currentPath.size() - 1).equals(referenceTokens.get(referenceTokens.size() - 2))) {
+ if (isPositionToAdd(currentPath)) {
objectBuilder.add(lastReferenceToken, newValue);
}
}
@@ -379,9 +378,7 @@ public class JsonPointerImpl implements JsonPointer {
JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
int arrayIndex = -1;
- if (currentPath.size() == referenceTokens.size() - 1 &&
- currentPath.get(currentPath.size() - 1).equals(referenceTokens.get(referenceTokens.size() - 2))) {
-
+ if (isPositionToAdd(currentPath)) {
arrayIndex = getArrayIndex(lastReferenceToken, jsonArray, true);
}
@@ -404,6 +401,11 @@ public class JsonPointerImpl implements JsonPointer {
return jsonValue;
}
+ private boolean isPositionToAdd(List<String> currentPath) {
+ return currentPath.size() == referenceTokens.size() - 1 &&
+ currentPath.get(currentPath.size() - 1).equals(referenceTokens.get(referenceTokens.size() - 2));
+ }
+
private JsonValue remove(JsonValue jsonValue, int currentPosition, int referencePosition) {
if (jsonValue instanceof JsonObject) {
JsonObject jsonObject = (JsonObject) jsonValue;
http://git-wip-us.apache.org/repos/asf/johnzon/blob/b5949807/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchTest.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchTest.java
index 6c96329..59696e8 100644
--- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchTest.java
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchTest.java
@@ -27,6 +27,7 @@ import javax.json.JsonArrayBuilder;
import javax.json.JsonException;
import javax.json.JsonObject;
import javax.json.JsonPatch;
+import javax.json.JsonPatchBuilder;
import javax.json.JsonStructure;
import javax.json.JsonValue;
import java.io.StringReader;
@@ -59,6 +60,31 @@ public class JsonPatchTest {
assertEquals("{\"foo\":\"bar\",\"baz\":\"qux\"}", toJsonString(patched));
}
+ /**
+ * {@linkplain} https://issues.apache.org/jira/browse/JOHNZON-172
+ */
+ @Test
+ public void testAddToRootContainingEmptyJsonObject() {
+ JsonObject object = Json.createObjectBuilder()
+ .add("request", Json.createObjectBuilder()
+ .add("test", JsonValue.EMPTY_JSON_OBJECT))
+ .build();
+
+ JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatch.Operation.ADD,
+ "/name",
+ null,
+ new JsonStringImpl("aName")));
+
+ JsonObject patched = patch.apply(object);
+ assertNotNull(patched);
+
+ JsonObject requestJson = patched.getJsonObject("request");
+ assertNotNull(requestJson);
+ assertEquals(JsonValue.EMPTY_JSON_OBJECT, requestJson.getJsonObject("test"));
+
+ assertEquals("aName", patched.getString("name"));
+ }
+
@Test
public void testAddArrayElementWithIndex() {