Skip to content

feat!: migrate to Jackson 3 and rewrite transport as async/reactive#11

Merged
Pijukatel merged 2 commits into
masterfrom
claude/vibrant-edison-3wg7eg
Jul 23, 2026
Merged

feat!: migrate to Jackson 3 and rewrite transport as async/reactive#11
Pijukatel merged 2 commits into
masterfrom
claude/vibrant-edison-3wg7eg

Conversation

@Pijukatel

@Pijukatel Pijukatel commented Jul 23, 2026

Copy link
Copy Markdown
Collaborator

Migrates the Java client from Jackson 2 to Jackson 3 (com.fasterxml.jackson.core -> tools.jackson.core for databind/core; annotations package unchanged) and rewrites the transport layer to be fully asynchronous and reactive: every network-calling method now returns CompletableFuture, and every paginated iterate(...)/paginateRequests(...) returns a java.util.concurrent.Flow.Publisher instead of a blocking Iterator, fetching pages only on subscriber demand. This is a breaking change to the public API, bumping the client to 0.5.0.

Along the way it also fixes:

  • A null-for-primitive deserialization regression surfaced by the Jackson migration (Jackson 3 defaults stricter than Jackson 2 for a JSON null mapped onto a primitive field, e.g. ActorRunStats before a run's stats are fully populated).
  • A Reactive Streams §1.7 violation in the new AsyncPaginatedPublisher/ListPublisher: a reentrant request(n<=0) could allow further onNext after termination and released a drain guard it did not own. Covered by two new regression tests.
  • A doc snippet compile error in README.md.

Verified: full unit and integration test suite passes against the live API, plus spotless:check and spotbugs:check clean.

…v0.5.0)

Every network-calling method now returns CompletableFuture instead of blocking,
and every paginated iterate(...)/paginateRequests(...) returns a
java.util.concurrent.Flow.Publisher instead of a blocking Iterator, fetching
pages only on subscriber demand. Jackson databind moves from
com.fasterxml.jackson.core to tools.jackson.core (Jackson 3); java-time support
is now built in, dropping the separate jackson-datatype-jsr310 dependency.

Also fixes a null-for-primitive deserialization regression surfaced by this
migration (Jackson 3 defaults stricter than Jackson 2 for a JSON null mapped to
a primitive field) and a doc snippet compile error.
@github-actions github-actions Bot added this to the 145th sprint - Tooling team milestone Jul 23, 2026
@github-actions github-actions Bot added the t-tooling Issues with this label are in the ownership of the tooling team. label Jul 23, 2026
@Pijukatel Pijukatel added the adhoc Ad-hoc unplanned task added during the sprint. label Jul 23, 2026
… comments

request(n<=0) is now handled consistently by both AsyncPaginatedPublisher and
ListPublisher: it no longer releases a drain guard it may not hold, and the
drain loop now stops as soon as a reentrant invalid request() has terminated
the subscription, instead of continuing to emit the rest of an already
in-hand page after onError. Adds a regression test for both publishers.

Also fixes a stale IOException reference in HttpTransport's javadoc (left
over from before the transport contract became fully unchecked) and an
incorrect "jackson-jr"-era reference in a pom.xml comment.
@Pijukatel
Pijukatel merged commit 02c5ca1 into master Jul 23, 2026
2 checks passed
@Pijukatel
Pijukatel deleted the claude/vibrant-edison-3wg7eg branch July 23, 2026 13:44
@Pijukatel

Copy link
Copy Markdown
Collaborator Author

Migration requested in #8

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

adhoc Ad-hoc unplanned task added during the sprint. t-tooling Issues with this label are in the ownership of the tooling team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants