Skip to content

Commit 4ec63ce

Browse files
jhinch-at-atlassian-comm0mus
authored andcommitted
Fixes #146: Avoid using exceptions for flow control in JsonObject implementation (#191)
Signed-off-by: Jason Hinch <[email protected]>
1 parent 8f74877 commit 4ec63ce

File tree

2 files changed

+47
-9
lines changed

2 files changed

+47
-9
lines changed

impl/src/main/java/org/glassfish/json/JsonObjectBuilderImpl.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -236,9 +236,10 @@ public String getString(String name) {
236236

237237
@Override
238238
public String getString(String name, String defaultValue) {
239-
try {
240-
return getString(name);
241-
} catch (Exception e) {
239+
JsonValue value = get(name);
240+
if (value instanceof JsonString) {
241+
return ((JsonString) value).getString();
242+
} else {
242243
return defaultValue;
243244
}
244245
}
@@ -250,9 +251,10 @@ public int getInt(String name) {
250251

251252
@Override
252253
public int getInt(String name, int defaultValue) {
253-
try {
254-
return getInt(name);
255-
} catch (Exception e) {
254+
JsonValue value = get(name);
255+
if (value instanceof JsonNumber) {
256+
return ((JsonNumber) value).intValue();
257+
} else {
256258
return defaultValue;
257259
}
258260
}
@@ -273,9 +275,12 @@ public boolean getBoolean(String name) {
273275

274276
@Override
275277
public boolean getBoolean(String name, boolean defaultValue) {
276-
try {
277-
return getBoolean(name);
278-
} catch (Exception e) {
278+
JsonValue value = get(name);
279+
if (value == JsonValue.TRUE) {
280+
return true;
281+
} else if (value == JsonValue.FALSE) {
282+
return false;
283+
} else {
279284
return defaultValue;
280285
}
281286
}

tests/src/test/java/org/glassfish/json/tests/JsonObjectTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,39 @@ public void testPersonObjectEquals() throws Exception {
4848
assertEquals(person1, person2);
4949
}
5050

51+
public void testGetStringOrDefault() throws Exception {
52+
JsonObject object = Json.createObjectBuilder()
53+
.add("string", "value")
54+
.add("number", 25)
55+
.add("boolean", false)
56+
.build();
57+
assertEquals("value", object.getString("string", "default"));
58+
assertEquals("default", object.getString("missing", "default"));
59+
assertEquals("default", object.getString("number", "default"));
60+
}
61+
62+
public void testGetIntOrDefault() throws Exception {
63+
JsonObject object = Json.createObjectBuilder()
64+
.add("string", "value")
65+
.add("number", 25)
66+
.add("boolean", false)
67+
.build();
68+
assertEquals(25, object.getInt("number", 10));
69+
assertEquals(10, object.getInt("missing", 10));
70+
assertEquals(10, object.getInt("string", 10));
71+
}
72+
73+
public void testGetBooleanOrDefault() throws Exception {
74+
JsonObject object = Json.createObjectBuilder()
75+
.add("string", "value")
76+
.add("number", 25)
77+
.add("boolean", false)
78+
.build();
79+
assertFalse(object.getBoolean("boolean", true));
80+
assertTrue(object.getBoolean("missing", true));
81+
assertTrue(object.getBoolean("string", true));
82+
}
83+
5184
static void testPerson(JsonObject person) {
5285
assertEquals(5, person.size());
5386
assertEquals("John", person.getString("firstName"));

0 commit comments

Comments
 (0)