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

Romain Manni-Bucau resolved JOHNZON-223.
----------------------------------------
       Resolution: Fixed
    Fix Version/s: 1.1.13

Hi [~KeSt], it is fixed on master (1.1.13-SNAPSHOT) and the snapshot is 
deployed on apache snapshot repo 
([https://repository.apache.org/content/repositories/snapshots/)] if you want 
to give it a try. Thanks a lot for the report.

> 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
>            Assignee: Romain Manni-Bucau
>            Priority: Critical
>             Fix For: 1.1.13
>
>         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)

Reply via email to