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)