ExternalTypeIdWithUnwrapped2039Test.java
package com.fasterxml.jackson.databind.tofix;
import org.junit.jupiter.api.Test;
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.testutil.DatabindTestUtil;
import com.fasterxml.jackson.databind.testutil.failure.JacksonTestFailureExpected;
import static org.junit.jupiter.api.Assertions.*;
class ExternalTypeIdWithUnwrapped2039Test extends DatabindTestUtil {
static class MainType2039 {
public String text;
@JsonUnwrapped
public Wrapped2039 wrapped;
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "subtype")
@JsonSubTypes({@JsonSubTypes.Type(value = SubA2039.class, name = "SubA")})
public SubType2039 sub;
public void setSub(SubType2039 s) {
sub = s;
}
public void setWrapped(Wrapped2039 w) {
wrapped = w;
}
}
static class Wrapped2039 {
public String wrapped;
}
public static class SubType2039 {
}
public static class SubA2039 extends SubType2039 {
@JsonProperty
public boolean bool;
}
@JacksonTestFailureExpected
@Test
void externalWithUnwrapped2039() throws Exception {
final ObjectMapper mapper = newJsonMapper();
final String json = a2q("{\n"
+ "'text': 'this is A',\n"
+ "'wrapped': 'yes',\n"
+ "'subtype': 'SubA',\n"
+ "'sub': {\n"
+ " 'bool': true\n"
+ "}\n"
+ "}");
final MainType2039 main = mapper.readValue(json, MainType2039.class);
assertEquals("this is A", main.text);
assertEquals("yes", main.wrapped.wrapped);
assertNotNull(main.sub);
assertEquals(SubA2039.class, main.sub.getClass()); // <- fails here
assertTrue(((SubA2039) main.sub).bool);
}
}