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)

Reply via email to