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)