Skip to content

StackOverflowError at AbstractJackson2HttpMessageConverter.resolveVariable [SPR-14520] #19089

Closed
@spring-projects-issues

Description

@spring-projects-issues

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:

Issue Links:

Referenced from: commits 7c5050c, e86529e

Metadata

Metadata

Assignees

Labels

in: coreIssues in core modules (aop, beans, core, context, expression)in: webIssues in web modules (web, webmvc, webflux, websocket)type: bugA general bug

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions