diff --git a/src/main/java/com/jsoniter/any/Any.java b/src/main/java/com/jsoniter/any/Any.java index e779b581..f6e40683 100644 --- a/src/main/java/com/jsoniter/any/Any.java +++ b/src/main/java/com/jsoniter/any/Any.java @@ -181,6 +181,14 @@ public int size() { return 0; } + public Any mustBeValid() { + if(this instanceof NotFoundAny) { + throw ((NotFoundAny) this).exception; + } else { + return this; + } + } + public Set keys() { return EMPTY_KEYS; } diff --git a/src/main/java/com/jsoniter/any/NotFoundAny.java b/src/main/java/com/jsoniter/any/NotFoundAny.java index 3cc996f4..0722aec6 100644 --- a/src/main/java/com/jsoniter/any/NotFoundAny.java +++ b/src/main/java/com/jsoniter/any/NotFoundAny.java @@ -9,7 +9,7 @@ class NotFoundAny extends Any { - private final JsonException exception; + protected final JsonException exception; public NotFoundAny(Object[] keys, int idx, Object obj) { this.exception = new JsonException(String.format("Value not found: failed to get path %s, because #%s section of the path ( %s ) not found in %s", diff --git a/src/test/java/com/jsoniter/output/TestAny.java b/src/test/java/com/jsoniter/output/TestAny.java index 609a7165..5e4ce3e8 100644 --- a/src/test/java/com/jsoniter/output/TestAny.java +++ b/src/test/java/com/jsoniter/output/TestAny.java @@ -2,13 +2,19 @@ import com.jsoniter.ValueType; import com.jsoniter.any.*; +import com.jsoniter.spi.JsonException; import junit.framework.TestCase; +import org.junit.Rule; +import org.junit.rules.ExpectedException; import java.util.Arrays; import java.util.HashMap; public class TestAny extends TestCase { + @Rule + public final ExpectedException exception = ExpectedException.none(); + static { // JsonStream.setMode(EncodingMode.DYNAMIC_MODE); } @@ -120,6 +126,12 @@ public void test_array() { assertEquals("[1,2,3]", any.toString()); } + public void test_not_found() { + Any any = Any.wrap(new int[]{1, 2, 3}); + exception.expect(JsonException.class); + any.get("not", "found", "path"); + } + public void skip_map() { HashMap val = new HashMap(); val.put("hello", 1);