2012-11-30 2 views
1

가끔 언젠가 발생하는 이상한 오류가 있습니다.Jackson CSV Writer가 ArrayIndexOutOfBoundsException을 throw합니다.

잭슨 CSV 데이터 포맷터 1.9.4 (jackson-dataformat-csv)에서 다음 버전의 잭슨 1.9.9와 동일한 데이터를 사용하면 아래 오류가 발생합니다.

java.lang.ArrayIndexOutOfBoundsException 
at java.lang.System.arraycopy(Native Method) 
at org.codehaus.jackson.util.TextBuffer.append(TextBuffer.java:458) 
at org.codehaus.jackson.io.SegmentedStringWriter.write(SegmentedStringWriter.java:69) 
at com.fasterxml.jackson.dataformat.csv.impl.CsvWriter._flushBuffer(CsvWriter.java:514) 
at com.fasterxml.jackson.dataformat.csv.impl.CsvWriter.endRow(CsvWriter.java:252) 
at com.fasterxml.jackson.dataformat.csv.CsvGenerator.finishRow(CsvGenerator.java:579) 
at com.fasterxml.jackson.dataformat.csv.CsvGenerator.close(CsvGenerator.java:277) 
at org.codehaus.jackson.map.ObjectMapper._configAndWriteValue(ObjectMapper.java:2584) 
at org.codehaus.jackson.map.ObjectMapper.writeValueAsString(ObjectMapper.java:2097) 

일부 열에서는 이중 쉼표를 사용합니다. 제 생각에는 CsvGenerator 내의 버그입니다.

+0

소스 코드도 제공하십시오. – Robin

+0

소스 코드 것 \t 최종 CsvSchema 스키마 CsvSchema.builder =() disableEscapeChar() setUseHeader (TRUE) .setColumnSeparator ('' ')이다.. \t \t \t \t \t .addColumn ("C1") \t \t \t \t .addColumn ("C2") \t \t \t \t \t .addColumn ("C3"). \t \t \t 최종 문자열 writeValueAsString = this.mapper.schemaBasedWriter (스키마) .writeValueAsString (this.data); – Ben

답변

1

버그처럼 보입니다. 그러나 주목할 사실은 1.9.x 버전이 실제로 개발되지 않았기 때문에 가능한 경우 Jackson 2.x 용 버전을 사용하고 싶다는 것입니다 (최신 2.1.1 버전 임).

+0

업그레이드를 시도하고 Jersey와 Jackson을 사용하려고 할 때 모든 표준 매퍼가 누락되었음을 확인했습니다. 내가 기억할 수 있다면 잭슨 jaxrs 항아리가 없어 졌다고 생각한다. (또는 2.x에서 찾을 수 없다) – Ben

+0

누락되지는 않았지만 자체 프로젝트에서 - https://github.com/FasterXML/jackson -jaxrs-json-provider - Joda 유형과 같은 다른 항목에도 동일하게 적용됩니다. 또한 2.x 코어, 주석, 데이터 바인딩 작업은 1.x와 별개입니다. – StaxMan

+1

덕분에, 나는 공급자를 위해 사냥을하고 있었다 ... 그것은 업그레이드가 사소한 문제의 전체 호스트를 고쳤을뿐만 아니라 (이중 쉼표가 하나임) 보인다. 약간의 실행 후에 인덱스 오류가 나타나지 않으므로 수정 될 것 같습니다. – Ben

0

pojo의 속성 이름을 20 미만으로 제한하여 ArrayIndexOutOfBound 예외를 피할 수 있습니다. 코드에서 Decimal Formatters를 사용하는 경우 예외가 발생할 수 있습니다. 1.9.4는 버그가 있으며 2.0은 확실히 더 나은 버전입니다.