@@ -118,7 +118,7 @@ static enum Type {
118118 * @throws NullPointerException if the given {@code xml} stream reader is
119119 * {@code null}
120120 */
121- public abstract T read (final XMLStreamReader xml , final boolean lenient )
121+ public abstract T read (final XMLStreamReaderAdapter xml , final boolean lenient )
122122 throws XMLStreamException ;
123123
124124 /**
@@ -135,7 +135,7 @@ public <B> XMLReader<B> map(final Function<? super T, ? extends B> mapper) {
135135
136136 return new XMLReader <B >(_name , _type ) {
137137 @ Override
138- public B read (final XMLStreamReader xml , final boolean lenient )
138+ public B read (final XMLStreamReaderAdapter xml , final boolean lenient )
139139 throws XMLStreamException
140140 {
141141 try {
@@ -384,7 +384,7 @@ final class AttrReader extends XMLReader<String> {
384384 }
385385
386386 @ Override
387- public String read (final XMLStreamReader xml , final boolean lenient )
387+ public String read (final XMLStreamReaderAdapter xml , final boolean lenient )
388388 throws XMLStreamException
389389 {
390390 xml .require (START_ELEMENT , null , null );
@@ -407,7 +407,7 @@ final class TextReader extends XMLReader<String> {
407407 }
408408
409409 @ Override
410- public String read (final XMLStreamReader xml , final boolean lenient )
410+ public String read (final XMLStreamReaderAdapter xml , final boolean lenient )
411411 throws XMLStreamException
412412 {
413413 final StringBuilder out = new StringBuilder ();
@@ -417,7 +417,6 @@ public String read(final XMLStreamReader xml, final boolean lenient)
417417 out .append (xml .getText ());
418418 } while (xml .hasNext () && (type = xml .next ()) == CHARACTERS || type == CDATA );
419419
420-
421420 return out .toString ();
422421 }
423422}
@@ -441,7 +440,7 @@ final class ListReader<T> extends XMLReader<List<T>> {
441440 }
442441
443442 @ Override
444- public List <T > read (final XMLStreamReader xml , final boolean lenient )
443+ public List <T > read (final XMLStreamReaderAdapter xml , final boolean lenient )
445444 throws XMLStreamException
446445 {
447446 xml .require (START_ELEMENT , null , name ());
@@ -475,7 +474,7 @@ final class IgnoreReader extends XMLReader<Object> {
475474 }
476475
477476 @ Override
478- public Object read (final XMLStreamReader xml , final boolean lenient )
477+ public Object read (final XMLStreamReaderAdapter xml , final boolean lenient )
479478 throws XMLStreamException
480479 {
481480 return _reader .read (xml , true );
@@ -496,7 +495,7 @@ final class DocReader extends XMLReader<Document> {
496495 }
497496
498497 @ Override
499- public Document read (final XMLStreamReader xml , final boolean lenient )
498+ public Document read (final XMLStreamReaderAdapter xml , final boolean lenient )
500499 throws XMLStreamException
501500 {
502501 Document doc = null ;
@@ -527,7 +526,8 @@ public String getVersion() {
527526 throw e ;
528527 }
529528 }
530-
529+ // Mark the next XML element as consumed, by the StaX transformer: #82
530+ xml .consumed ();
531531 return doc ;
532532 }
533533
@@ -582,7 +582,7 @@ final class ElemReader<T> extends XMLReader<T> {
582582 }
583583
584584 @ Override
585- public T read (final XMLStreamReader xml , final boolean lenient )
585+ public T read (final XMLStreamReaderAdapter xml , final boolean lenient )
586586 throws XMLStreamException
587587 {
588588 while (xml .getEventType () == COMMENT ) {
@@ -607,18 +607,16 @@ public T read(final XMLStreamReader xml, final boolean lenient)
607607 }
608608 }
609609
610- if (xml .hasNext ()) {
611- xml .next ();
612-
610+ if (xml .safeNext ()) {
613611 boolean hasNext = false ;
614612 do {
615613 switch (xml .getEventType ()) {
616614 case COMMENT :
617615 consumeComment (xml );
618616 break ;
619617 case START_ELEMENT :
620- Integer index = _readerIndexMapping
621- .get (xml . getLocalName () );
618+ final String localName = xml . getLocalName ();
619+ Integer index = _readerIndexMapping .get (localName );
622620
623621 if (index == null && !lenient ) {
624622 throw new XMLStreamException (format (
@@ -633,12 +631,7 @@ public T read(final XMLStreamReader xml, final boolean lenient)
633631
634632 if (result != null ) {
635633 throwUnexpectedElement (xml , lenient , result );
636- if (xml .hasNext ()) {
637- hasNext = true ;
638- xml .next ();
639- } else {
640- hasNext = false ;
641- }
634+ hasNext = xml .safeNext ();
642635 }
643636
644637 break ;
@@ -687,7 +680,7 @@ private void consumeComment(final XMLStreamReader xml) throws XMLStreamException
687680 }
688681
689682 private void throwUnexpectedElement (
690- final XMLStreamReader xml ,
683+ final XMLStreamReaderAdapter xml ,
691684 final boolean lenient ,
692685 final ReaderResult text
693686 )
0 commit comments