Description
Gerasimov Gennady opened SPR-14520 and commented
Jackson 2.8.1
Spring 4.3.1.RELEASE
We have a complex hierarchy of classes like
public class Api
extends BaseApi
implements CrudApi<ObjectA, ObjectB, Long> {
}
where
public interface CrudApi<S extends BaseSearchFilter<?, ID>, D extends Dto<ID>, ID extends Serializable & Comparable<ID>> extends ReadOnlyApi<S, D, ID> {
}
Applications fails with:
Caused by: java.lang.StackOverflowError: null
at org.springframework.core.ResolvableType.hasGenerics(ResolvableType.java:474)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.resolveVariable(AbstractJackson2HttpMessageConverter.java:326)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.resolveVariable(AbstractJackson2HttpMessageConverter.java:332)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.resolveVariable(AbstractJackson2HttpMessageConverter.java:332)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.resolveVariable(AbstractJackson2HttpMessageConverter.java:332)
...
The issue is in line 332. At some point the method resolveVariable faces Object as result of contextType.getSuperType() and falls with StackOverflowError as result for getSuperType() method for Object is Object.
I tried to check what if there is a check for that and method continues further. Looks like it works well.
There is a code below which i added to check what happenes if method passes further after line 332
final Class contextTypeSuperType = contextType.getSuperType().resolve();
if (!(contextTypeSuperType == null || contextTypeSuperType.equals(Object.class))) {
resolvedType = resolveVariable(typeVariable, contextType.getSuperType());
if (resolvedType.resolve() != null) {
return resolvedType;
}
}
I'm not sure that this is a bug, but i do not find any solutions for my case in stackoverflow.com or other similar resources.
Affects: 4.3.1
Attachments:
- SPR14520.java (3.73 kB)
Issue Links:
- Jackson 2.6.x -> 2.7 deserialize generic fails when calling Spring controller [SPR-14470] #19039 Jackson 2.6.x -> 2.7 deserialize generic fails when calling Spring controller