2

I seem to be having a problem with case insensitivity. I have a class with two methods whose names differ only in case that causes the scanner to have problems.

More specifically, I have a response class for my REST API:

public interface Job {

    @CheckForNull
    List<Job> getPredecessors();

    @CheckForNull
    String getPREDECESSORS();
}

This class is autogenerated in the build, and it really is the intention to have two different getters that are similarly named, but with different capitalizations.

When swagger scans my classes I get an error:

Caused by: java.lang.IllegalArgumentException: Conflicting getter definitions for property "predecessors": com.termalabs.ac.rest.Job#getPREDECESSORS(0 params) vs com.termalabs.ac.rest.Job#getPredecessors(0 params)
    at com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.getGetter(POJOPropertyBuilder.java:244)
    at com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.getAccessor(POJOPropertyBuilder.java:364)
    at com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.getPrimaryMember(POJOPropertyBuilder.java:396)
    at io.swagger.jackson.ModelResolver.resolve(ModelResolver.java:306)
    at io.swagger.jackson.ModelResolver.resolve(ModelResolver.java:183)
    at io.swagger.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:100)
    at io.swagger.jackson.ModelResolver.resolve(ModelResolver.java:234)
    at io.swagger.jackson.ModelResolver.resolve(ModelResolver.java:183)
    at io.swagger.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:100)
    at io.swagger.jackson.ModelResolver.resolveProperty(ModelResolver.java:159)
    at io.swagger.jackson.ModelResolver.resolveProperty(ModelResolver.java:110)
    at io.swagger.converter.ModelConverterContextImpl.resolveProperty(ModelConverterContextImpl.java:80)
    at io.swagger.converter.ModelConverters.readAsProperty(ModelConverters.java:58)
    at io.swagger.jaxrs.Reader.parseMethod(Reader.java:896)
    at io.swagger.jaxrs.Reader.read(Reader.java:322)
    at io.swagger.jaxrs.Reader.read(Reader.java:172)
    at io.swagger.jaxrs.config.BeanConfig.scanAndRead(BeanConfig.java:242)
    at io.swagger.jaxrs.config.BeanConfig.setScan(BeanConfig.java:221)
    at com.termalabs.server.restapi.JawsSwaggerApplication.<init>(JawsSwaggerApplication.java:40)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.jboss.resteasy.core.ConstructorInjectorImpl.construct(ConstructorInjectorImpl.java:150)
    ... 18 more

Apparently jackson can't handle having two different getters with the same spelling but different capitalizations. This is strange to me because both java and Json are case sensitive.

I can find some references to MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES in jackson, but I can't figure out how to use it.

Is there a way to make this scanning of my services case sensitive?

Thanks,

Michael

mdhirsch
  • 861
  • 7
  • 7

0 Answers0