【问题标题】:Genson throws ArrayIndexOutOfBoundsExceptionGenson 抛出 ArrayIndexOutOfBoundsException
【发布时间】:2016-11-09 04:04:40
【问题描述】:

Genson 的内部库代码导致 ArrayIndexOutOfBoundsException,因为它试图索引一个我认为为空的数组。见下文。

我得到以下堆栈跟踪:

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)

这是由 Genson 库中的以下方法引起的:

  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));
    }

它来自方法中的以下代码:method.getGenericParameterTypes()[0]。当我调试它说该方法是“错误”。它正在尝试对 MyObject 具有以下方法的 List 进行操作(仅显示失败的方法):

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

如何解决这个错误? Genson 为什么要这么做?

【问题讨论】:

  • Paging @eugen - 知道为什么会发生这种情况:)
  • 能否请您打开一个带有测试用例的问题here 来重现它?从我们掌握的信息来看,没有什么明显的

标签: java json genson


【解决方案1】:

这确实是一个错误,已在this commit 中修复。该修复将成为 1.5 版的一部分。

【讨论】:

    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 2012-04-12
    • 2013-05-10
    • 1970-01-01
    • 2020-02-07
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多