|
3 | 3 | import java.io.*;
|
4 | 4 | import java.util.*;
|
5 | 5 |
|
6 |
| -import com.fasterxml.jackson.annotation.JsonAnyGetter; |
7 |
| -import com.fasterxml.jackson.annotation.JsonAnySetter; |
8 |
| -import com.fasterxml.jackson.annotation.JsonPropertyOrder; |
| 6 | +import com.fasterxml.jackson.annotation.*; |
| 7 | +import org.junit.jupiter.api.Test; |
9 | 8 |
|
10 | 9 | import com.fasterxml.jackson.databind.type.TypeFactory;
|
11 | 10 |
|
@@ -59,6 +58,37 @@ public Map<String,Object> properties() {
|
59 | 58 | }
|
60 | 59 | }
|
61 | 60 |
|
| 61 | + |
| 62 | + @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) |
| 63 | + @JsonSubTypes({@JsonSubTypes.Type(value = FooClassImpl.class)}) |
| 64 | + public class FooClass { } |
| 65 | + class FooClassImpl extends FooClass { } |
| 66 | + |
| 67 | + @JsonTypeInfo(use = JsonTypeInfo.Id.DEDUCTION) |
| 68 | + @JsonSubTypes({@JsonSubTypes.Type(value = FooDeductionImpl.class)}) |
| 69 | + public class FooDeduction { } |
| 70 | + class FooDeductionImpl extends FooDeduction { } |
| 71 | + |
| 72 | + @JsonTypeInfo(use = JsonTypeInfo.Id.NONE) |
| 73 | + @JsonSubTypes({@JsonSubTypes.Type(value = FooNoneImpl.class)}) |
| 74 | + public class FooNone { } |
| 75 | + class FooNoneImpl extends FooNone { } |
| 76 | + |
| 77 | + @JsonTypeInfo(use = JsonTypeInfo.Id.CUSTOM) |
| 78 | + @JsonSubTypes({@JsonSubTypes.Type(value = FooCustomImpl.class)}) |
| 79 | + public class FooCustom { } |
| 80 | + class FooCustomImpl extends FooCustom { } |
| 81 | + |
| 82 | + @JsonTypeInfo(use = JsonTypeInfo.Id.MINIMAL_CLASS) |
| 83 | + @JsonSubTypes({@JsonSubTypes.Type(value = FooMinimalClassImpl.class)}) |
| 84 | + public class FooMinimalClass { } |
| 85 | + class FooMinimalClassImpl extends FooMinimalClass { } |
| 86 | + |
| 87 | + @JsonTypeInfo(use = JsonTypeInfo.Id.NAME) |
| 88 | + @JsonSubTypes({@JsonSubTypes.Type(value = FooNameImpl.class)}) |
| 89 | + public class FooName { } |
| 90 | + class FooNameImpl extends FooName { } |
| 91 | + |
62 | 92 | /*
|
63 | 93 | /**********************************************************
|
64 | 94 | /* Tests for individual objects
|
@@ -191,4 +221,28 @@ public void testTypeFactory() throws Exception
|
191 | 221 | t = orig.constructType(JavaType.class);
|
192 | 222 | assertEquals(JavaType.class, t.getRawClass());
|
193 | 223 | }
|
| 224 | + |
| 225 | + // [databind#4303] |
| 226 | + public void testObjectReaderSerializationWithPolymorphism() |
| 227 | + throws Exception |
| 228 | + { |
| 229 | + Class<?>[] classes = new Class<?>[] { |
| 230 | + FooClass.class, |
| 231 | + FooDeduction.class, |
| 232 | + FooNone.class, |
| 233 | + FooCustom.class, |
| 234 | + FooMinimalClass.class, |
| 235 | + FooName.class |
| 236 | + }; |
| 237 | + |
| 238 | + for (Class<?> clazz : classes) { |
| 239 | + ObjectReader reader = newJsonMapper() |
| 240 | + .readerFor(clazz); |
| 241 | + |
| 242 | + ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| 243 | + ObjectOutputStream oos = new ObjectOutputStream(baos); |
| 244 | + oos.writeObject(reader); // This line should throw NotSerializableException |
| 245 | + oos.close(); |
| 246 | + } |
| 247 | + } |
194 | 248 | }
|
0 commit comments