Search code examples
javajsongenson

Genson throws ArrayIndexOutOfBoundsException


Genson's internal library code is causing an ArrayIndexOutOfBoundsException because it's trying to index an array which I assume is null. See below.

I get the following stack trace:

Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
        at com.owlike.genson.reflect.BeanPropertyFactory$StandardFactory.createMutator(BeanPropertyFactory.java:115)
        at com.owlike.genson.reflect.BeanPropertyFactory$CompositeFactory.createMutator(BeanPropertyFactory.java:87)
        at com.owlike.genson.reflect.BaseBeanDescriptorProvider.provideMethodMutators(BaseBeanDescriptorProvider.java:232)
        at com.owlike.genson.reflect.BaseBeanDescriptorProvider.provideBeanPropertyMutators(BaseBeanDescriptorProvider.java:119)
        at com.owlike.genson.reflect.AbstractBeanDescriptorProvider.provide(AbstractBeanDescriptorProvider.java:98)
        at com.owlike.genson.reflect.BeanDescriptorProvider$CompositeBeanDescriptorProvider.provide(BeanDescriptorProvider.java:60)
        at com.owlike.genson.convert.BasicConvertersFactory.provide(BasicConvertersFactory.java:104)
        at com.owlike.genson.convert.BasicConvertersFactory.create(BasicConvertersFactory.java:69)
        at com.owlike.genson.convert.BasicConvertersFactory.create(BasicConvertersFactory.java:51)
        at com.owlike.genson.reflect.AbstractBeanDescriptorProvider$ContextualFactoryDecorator.create(AbstractBeanDescriptorProvider.java:75)
        at com.owlike.genson.reflect.AbstractBeanDescriptorProvider$ContextualFactoryDecorator.create(AbstractBeanDescriptorProvider.java:64)
        at com.owlike.genson.convert.ChainedFactory.create(ChainedFactory.java:88)
        at com.owlike.genson.convert.ChainedFactory.create(ChainedFactory.java:75)
        at com.owlike.genson.convert.ChainedFactory.create(ChainedFactory.java:88)
        at com.owlike.genson.convert.ChainedFactory.create(ChainedFactory.java:75)
        at com.owlike.genson.convert.CircularClassReferenceConverterFactory.create(CircularClassReferenceConverterFactory.java:55)
        at com.owlike.genson.convert.CircularClassReferenceConverterFactory.create(CircularClassReferenceConverterFactory.java:19)
        at com.owlike.genson.Genson.provideConverter(Genson.java:148)
        at com.owlike.genson.convert.DefaultConverters$CollectionConverterFactory.create(DefaultConverters.java:239)
        at com.owlike.genson.convert.DefaultConverters$CollectionConverterFactory.create(DefaultConverters.java:231)
        at com.owlike.genson.convert.BasicConvertersFactory.provide(BasicConvertersFactory.java:97)
        at com.owlike.genson.convert.BasicConvertersFactory.create(BasicConvertersFactory.java:69)
        at com.owlike.genson.convert.BasicConvertersFactory.create(BasicConvertersFactory.java:51)
        at com.owlike.genson.reflect.AbstractBeanDescriptorProvider$ContextualFactoryDecorator.create(AbstractBeanDescriptorProvider.java:75)
        at com.owlike.genson.reflect.AbstractBeanDescriptorProvider$ContextualFactoryDecorator.create(AbstractBeanDescriptorProvider.java:64)
        at com.owlike.genson.convert.ChainedFactory.create(ChainedFactory.java:88)
        at com.owlike.genson.convert.ChainedFactory.create(ChainedFactory.java:75)
        at com.owlike.genson.convert.ChainedFactory.create(ChainedFactory.java:88)
        at com.owlike.genson.convert.ChainedFactory.create(ChainedFactory.java:75)
        at com.owlike.genson.convert.CircularClassReferenceConverterFactory.create(CircularClassReferenceConverterFactory.java:55)
        at com.owlike.genson.convert.CircularClassReferenceConverterFactory.create(CircularClassReferenceConverterFactory.java:19)
        at com.owlike.genson.Genson.provideConverter(Genson.java:148)
        at com.owlike.genson.Genson.serialize(Genson.java:272)
        at com.owlike.genson.ext.jaxrs.GensonJsonConverter.writeTo(GensonJsonConverter.java:85)

It's caused by the following method from the Genson library:

  public PropertyMutator createMutator(String name, Method method, Type ofType, Genson genson) {
      Type expandedType = TypeUtil.expandType(method.getGenericParameterTypes()[0], ofType);
      return new PropertyMutator.MethodMutator(name, method, expandedType,
        getRawClass(ofType));
    }

It's coming from the following code in the method: method.getGenericParameterTypes()[0]. When I debug it says the method is "error". It's trying to operate on a List where MyObject has the following methods (only failing method is shown):

@XmlElement(nillable=true)
    public String getError() {
        return error;
    }
    public void setError(String error) {
        this.error = error;
    }

How do I work around this bug? Why is Genson doing it?


Solution

  • This was indeed a bug and has been fixed in this commit. The fix will be part of release 1.5.