dkrnl / SimpleXMLReader

Wrapped XMLReader class, for simple SAX-reading of huge xml.
112 stars 43 forks source link

Problem with RowSpliterator #19

Closed RamsesGomez closed 2 weeks ago

RamsesGomez commented 2 weeks ago

I'm having a problem with a null pointer exception

java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because the return value of "org.dhatim.fastexcel.reader.SimpleXmlReader.getIntAttribute(String)" is null
    at org.dhatim.fastexcel.reader.RowSpliterator.next(RowSpliterator.java:85) ~[fastexcel-reader-0.18.2.jar:na]
    at org.dhatim.fastexcel.reader.RowSpliterator.tryAdvance(RowSpliterator.java:47) ~[fastexcel-reader-0.18.2.jar:na]
    at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.lambda$initPartialTraversalState$0(StreamSpliterators.java:292) ~[na:na]
    at java.base/java.util.stream.StreamSpliterators$AbstractWrappingSpliterator.fillBuffer(StreamSpliterators.java:206) ~[na:na]
    at java.base/java.util.stream.StreamSpliterators$AbstractWrappingSpliterator.doAdvance(StreamSpliterators.java:169) ~[na:na]
    at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.tryAdvance(StreamSpliterators.java:298) ~[na:na]
    at java.base/java.util.Spliterators$1Adapter.hasNext(Spliterators.java:681) ~[na:na]
    at kotlin.sequences.TransformingSequence$iterator$1.hasNext(Sequences.kt:214) ~[kotlin-stdlib-2.0.20.jar:2.0.20-release-360]
    at kotlin.sequences.FilteringSequence$iterator$1.calcNext(Sequences.kt:169) ~[kotlin-stdlib-2.0.20.jar:2.0.20-release-360]
    at kotlin.sequences.FilteringSequence$iterator$1.hasNext(Sequences.kt:194) ~[kotlin-stdlib-2.0.20.jar:2.0.20-release-360]

I've done some investigation and if I look at the code I see the exact problem, it is an auto-casting from Integer to int

it is related to line 85 of class RowSpliterator

int rowIndex = r.getIntAttribute("r");

the getIntAttribute function returns an Integer and this could be null which is the case and of course, it fails when it tries to cast it to an int.