Skip to content

Commit edf522d

Browse files
committed
fix #133 NPE when no extra
1 parent 69188df commit edf522d

File tree

6 files changed

+72
-44
lines changed

6 files changed

+72
-44
lines changed

.gitignore

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
/release.properties
44
/demo/target
55
/.idea
6-
/build
7-
/.gradle
8-
/local.properties
6+
/android-demo/build
7+
/android-demo/.gradle
8+
/android-demo/local.properties
File renamed without changes.

src/main/java/com/jsoniter/ReflectionObjectDecoder.java

+3
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,9 @@ private void setToBinding(Object obj, Binding binding, Object value) throws Exce
347347
}
348348

349349
private void setExtra(Object obj, Map<String, Object> extra) throws Exception {
350+
if (extra == null) {
351+
return;
352+
}
350353
if (desc.asExtraForUnknownProperties) {
351354
if (desc.onExtraProperties == null) {
352355
for (String fieldName : extra.keySet()) {

src/test/java/com/jsoniter/TestAnnotation.java

-40
Original file line numberDiff line numberDiff line change
@@ -87,46 +87,6 @@ public void skip_missing_ctor_arg() throws IOException {
8787
}
8888
}
8989

90-
@JsonObject(asExtraForUnknownProperties = true)
91-
public static class TestObject9 {
92-
@JsonExtraProperties
93-
public Map<String, Any> extraProperties;
94-
}
95-
96-
public void test_extra_properties() throws IOException {
97-
JsonIterator iter = JsonIterator.parse("{\"field1\": 100}");
98-
TestObject9 obj = iter.read(TestObject9.class);
99-
assertEquals(100, obj.extraProperties.get("field1").toInt());
100-
}
101-
102-
@JsonObject(asExtraForUnknownProperties = true)
103-
public static class TestObject13 {
104-
}
105-
106-
public void test_unknown_properties() throws IOException {
107-
JsonIterator iter = JsonIterator.parse("{\"field-1\": 100, \"field-1\": 101}");
108-
try {
109-
iter.read(TestObject13.class);
110-
fail();
111-
} catch (JsonException e) {
112-
System.out.println(e);
113-
}
114-
}
115-
116-
@JsonObject(unknownPropertiesBlacklist = {"field1"})
117-
public static class TestObject15 {
118-
}
119-
120-
public void test_unknown_properties_blacklist() throws IOException {
121-
JsonIterator iter = JsonIterator.parse("{\"field1\": 100}");
122-
try {
123-
iter.read(TestObject15.class);
124-
fail();
125-
} catch (JsonException e) {
126-
System.out.println(e);
127-
}
128-
}
129-
13090
public static class TestObject17 {
13191
public int field1;
13292

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.jsoniter;
2+
3+
import com.jsoniter.annotation.JsonExtraProperties;
4+
import com.jsoniter.annotation.JsonObject;
5+
import com.jsoniter.any.Any;
6+
import com.jsoniter.spi.JsonException;
7+
import junit.framework.TestCase;
8+
9+
import java.io.IOException;
10+
import java.util.Map;
11+
12+
public class TestAnnotationJsonObject extends TestCase {
13+
14+
@JsonObject(asExtraForUnknownProperties = true)
15+
public static class TestObject9 {
16+
@JsonExtraProperties
17+
public Map<String, Any> extraProperties;
18+
}
19+
20+
public void test_extra_properties() throws IOException {
21+
JsonIterator iter = JsonIterator.parse("{\"field1\": 100}");
22+
TestObject9 obj = iter.read(TestObject9.class);
23+
assertEquals(100, obj.extraProperties.get("field1").toInt());
24+
}
25+
26+
@JsonObject(asExtraForUnknownProperties = true)
27+
public static class TestObject13 {
28+
}
29+
30+
public void test_unknown_properties() throws IOException {
31+
JsonIterator iter = JsonIterator.parse("{\"field-1\": 100, \"field-1\": 101}");
32+
try {
33+
iter.read(TestObject13.class);
34+
fail();
35+
} catch (JsonException e) {
36+
System.out.println(e);
37+
}
38+
}
39+
40+
@JsonObject(unknownPropertiesBlacklist = {"field1"})
41+
public static class TestObject15 {
42+
}
43+
44+
public void test_unknown_properties_blacklist() throws IOException {
45+
JsonIterator iter = JsonIterator.parse("{\"field1\": 100}");
46+
try {
47+
iter.read(TestObject15.class);
48+
fail();
49+
} catch (JsonException e) {
50+
System.out.println(e);
51+
}
52+
}
53+
54+
@JsonObject(asExtraForUnknownProperties = true)
55+
public static class TestObject14 {
56+
public int id;
57+
}
58+
59+
public void test_no_unknown_properties() throws IOException {
60+
String json = "{ \"id\": 100 }";
61+
TestObject14 obj = JsonIterator.deserialize(json, TestObject14.class);
62+
assertEquals(100, obj.id);
63+
}
64+
}

src/test/java/com/jsoniter/suite/AllTestCases.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
com.jsoniter.output.TestGson.class,
5151
TestStreamBuffer.class,
5252
TestCollection.class,
53-
TestList.class})
53+
TestList.class,
54+
TestAnnotationJsonObject.class})
5455
public abstract class AllTestCases {
5556
}

0 commit comments

Comments
 (0)