The StaxUtils.createXMLEventReader(events) method returns the implementation of XMLEventReader which works incorrectly.
The problem is in the getElementText method. It throws the XMLStreamException with the message 'Not at START_ELEMENT' even when the reader is at valid position with START_ELEMENT. In the javadoc of the XMLEventReader interface we can read: Precondition: the current event is START_ELEMENT.
Current implementation uses method peek() to verify the current event, but the peek method return the next event not the current.
I've addressed this through a refactoring between AbstractXMLEventReader and ListBasedXMLEventReader, with all concrete stream processing code moving to the subclass and a corresponding check added to getElementText() now.