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 2016/12/13 19:50:57 UTC
johnzon git commit: JOHNZON-101 remove NPE if no mapping for
JsonObject.getJson*
Repository: johnzon
Updated Branches:
refs/heads/master 42cb0949b -> d7b768fe1
JOHNZON-101 remove NPE if no mapping for JsonObject.getJson*
Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/d7b768fe
Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/d7b768fe
Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/d7b768fe
Branch: refs/heads/master
Commit: d7b768fe10f6163be58ec3d4905c404ee9ce2f30
Parents: 42cb094
Author: Reinhard Sandtner <rs...@apache.org>
Authored: Tue Dec 13 20:49:43 2016 +0100
Committer: Reinhard Sandtner <rs...@apache.org>
Committed: Tue Dec 13 20:49:43 2016 +0100
----------------------------------------------------------------------
.../org/apache/johnzon/core/JsonObjectImpl.java | 50 +++++------
.../apache/johnzon/core/JsonObjectImplTest.java | 93 ++++++++++++++++++++
2 files changed, 118 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/johnzon/blob/d7b768fe/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectImpl.java
index 98c38da..263f43e 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectImpl.java
@@ -36,11 +36,20 @@ final class JsonObjectImpl extends AbstractMap<String, JsonValue> implements Jso
private final Map<String, JsonValue> unmodifieableBackingMap;
private <T> T value(final String name, final Class<T> clazz) {
- final Object v = unmodifieableBackingMap.get(name);
+ final JsonValue v = unmodifieableBackingMap.get(name);
if (v != null) {
return clazz.cast(v);
}
- throw new NullPointerException("no mapping for " + name);
+ return null;
+ }
+
+ private <T> T valueOrExcpetion(final String name, final Class<T> clazz) {
+ T value = value(name, clazz);
+ if (value == null) {
+ throw new NullPointerException("no mapping for " + name);
+ }
+
+ return value;
}
JsonObjectImpl(final Map<String, JsonValue> backingMap) {
@@ -70,51 +79,42 @@ final class JsonObjectImpl extends AbstractMap<String, JsonValue> implements Jso
@Override
public String getString(final String name) {
- return getJsonString(name).getString();
+ return valueOrExcpetion(name, JsonString.class).getString();
}
@Override
public String getString(final String name, final String defaultValue) {
- final Object v = unmodifieableBackingMap.get(name);
- if (v != null) {
- if (v instanceof JsonString) {
- return JsonString.class.cast(v).getString();
- } else {
- return defaultValue;
- }
- } else {
- return defaultValue;
+ final Object v = value(name, JsonValue.class);
+ if (v != null && v instanceof JsonString) {
+ return JsonString.class.cast(v).getString();
}
+ return defaultValue;
}
@Override
public int getInt(final String name) {
- return getJsonNumber(name).intValue();
+ return valueOrExcpetion(name, JsonNumber.class).intValue();
}
@Override
public int getInt(final String name, final int defaultValue) {
- final Object v = unmodifieableBackingMap.get(name);
- if (v != null) {
- if (v instanceof JsonNumber) {
- return JsonNumber.class.cast(v).intValue();
- } else {
- return defaultValue;
- }
- } else {
- return defaultValue;
+ final Object v = value(name, JsonValue.class);
+ if (v != null && v instanceof JsonNumber) {
+ return JsonNumber.class.cast(v).intValue();
}
+
+ return defaultValue;
}
@Override
public boolean getBoolean(final String name) {
- return JsonValue.TRUE.equals(value(name, JsonValue.class));
+ return JsonValue.TRUE.equals(valueOrExcpetion(name, JsonValue.class));
}
@Override
public boolean getBoolean(final String name, final boolean defaultValue) {
- final Object v = unmodifieableBackingMap.get(name);
+ final Object v = value(name, JsonValue.class);
if (v != null) {
return JsonValue.TRUE.equals(v) || !JsonValue.FALSE.equals(v) && defaultValue;
} else {
@@ -124,7 +124,7 @@ final class JsonObjectImpl extends AbstractMap<String, JsonValue> implements Jso
@Override
public boolean isNull(final String name) {
- return JsonValue.NULL.equals(value(name, JsonValue.class));
+ return JsonValue.NULL.equals(valueOrExcpetion(name, JsonValue.class));
}
@Override
http://git-wip-us.apache.org/repos/asf/johnzon/blob/d7b768fe/johnzon-core/src/test/java/org/apache/johnzon/core/JsonObjectImplTest.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonObjectImplTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonObjectImplTest.java
index 6f4ba86..e7b5c06 100644
--- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonObjectImplTest.java
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonObjectImplTest.java
@@ -19,9 +19,14 @@
package org.apache.johnzon.core;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
import javax.json.Json;
+import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
+import javax.json.JsonValue;
import org.junit.Test;
@@ -32,4 +37,92 @@ public class JsonObjectImplTest {
ob.add("a", new JsonStringImpl("b"));
assertEquals("{\"a\":\"b\"}", ob.build().toString());
}
+
+
+ @Test(expected = NullPointerException.class)
+ public void testGetBooleanMissingKeyShouldThrowNullPointerException() {
+ getObject().getBoolean("missing");
+ }
+
+ @Test
+ public void testGetBooleanWithDefaultMissingKeyShouldReturnDefault() {
+ assertTrue(getObject().getBoolean("missing", true));
+ }
+
+
+ @Test(expected = NullPointerException.class)
+ public void testGetIntMissingKeyShouldThrowNullPointerException() {
+ getObject().getInt("missing");
+ }
+
+ @Test
+ public void testGetIntWithDefaultShouldReturnDefault() {
+ assertEquals(42, getObject().getInt("missing", 42));
+ }
+
+
+ @Test
+ public void testGetJsonArrayMissingKeyShouldReturnNull() {
+ assertNull(getObject().getJsonArray("missing"));
+ }
+
+
+ @Test
+ public void testGetJsonNumberMissingKeyShouldReturnNull() {
+ assertNull(getObject().getJsonNumber("missing"));
+ }
+
+
+ @Test
+ public void testGetJsonObjectMissingKeyShouldReturnNull() {
+ assertNull(getObject().getJsonObject("missing"));
+ }
+
+
+ @Test
+ public void testGetJsonStringMissingKeyShouldReturnNull() {
+ assertNull(getObject().getJsonString("missing"));
+ }
+
+
+ @Test(expected = NullPointerException.class)
+ public void testGetStringMissingKeyShouldThrowNullPointerException() {
+ getObject().getString("missing");
+ }
+
+ @Test
+ public void testGetStringWithDefaultShouldReturnDefault() {
+ String expected = "default";
+ assertEquals(expected, getObject().getString("missing", expected));
+ }
+
+
+ @Test(expected = NullPointerException.class)
+ public void testIsNullMissingKeyShouldThrowNullPointerException() {
+ getObject().isNull("missing");
+ }
+
+ @Test
+ public void testIsNullShouldReturnTrue() {
+ assertTrue(Json.createObjectBuilder()
+ .add("key", JsonValue.NULL)
+ .build()
+ .isNull("key"));
+ }
+
+ @Test
+ public void testIsNullShouldReturnFalse() {
+ assertFalse(Json.createObjectBuilder()
+ .add("key", "value")
+ .build()
+ .isNull("key"));
+ }
+
+
+ private JsonObject getObject() {
+ return Json.createObjectBuilder()
+ .build();
+ }
+
+
}