johnzon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kevin (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (JOHNZON-223) Deserialization of objects with generic types leads to an error
Date Wed, 24 Jul 2019 06:55:00 GMT

     [ https://issues.apache.org/jira/browse/JOHNZON-223?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Kevin updated JOHNZON-223:
--------------------------
    Attachment: error.log

> Deserialization of objects with generic types leads to an error
> ---------------------------------------------------------------
>
>                 Key: JOHNZON-223
>                 URL: https://issues.apache.org/jira/browse/JOHNZON-223
>             Project: Johnzon
>          Issue Type: Bug
>          Components: JSON-B
>    Affects Versions: 1.1.12
>            Reporter: Kevin
>            Priority: Critical
>         Attachments: error.log
>
>
> In our project we use generic containers e.g. for enums to enrich them with additional
information. For the serialization in Json we use an own adapter.
> Serialization in Json works without problems, but deserialization into an object results
in an error:
> {code:java}
>  javax.json.bind.JsonbException: Cannot cast sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl
to java.lang.Class{code}
> From my point of view the problem lies in the method
> {code:java}
> org.apache.johnzon.mapper.Mappings.findConverter line 570
> final ParameterizedType type = ParameterizedType.class.cast(decoratedType.getType());
> final Type rawType = type.getRawType();
> if (Class.class.isInstance(rawType)
>         && Collection.class.isAssignableFrom(Class.class.cast(rawType))
>         && type.getActualTypeArguments().length >= 1) {
>     typeToTest = type.getActualTypeArguments()[0];
> } // TODO: map{code}
> The condition checks here whether it is a collection, otherwise nothing else is done
for ParameterizedTypes.
> However, the variable typeToTest should be set to rawType for ParameterizedTypes so
that a converter can be found afterwards. Otherwise typeToTest remains a ParameterizedType
and the query in line 576 if (converter == null && Class.class.isInstance(typeToTest))
fails and no converter will be searched.
>  
> A small test can be found here: [https://gist.github.com/kevinwilken/12da681534053b776247697c6f24c296]



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)

Mime
View raw message