From 5b56bcf8dc90dfd58434e57098cf07af04783699 Mon Sep 17 00:00:00 2001 From: Kalle Stenflo Date: Mon, 5 Mar 2012 11:00:21 +0100 Subject: [PATCH] Fixed InvalidPathException bug. --- .../java/com/jayway/jsonassert/impl/JsonAsserterImpl.java | 6 ++++-- .../src/main/java/com/jayway/jsonpath/JsonModel.java | 2 +- .../main/java/com/jayway/jsonpath/internal/PathToken.java | 2 +- .../com/jayway/jsonpath/internal/filter/FieldFilter.java | 8 +++++++- .../src/test/java/com/jayway/jsonpath/JsonModelTest.java | 5 +++++ 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/json-path-assert/src/main/java/com/jayway/jsonassert/impl/JsonAsserterImpl.java b/json-path-assert/src/main/java/com/jayway/jsonassert/impl/JsonAsserterImpl.java index 0d0a3e27..2342336a 100644 --- a/json-path-assert/src/main/java/com/jayway/jsonassert/impl/JsonAsserterImpl.java +++ b/json-path-assert/src/main/java/com/jayway/jsonassert/impl/JsonAsserterImpl.java @@ -2,6 +2,7 @@ package com.jayway.jsonassert.impl; import com.jayway.jsonassert.JsonAsserter; +import com.jayway.jsonpath.InvalidPathException; import com.jayway.jsonpath.JsonPath; import org.hamcrest.Matcher; @@ -53,10 +54,11 @@ public class JsonAsserterImpl implements JsonAsserter { * {@inheritDoc} */ public JsonAsserter assertNotDefined(String path) { - Object o = JsonPath.read(jsonObject, path); - if (o != null) { + try { + Object o = JsonPath.read(jsonObject, path); throw new AssertionError(format("Document contains the path <%s> but was expected not to.", path)); + } catch (InvalidPathException e) { } return this; } diff --git a/json-path/src/main/java/com/jayway/jsonpath/JsonModel.java b/json-path/src/main/java/com/jayway/jsonpath/JsonModel.java index 4fb19233..2ab97397 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/JsonModel.java +++ b/json-path/src/main/java/com/jayway/jsonpath/JsonModel.java @@ -278,7 +278,7 @@ public class JsonModel { PathToken currentToken; do { currentToken = tokens.poll(); - modelRef = currentToken.get(modelRef, jsonProvider); + modelRef = currentToken.apply(modelRef, jsonProvider); } while (!tokens.isEmpty()); if (modelRef.getClass().isAssignableFrom(clazz)) { diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/PathToken.java b/json-path/src/main/java/com/jayway/jsonpath/internal/PathToken.java index 47aac100..2da88ba9 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/PathToken.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/PathToken.java @@ -37,7 +37,7 @@ public class PathToken { return FilterFactory.createFilter(fragment).filter(model, jsonProvider); } - public Object get(Object model, JsonProvider jsonProvider){ + public Object apply(Object model, JsonProvider jsonProvider){ return FilterFactory.createFilter(fragment).getRef(model, jsonProvider); } diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/FieldFilter.java b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/FieldFilter.java index 4abc0d5f..83906eaa 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/FieldFilter.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/FieldFilter.java @@ -14,6 +14,7 @@ */ package com.jayway.jsonpath.internal.filter; +import com.jayway.jsonpath.InvalidPathException; import com.jayway.jsonpath.spi.JsonProvider; import java.util.List; @@ -51,7 +52,12 @@ public class FieldFilter extends Filter { return result; } } else { - return jsonProvider.getMapValue(obj, condition); + Map map = jsonProvider.toMap(obj); + if(!map.containsKey(condition)){ + throw new InvalidPathException("invalid path"); + } else { + return map.get(condition); + } } } diff --git a/json-path/src/test/java/com/jayway/jsonpath/JsonModelTest.java b/json-path/src/test/java/com/jayway/jsonpath/JsonModelTest.java index 29f38c7e..94762412 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/JsonModelTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/JsonModelTest.java @@ -85,6 +85,11 @@ public class JsonModelTest { } + @Test(expected = InvalidPathException.class) + public void invalid_path_throws() throws Exception { + JsonModel.create(DOCUMENT).get("store.invalid"); + } + }