You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@johnzon.apache.org by "Markus Jung (Jira)" <ji...@apache.org> on 2024/01/28 16:02:00 UTC
[jira] [Created] (JOHNZON-402) Polymorphism attributes not serialized if @JsonbTypeInfo is not attached to direct parent
Markus Jung created JOHNZON-402:
-----------------------------------
Summary: Polymorphism attributes not serialized if @JsonbTypeInfo is not attached to direct parent
Key: JOHNZON-402
URL: https://issues.apache.org/jira/browse/JOHNZON-402
Project: Johnzon
Issue Type: Bug
Components: JSON-B
Affects Versions: 2.0.0
Reporter: Markus Jung
After thinking through the polymorphism code again for JONZON-401 I noticed an issue where polymorphism properties aren't taken into account if the @JsonbTypeInfo annotation is not attached to a direct parent of the serialized class.
Take this example test:
{code:java}
public class JsonbMultiLevelPolymorphismTest {
@Rule
public JsonbRule jsonb = new JsonbRule();
@Test
public void test() {
ConcreteSomething info = new ConcreteSomething();
assertEquals("{\"@type\":\"concrete\"}", jsonb.toJson(info));
}
@JsonbTypeInfo(
@JsonbSubtype(alias = "concrete", type = ConcreteSomething.class)
)
public static abstract class AbstractTopLevelSomething { }
public static abstract class AbstractMiddleLevelSomething extends AbstractTopLevelSomething { }
public static class ConcreteSomething extends AbstractMiddleLevelSomething { }
} {code}
Test result:
{code:java}
org.junit.ComparisonFailure:
Expected :{"@type":"concrete"}
Actual :{} {code}
The spec doesn't mention that @JsonbTypeInfo has to be attached to a direct parent. This also works perfectly fine in yasson, so I see no reason why it should not in johnzon.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)