From 8c2b7b6761dfb0c6b8564a11510b03d14b9ada9c Mon Sep 17 00:00:00 2001 From: Jochen Berger Date: Wed, 26 Aug 2015 09:52:55 +0200 Subject: [PATCH] fix handling of REQUIRE_PROPERTIES with nested objects --- .../jsonpath/internal/token/PathToken.java | 3 ++- .../java/com/jayway/jsonpath/OptionsTest.java | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/token/PathToken.java b/json-path/src/main/java/com/jayway/jsonpath/internal/token/PathToken.java index 7a4e2e15..54339fd6 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/token/PathToken.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/token/PathToken.java @@ -47,7 +47,8 @@ public abstract class PathToken { if(ctx.options().contains(Option.DEFAULT_PATH_LEAF_TO_NULL)){ propertyVal = null; } else { - if(ctx.options().contains(Option.SUPPRESS_EXCEPTIONS) && !ctx.options().contains(Option.REQUIRE_PROPERTIES)){ + if(ctx.options().contains(Option.SUPPRESS_EXCEPTIONS) || + !ctx.options().contains(Option.REQUIRE_PROPERTIES)){ return; } else { throw new PathNotFoundException("No results for path: " + evalPath); diff --git a/json-path/src/test/java/com/jayway/jsonpath/OptionsTest.java b/json-path/src/test/java/com/jayway/jsonpath/OptionsTest.java index 76d1460d..8d7a243f 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/OptionsTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/OptionsTest.java @@ -100,4 +100,23 @@ public class OptionsTest extends BaseTest { } catch (PathNotFoundException pnf){} } + @Test + public void when_property_is_required_exception_is_thrown_2() { + Map model = new HashMap(); + model.put("a", singletonMap("a-key", "a-val")); + model.put("b", singletonMap("b-key", "b-val")); + + Configuration conf = Configuration.defaultConfiguration(); + + assertThat(using(conf).parse(model).read("$.*.a-key", List.class)).containsExactly("a-val"); + + + conf = conf.addOptions(Option.REQUIRE_PROPERTIES); + + try{ + using(conf).parse(model).read("$.*.a-key", List.class); + fail("Should throw PathNotFoundException"); + } catch (PathNotFoundException pnf){} + } + }