Fixes #146: Avoid using exceptions for flow control in JsonObject implementation (#191)
Signed-off-by: Jason Hinch <jhinch@atlassian.com>
diff --git a/impl/src/main/java/org/glassfish/json/JsonObjectBuilderImpl.java b/impl/src/main/java/org/glassfish/json/JsonObjectBuilderImpl.java
index 594851e..c1dc0e0 100644
--- a/impl/src/main/java/org/glassfish/json/JsonObjectBuilderImpl.java
+++ b/impl/src/main/java/org/glassfish/json/JsonObjectBuilderImpl.java
@@ -236,9 +236,10 @@
@Override
public String getString(String name, String defaultValue) {
- try {
- return getString(name);
- } catch (Exception e) {
+ JsonValue value = get(name);
+ if (value instanceof JsonString) {
+ return ((JsonString) value).getString();
+ } else {
return defaultValue;
}
}
@@ -250,9 +251,10 @@
@Override
public int getInt(String name, int defaultValue) {
- try {
- return getInt(name);
- } catch (Exception e) {
+ JsonValue value = get(name);
+ if (value instanceof JsonNumber) {
+ return ((JsonNumber) value).intValue();
+ } else {
return defaultValue;
}
}
@@ -273,9 +275,12 @@
@Override
public boolean getBoolean(String name, boolean defaultValue) {
- try {
- return getBoolean(name);
- } catch (Exception e) {
+ JsonValue value = get(name);
+ if (value == JsonValue.TRUE) {
+ return true;
+ } else if (value == JsonValue.FALSE) {
+ return false;
+ } else {
return defaultValue;
}
}
diff --git a/tests/src/test/java/org/glassfish/json/tests/JsonObjectTest.java b/tests/src/test/java/org/glassfish/json/tests/JsonObjectTest.java
index 59fdddb..c1c4b98 100644
--- a/tests/src/test/java/org/glassfish/json/tests/JsonObjectTest.java
+++ b/tests/src/test/java/org/glassfish/json/tests/JsonObjectTest.java
@@ -48,6 +48,39 @@
assertEquals(person1, person2);
}
+ public void testGetStringOrDefault() throws Exception {
+ JsonObject object = Json.createObjectBuilder()
+ .add("string", "value")
+ .add("number", 25)
+ .add("boolean", false)
+ .build();
+ assertEquals("value", object.getString("string", "default"));
+ assertEquals("default", object.getString("missing", "default"));
+ assertEquals("default", object.getString("number", "default"));
+ }
+
+ public void testGetIntOrDefault() throws Exception {
+ JsonObject object = Json.createObjectBuilder()
+ .add("string", "value")
+ .add("number", 25)
+ .add("boolean", false)
+ .build();
+ assertEquals(25, object.getInt("number", 10));
+ assertEquals(10, object.getInt("missing", 10));
+ assertEquals(10, object.getInt("string", 10));
+ }
+
+ public void testGetBooleanOrDefault() throws Exception {
+ JsonObject object = Json.createObjectBuilder()
+ .add("string", "value")
+ .add("number", 25)
+ .add("boolean", false)
+ .build();
+ assertFalse(object.getBoolean("boolean", true));
+ assertTrue(object.getBoolean("missing", true));
+ assertTrue(object.getBoolean("string", true));
+ }
+
static void testPerson(JsonObject person) {
assertEquals(5, person.size());
assertEquals("John", person.getString("firstName"));