From b462638f226b3d32b35c066d728698078d411cb2 Mon Sep 17 00:00:00 2001 From: Simon Massey <322608+simbo1905@users.noreply.github.com> Date: Sun, 30 Aug 2026 18:26:07 +0100 Subject: [PATCH] chore: release 2026.08.30 (branch-local version bump) Documents the 2026.08.30 release as the jdk.incubator.json backport (upstream as-of 43325738c, 2026-08-27) with release highlights: 1679 tests (up from 1355) including the ported upstream suite, the explicit-stack parser hardening, and the daily upstream drift checker. POM versions set to 2026.08.30. No changes to library code. --- README.md | 17 +++++++++++++---- index.html | 4 ++-- jdt2jar/pom.xml | 2 +- json-compatibility-suite/pom.xml | 2 +- json-java21-api-tracker/pom.xml | 2 +- json-java21-jsonpath/pom.xml | 2 +- json-java21-jtd-codegen/pom.xml | 2 +- json-java21-jtd/pom.xml | 2 +- json-java21/pom.xml | 2 +- pom.xml | 2 +- 10 files changed, 23 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 0d6d989b..44d5e50f 100644 --- a/README.md +++ b/README.md @@ -289,9 +289,18 @@ The test data is bundled as ZIP files and extracted automatically at runtime: ## Current Status -**Final `java.util.json` sandbox-era release** (2026-05-19). +**2026.08.30 — the `jdk.incubator.json` backport release.** -This code is derived from the OpenJDK jdk-sandbox repository "json" branch at commit `43325738c` (2026-08-27), which is the current frontier of the incubator-era `jdk.incubator.json` API. The incubator promotion itself happened at commit `b956ae0` (2026-02-05); this branch completed the migration from the sandbox-era `java.util.json` naming to the incubator packages — see the notice below and issue #145. +This is a Java 21+ backport of the JDK's incubating JSON API (`jdk.incubator.json`, [JEP 540](https://openjdk.org/jeps/540), targeted at JDK 28), taken from the upstream `json` branch **as of commit `43325738c` (2026-08-27)**. The public API lives in `jdk.incubator.java.util.json` and the implementation in `jdk.incubator.internal.util.json`, mirroring the upstream module layout at that frontier. + +> Note: the upstream commit may be a day or more old by the time you read this — the code here is exactly the upstream API and implementation **as of `43325738c`, 2026-08-27 23:24 UTC**, tracked continuously by the daily drift checker described below. + +### Release highlights + +- **The incubator API, not a legacy preview.** Conversion accessors are `asString()`, `asInt()`, `asLong()`, `asDouble()`, `asBoolean()`, `asList()`, `asMap()`; navigation is `get(String)`, `get(int)`, `tryGet(String)`, `tryValue()`; type and path errors throw `JsonValueException` with document paths; subtypes use identity `equals`/`hashCode`, matching the upstream specification. Earlier releases of this library exposed a different, sandbox-era API — migrating to this release is a small set of mechanical renames (`string()`→`asString()`, `toLong()`→`asLong()`, `elements()`→`asList()`, `members()`→`asMap()`, and so on). +- **Upstream hardening included.** The parser uses upstream's explicit-stack (non-recursive) design; the ported test suite covers documents nested 10,000 levels deep. +- **1,679 automated tests** (up from 1,355 in the previous release), including the complete upstream test suite ported to JUnit and hardened numeric-boundary coverage for `asInt`/`asLong`/`asDouble` ranges, precision, and `JsonNumber.of` conversions. +- **Automated breaking-change detection.** A daily CI job compares this backport's public API against upstream HEAD and opens a deduplicated issue on any drift; upstream unreachability is always treated as drift, never as all-clear. Sync tooling under `updates/` targets the incubator module layout, making each future sync a mechanical fetch-transform-verify cycle. ### API Summary - `JsonValue` conversion methods: `asBoolean()`, `asString()`, `asInt()`, `asLong()`, `asDouble()` @@ -300,8 +309,8 @@ This code is derived from the OpenJDK jdk-sandbox repository "json" branch at co - `JsonObject`: `asMap()`, `of(Map)` - `Json`: `parse(String)`, `parse(char[])`, `toDisplayString(JsonValue, String indent)` -### Upstream Migration Notice -The upstream `java.util.json` API has been promoted to `jdk.incubator.json` (commit `b956ae0`, 2026-02-05). The incubator version introduces significant API changes including method renames (`bool()`→`asBoolean()`, `string()`→`asString()`, `toInt()`→`asInt()`, etc.), `tryGet()`/`tryValue()` navigation, and identity (non-value) `equals`/`hashCode`. **That migration is now DONE in this branch** (issue #145): the public API lives in `jdk.incubator.java.util.json` and the implementation in `jdk.incubator.internal.util.json`, matching upstream frontier `43325738c`. +### Upstream alignment +Upstream promoted the API from the prototype `java.util.json` naming to the `jdk.incubator.json` incubator module (commit `b956ae0`, 2026-02-05); this release aligns fully with that module, including the renamed accessors, `tryGet()`/`tryValue()` navigation, and identity (non-value) `equals`/`hashCode`, at upstream frontier `43325738c` (issue #145). The original proposal and design rationale can be found in the included PDF: [Towards a JSON API for the JDK.pdf](Towards%20a%20JSON%20API%20for%20the%20JDK.pdf) diff --git a/index.html b/index.html index 46660e79..c9210ce8 100644 --- a/index.html +++ b/index.html @@ -154,7 +154,7 @@

java.util.json Backport for JDK 21+

-

A backport of the experimental java.util.json API from the OpenJDK jdk-sandbox “json” branch, plus an incubating JSON Type Definition (JTD) validator (RFC 8927).

+

A Java 21+ backport of the JDK's incubating jdk.incubator.json API (JEP 540, targeted at JDK 28), plus a JSON Type Definition (JTD) validator (RFC 8927).

Early access / unstable: APIs and behaviour may change as upstream evolves.
@@ -254,7 +254,7 @@

JSON Type Definition (JTD) Validator

// result.isValid() == true

Status

-

This code (as of 2026-01-25) is derived from the OpenJDK jdk-sandbox repository “json” branch. The API may evolve as the upstream design develops.

+

This code is the upstream incubator API and implementation as of commit 43325738c (2026-08-27) on the OpenJDK json branch, tracked daily for upstream drift. The API may evolve as upstream evolves.

License

GNU General Public License version 2 with Classpath exception (same as OpenJDK).

diff --git a/jdt2jar/pom.xml b/jdt2jar/pom.xml index 738e7f55..bbaa46f0 100644 --- a/jdt2jar/pom.xml +++ b/jdt2jar/pom.xml @@ -8,7 +8,7 @@ io.github.simbo1905.json parent - 2026.08.28 + 2026.08.30 jdt2jar diff --git a/json-compatibility-suite/pom.xml b/json-compatibility-suite/pom.xml index cfbfc5e4..599396df 100644 --- a/json-compatibility-suite/pom.xml +++ b/json-compatibility-suite/pom.xml @@ -7,7 +7,7 @@ io.github.simbo1905.json parent - 2026.08.28 + 2026.08.30 json-compatibility-suite diff --git a/json-java21-api-tracker/pom.xml b/json-java21-api-tracker/pom.xml index 8b83ffba..ecb7b34f 100644 --- a/json-java21-api-tracker/pom.xml +++ b/json-java21-api-tracker/pom.xml @@ -7,7 +7,7 @@ io.github.simbo1905.json parent - 2026.08.28 + 2026.08.30 json-java21-api-tracker diff --git a/json-java21-jsonpath/pom.xml b/json-java21-jsonpath/pom.xml index 67cf0ce3..a439f218 100644 --- a/json-java21-jsonpath/pom.xml +++ b/json-java21-jsonpath/pom.xml @@ -8,7 +8,7 @@ io.github.simbo1905.json parent - 2026.08.28 + 2026.08.30 java.util.json.jsonpath diff --git a/json-java21-jtd-codegen/pom.xml b/json-java21-jtd-codegen/pom.xml index 8e97b208..c7a7d466 100644 --- a/json-java21-jtd-codegen/pom.xml +++ b/json-java21-jtd-codegen/pom.xml @@ -8,7 +8,7 @@ io.github.simbo1905.json parent - 2026.08.28 + 2026.08.30 java.util.json.jtd.codegen diff --git a/json-java21-jtd/pom.xml b/json-java21-jtd/pom.xml index 36733ddf..556cbb99 100644 --- a/json-java21-jtd/pom.xml +++ b/json-java21-jtd/pom.xml @@ -8,7 +8,7 @@ io.github.simbo1905.json parent - 2026.08.28 + 2026.08.30 java.util.json.jtd diff --git a/json-java21/pom.xml b/json-java21/pom.xml index 8d5dcf55..72763879 100644 --- a/json-java21/pom.xml +++ b/json-java21/pom.xml @@ -7,7 +7,7 @@ io.github.simbo1905.json parent - 2026.08.28 + 2026.08.30 java.util.json diff --git a/pom.xml b/pom.xml index 51594a23..f0f59f3f 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ io.github.simbo1905.json parent - 2026.08.28 + 2026.08.30 pom java.util.json Java21 Backport Parent