diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/PathRef.java b/json-path/src/main/java/com/jayway/jsonpath/internal/PathRef.java index 2c277781..c352899c 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/PathRef.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/PathRef.java @@ -2,6 +2,7 @@ package com.jayway.jsonpath.internal; import com.jayway.jsonpath.Configuration; import com.jayway.jsonpath.InvalidModificationException; +import com.jayway.jsonpath.InvalidPathException; import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.spi.json.JsonProvider; @@ -53,6 +54,9 @@ public abstract class PathRef implements Comparable { protected void renameInMap(Object targetMap, String oldKeyName, String newKeyName, Configuration configuration){ if(configuration.jsonProvider().isMap(targetMap)){ + if(configuration.jsonProvider().getMapValue(targetMap, oldKeyName) == JsonProvider.UNDEFINED){ + throw new InvalidPathException("Key "+oldKeyName+" not found in map!"); + } configuration.jsonProvider().setProperty(targetMap, newKeyName, configuration.jsonProvider().getMapValue(targetMap, oldKeyName)); configuration.jsonProvider().removeProperty(targetMap, oldKeyName); } else { diff --git a/json-path/src/test/java/com/jayway/jsonpath/WriteTest.java b/json-path/src/test/java/com/jayway/jsonpath/WriteTest.java index e319b023..42f99354 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/WriteTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/WriteTest.java @@ -245,4 +245,9 @@ public class WriteTest extends BaseTest { public void multiple_properties_cannot_be_renamed(){ parse(JSON_DOCUMENT).renameKey("$.store.book[*]['author', 'category']", "old-key", "new-key"); } + + @Test(expected = InvalidPathException.class) + public void non_existent_key_rename_not_allowed(){ + Object o = parse(JSON_DOCUMENT).renameKey("$", "fake", "new-fake").json(); + } } \ No newline at end of file