`Stax2ReaderAdapter.nextTag()` skips the adapter's own state handling

Open
#60 0 comments 0 reactions 0 assignees View on GitHub

@winfriedgerlach is already working on this.

Since Oct 9, 2026.

  • #61 by @winfriedgerlach — open

Assessment

Difficulty
3/5
Estimated time
Half a day
Newbie friendliness
70/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
java, xml
Domain
api

Research direction

Start with Stax2ReaderAdapter, which inherits nextTag() from StreamReaderDelegate and so bypasses the adapter's own next(), where depth and pending chunked-read handling live. Compare the two methods, then run Stax2ReaderAdapterTest and ReadElementAsArrayTest. Done when getDepth() matches between next() and nextTag(), and the repro reads [6, 7, 8] for <b> instead of [3, 4, 5].

Written by the indexing model from the issue text.

Description

Found this bug along the way. Please have look. I'll provide PR with tests.

Stax2ReaderAdapter does not override nextTag(), so the nextTag() it inherits from StreamReaderDelegate calls the wrapped reader's nextTag() directly and bypasses the adapter's next(). Two effects:

  1. Depth: getDepth() is not updated by nextTag(), so it is wrong for any code that walks elements with nextTag().
  2. Chunked array reads: if an element was only partly read with readElementAsIntArray() etc., nextTag() doesn't discard the unread rest. Array reads of the next element then return the previous element's leftovers.

Repro: <root><a>1 2 3 4 5</a> <b>6 7 8</b></root>. Read 2 values of <a>, then nextTag() twice to reach <b>, then read <b> as an int array → [3, 4, 5] (expected: [6, 7, 8]).

Fix: override nextTag() like next(): end a pending chunked read by returning END_ELEMENT, and otherwise update the depth for the start or end element returned. Tests: Stax2ReaderAdapterTest (depths with next() vs nextTag(), and after leaving a chunked read early) and ReadElementAsArrayTest.leavesNothingForNextElementWhenAbandonedViaNextTag.

Dominant language
Java
Stars
42
Forks
21
Avg merge
3h 50m
Merged PRs (30d)
2

Getting set up

This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from FasterXML/stax2-api

All issues in FasterXML/stax2-api

Similar issues

More Java issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.