2016-07-06 2 views
2

Genson의 내부 라이브러리 코드가 ArrayIndexOutOfBoundsException을 발생시키는 이유는 null로 가정하는 배열을 인덱싱하려고하기 때문입니다. 아래를 참조하십시오.Genson이 ArrayIndexOutOfBoundsException을 throw합니다.

나는 다음과 같은 스택 추적을 얻을 :

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

어떻게이 버그를 해결할 수 있습니까? 겐손이 왜 그걸하고 있니?

+0

페이징 @eugen - 왜 이런 일이 일어 났는지 알고 싶습니다. :) – KyleM

+0

테스트 케이스와 함께 문제를 열어서 재현 해 주시겠습니까 (예 : https://github.com/owlike/genson/issues)? 우리가 가지고있는 정보로부터, 명백한 것은 없습니다. – eugen

답변

0

이것은 실제로 버그이며 this commit으로 수정되었습니다. 수정 사항은 릴리스 1.5의 일부입니다.

관련 문제