Skip to content

Commit 54ea5dd

Browse files
committed
#79 throw exception when class is private and encoder is dynamic
1 parent 1192faf commit 54ea5dd

2 files changed

Lines changed: 16 additions & 0 deletions

File tree

src/main/java/com/jsoniter/output/Codegen.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,11 @@ private static synchronized Encoder gen(final String cacheKey, Type type) {
7272
try {
7373
EncodingMode mode = JsoniterSpi.getCurrentConfig().encodingMode();
7474
if (mode != EncodingMode.REFLECTION_MODE) {
75+
Type originalType = type;
7576
type = chooseAccessibleSuper(type);
77+
if (Object.class == type) {
78+
throw new JsonException("dynamic code can not serialize private class: " + originalType);
79+
}
7680
}
7781
ClassInfo classInfo = new ClassInfo(type);
7882
if (Map.class.isAssignableFrom(classInfo.clazz) && classInfo.typeArgs.length > 1) {

src/test/java/com/jsoniter/output/TestObject.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.jsoniter.annotation.JsonIgnore;
44
import com.jsoniter.annotation.JsonProperty;
55
import com.jsoniter.spi.Config;
6+
import com.jsoniter.spi.JsoniterSpi;
67
import com.jsoniter.spi.TypeLiteral;
78
import junit.framework.TestCase;
89

@@ -250,4 +251,15 @@ public void test_name_conflict() throws IOException {
250251
stream.close();
251252
assertEquals("{\"field1\":0}", baos.toString());
252253
}
254+
255+
private static class TestObject13 {
256+
}
257+
258+
public void test_private_class() {
259+
EncodingMode encodingMode = JsoniterSpi.getCurrentConfig().encodingMode();
260+
if (EncodingMode.REFLECTION_MODE.equals(encodingMode)) {
261+
return;
262+
}
263+
JsonStream.serialize(new TestObject13());
264+
}
253265
}

0 commit comments

Comments
 (0)