You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@johnzon.apache.org by "Romain Manni-Bucau (Jira)" <ji...@apache.org> on 2024/01/28 16:12:00 UTC

[jira] [Commented] (JOHNZON-402) Polymorphism attributes not serialized if @JsonbTypeInfo is not attached to direct parent

    [ https://issues.apache.org/jira/browse/JOHNZON-402?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17811675#comment-17811675 ] 

Romain Manni-Bucau commented on JOHNZON-402:
--------------------------------------------

Agree, we should jusy take care to enable a simple mapping per hierarchy on a parent in direct line - no branch on top - (exception in other cases).

> 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: New Feature
>          Components: JSON-B
>    Affects Versions: 2.0.0
>            Reporter: Markus Jung
>            Priority: Minor
>
> 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)