This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch docs
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/docs by this push:
new 50578598b8 refactor: merge annotation sub-packages into parent
packages; fix Eclipse warnings; add V10.0 migration guide
50578598b8 is described below
commit 50578598b8ea4ebbf9ba8c861dd5912bef8f8658
Author: James Bognar <[email protected]>
AuthorDate: Sun Jun 7 10:57:22 2026 -0400
refactor: merge annotation sub-packages into parent packages; fix Eclipse
warnings; add V10.0 migration guide
---
README.md | 4 +-
pages/release-notes/10.0.0.md | 2 +-
pages/release-notes/9.5.0.md | 6 +-
pages/topics/02.04.09.PojoBuilders.md | 4 +-
pages/topics/06.01.JuneauCommonsBasics.md | 2 +-
pages/topics/09.01.JuneauRestCommonBasics.md | 2 +-
pages/topics/09.03.Annotations.md | 2 +-
pages/topics/10.07a.RestServerComposition.md | 2 +-
pages/topics/10.14d.JspViewSupport.md | 4 +-
pages/topics/10.14e.ThymeleafViewSupport.md | 4 +-
pages/topics/10.14f.MustacheViewSupport.md | 4 +-
pages/topics/10.14g.FreemarkerViewSupport.md | 4 +-
pages/topics/10a.01.JuneauRestServerMcpBasics.md | 2 +-
pages/topics/15.10.HealthProbes.md | 2 +-
pages/topics/19.04.JuneauExamplesRestSpringboot.md | 2 +-
pages/topics/20.04.JuneauShadedRestServer.md | 2 +-
.../20.05.JuneauShadedRestServerSpringboot.md | 4 +-
pages/topics/20.06.JuneauShadedAll.md | 2 +-
...ion-guide.md => 24.01.V10.0-migration-guide.md} | 106 +++++++++++++++------
sidebars.ts | 22 ++---
20 files changed, 117 insertions(+), 65 deletions(-)
diff --git a/README.md b/README.md
index 5054dee22c..7d6c4a6809 100644
--- a/README.md
+++ b/README.md
@@ -112,7 +112,7 @@ System.out.println(parsed.name); // Output: John
### 4. Create a REST API
```java
-import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.*;
import org.apache.juneau.rest.servlet.*;
@Rest(
@@ -216,7 +216,7 @@ boolean enabled = config.get("features.enabled",
Boolean.class);
```java
import org.apache.juneau.rest.client.*;
-import org.apache.juneau.http.annotation.*;
+import org.apache.juneau.http.*;
// Define REST interface
@Remote("http://api.example.com")
diff --git a/pages/release-notes/10.0.0.md b/pages/release-notes/10.0.0.md
index 1b6fd4ae0c..355a8e8a7b 100644
--- a/pages/release-notes/10.0.0.md
+++ b/pages/release-notes/10.0.0.md
@@ -12,7 +12,7 @@ Juneau 10.0.0 is a major version release representing a
significant milestone fo
This is the first release in the 10.x line. The jump from 9.x to 10.0 reflects
accumulated breaking changes in the API surface and internal architecture that
warranted a major version boundary, following [Semantic
Versioning](https://semver.org/) conventions.
-Consumers upgrading from 9.5.0 should consult the [V10 Migration
Guide](/docs/topics/V10MigrationGuide) (link TBD) for a complete list of
breaking changes.
+Consumers upgrading from 9.5.0 should consult the [V10.0 Migration
Guide](/docs/topics/V10.0-migration-guide) for a complete list of breaking
changes.
### Code quality improvements
diff --git a/pages/release-notes/9.5.0.md b/pages/release-notes/9.5.0.md
index cd60d195bb..2d5cfef3a1 100644
--- a/pages/release-notes/9.5.0.md
+++ b/pages/release-notes/9.5.0.md
@@ -281,7 +281,7 @@ neutral, marshaller-agnostic base, with JSON5-flavored
siblings in `org.apache.j
[RFC 8259](https://www.rfc-editor.org/rfc/rfc8259) JSON (was JSON5), and their
`(CharSequence)` /
`(Reader)` constructors and `ofString(...)` factories (renamed from
`ofJson(...)`) now default to
`JsonParser.DEFAULT` (was `Json5Parser.DEFAULT`). See the
-[v9.5 Migration Guide](/docs/topics/V9.5-migration-guide) for the full
breakdown and the
+[v10.0 Migration Guide](/docs/topics/V10.0-migration-guide) for the full
breakdown and the
recommended fix paths.
##### New neutral base in `org.apache.juneau.collections`
@@ -351,7 +351,7 @@ The SVL-resolving map (which moved into
`org.apache.juneau.collections` as part
has been **renamed** to `ResolvingMarshalledMap` and re-parented from
`JsonMap` to the new neutral
`MarshalledMap` base. SVL resolution is language-agnostic, so the strict-JSON
parent was no longer
the right shape. Hard rename, no deprecation shim. See the SVL "Package Moves"
table further down
-in this file and the [v9.5 Migration Guide](/docs/topics/V9.5-migration-guide)
for the import update.
+in this file and the [v10.0 Migration
Guide](/docs/topics/V10.0-migration-guide) for the import update.
##### Migration
@@ -3606,7 +3606,7 @@ Key changes:
- **`@RestInit(RestContext.Builder b)`** / **`@RestInit(RestOpContext.Builder
b)`** injection hooks — removed. The supported `@RestInit` parameter shapes are
now `ServletConfig`, `ServletContext`, the resource instance, `@Bean`-supplied
beans, and zero-arg.
- **Annotation memoizers** — every setting previously set by the builder is
now computed lazily by a `findXxx()` method on `RestContext` / `RestOpContext`
that walks the `@Rest` / `@RestOp` annotation chain, system properties, and the
`@Bean` bean store. Results are cached in a `Memoizer<T>` and invalidated by
`RestContext.reset()`.
-See the [V9.5 Migration Guide](/docs/topics/V9.5-migration-guide) for a
per-setting replacement table.
+See the [V10.0 Migration Guide](/docs/topics/V10.0-migration-guide) for a
per-setting replacement table.
#### Bean precedence: Spring > `@Bean` (inject) > default (breaking)
diff --git a/pages/topics/02.04.09.PojoBuilders.md
b/pages/topics/02.04.09.PojoBuilders.md
index 61fb9ea06e..2bc733d155 100644
--- a/pages/topics/02.04.09.PojoBuilders.md
+++ b/pages/topics/02.04.09.PojoBuilders.md
@@ -83,7 +83,7 @@ The first can be accomplished through **any** of the
following:
```java
public MyBean(Builder builder) {...}
```
-- A <a href="/site/apidocs/org/apache/juneau/annotation/Builder.html"
target="_blank">@Builder</a> annotation on the POJO class to explicitly
identify it.
+- A <a href="/site/apidocs/org/apache/juneau/commons/Builder.html"
target="_blank">@Builder</a> annotation on the POJO class to explicitly
identify it.
The builder class must have a public no-arg constructor.
```java
@Builder(Builder.class) public class MyBean {...}
@@ -103,7 +103,7 @@ The second can be accomplished through **any** of the
following:
:::info See Also
<tree>
-<node-0><java-annotation><a
href="/site/apidocs/org/apache/juneau/annotation/Builder.html"
target="_blank">org.apache.juneau.annotation.Builder</a></java-annotation></node-0>
+<node-0><java-annotation><a
href="/site/apidocs/org/apache/juneau/commons/Builder.html"
target="_blank">org.apache.juneau.commons.Builder</a></java-annotation></node-0>
<node-0><java-abstract-class><a
href="/site/apidocs/org/apache/juneau/swap/Builder.html"
target="_blank">org.apache.juneau.swap.Builder</a></java-abstract-class></node-0>
</tree>
diff --git a/pages/topics/06.01.JuneauCommonsBasics.md
b/pages/topics/06.01.JuneauCommonsBasics.md
index 21df3dec99..d90d1644b5 100644
--- a/pages/topics/06.01.JuneauCommonsBasics.md
+++ b/pages/topics/06.01.JuneauCommonsBasics.md
@@ -42,7 +42,7 @@ The `juneau-commons` module provides common utilities and
APIs used across the J
- **Function** (`org.apache.juneau.commons.function`): Functional programming
utilities including tuples, throwing functions, and resettable suppliers
- **Concurrent** (`org.apache.juneau.commons.concurrent`): Concurrency
utilities including simple locks and read-write locks
- **Time** (`org.apache.juneau.commons.time`): Time utilities for granular
date/time handling and time providers
-- **Annotation** (`org.apache.juneau.commons.annotation`): Annotation
utilities for working with annotation objects and groups
+- **Annotation** (`org.apache.juneau.commons`): Annotation utilities for
working with annotation objects and groups
- **Conversion** (`org.apache.juneau.commons.conversion`): Type conversion
utilities
This module has no external dependencies and serves as the foundation for
other Juneau modules.
diff --git a/pages/topics/09.01.JuneauRestCommonBasics.md
b/pages/topics/09.01.JuneauRestCommonBasics.md
index 0acb93a1cd..17629bc528 100644
--- a/pages/topics/09.01.JuneauRestCommonBasics.md
+++ b/pages/topics/09.01.JuneauRestCommonBasics.md
@@ -60,7 +60,7 @@ The transport-neutral packages in `juneau-rest-common`:
<tree>
<node-0>Transport-neutral HTTP packages (no Apache HttpClient 4.5
dependency)</node-0>
<node-1><java-package><a
href="/site/apidocs/org/apache/juneau/http/package-summary.html"
target="_blank">org.apache.juneau.http</a></java-package> - Static
`HttpHeaders` factory facade and shared utilities.</node-1>
-<node-1><java-package><a
href="/site/apidocs/org/apache/juneau/http/annotation/package-summary.html"
target="_blank">org.apache.juneau.http.annotation</a></java-package> -
Swagger-based annotations used on both server-side APIs and client-side proxy
interfaces.</node-1>
+<node-1><java-package><a
href="/site/apidocs/org/apache/juneau/http/package-summary.html"
target="_blank">org.apache.juneau.http</a></java-package> - Swagger-based
annotations used on both server-side APIs and client-side proxy
interfaces.</node-1>
<node-1><java-package><a
href="/site/apidocs/org/apache/juneau/http/header/package-summary.html"
target="_blank">org.apache.juneau.http.header</a></java-package> -
Lazy-resolved HTTP header beans (no Apache `Header` interface dependency) and
the `EntityTag` / `EntityTags` value types.</node-1>
<node-1><java-package><a
href="/site/apidocs/org/apache/juneau/http/part/package-summary.html"
target="_blank">org.apache.juneau.http.part</a></java-package> - HTTP
query/form-data/path classes.</node-1>
<node-1><java-package><a
href="/site/apidocs/org/apache/juneau/http/remote/package-summary.html"
target="_blank">org.apache.juneau.http.remote</a></java-package> - `@Remote` /
`@RemoteOp` / `@RemoteGet` / etc. proxy-interface annotations.</node-1>
diff --git a/pages/topics/09.03.Annotations.md
b/pages/topics/09.03.Annotations.md
index 59dc96dbcb..c876377747 100644
--- a/pages/topics/09.03.Annotations.md
+++ b/pages/topics/09.03.Annotations.md
@@ -3,7 +3,7 @@ title: "Annotations"
slug: Annotations
---
-The <a
href="/site/apidocs/org/apache/juneau/http/annotation/package-summary.html"
target="_blank">org.apache.juneau.http.annotation</a> package contains
annotations for defining both
+The <a href="/site/apidocs/org/apache/juneau/http/package-summary.html"
target="_blank">org.apache.juneau.http</a> package contains annotations for
defining both
server and client side APIs.
The server-side APIs also use it for producing auto-generated Swagger
documentation through the REST API itself.
diff --git a/pages/topics/10.07a.RestServerComposition.md
b/pages/topics/10.07a.RestServerComposition.md
index 18130e229d..f9a962b4b1 100644
--- a/pages/topics/10.07a.RestServerComposition.md
+++ b/pages/topics/10.07a.RestServerComposition.md
@@ -75,7 +75,7 @@ The recommended way to wire Kubernetes probes into an
existing root servlet:
```java
import org.apache.juneau.commons.inject.*;
-import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.*;
import org.apache.juneau.rest.health.*;
import org.apache.juneau.rest.servlet.*;
diff --git a/pages/topics/10.14d.JspViewSupport.md
b/pages/topics/10.14d.JspViewSupport.md
index c41b31f8a0..e317b39626 100644
--- a/pages/topics/10.14d.JspViewSupport.md
+++ b/pages/topics/10.14d.JspViewSupport.md
@@ -100,11 +100,11 @@ Hello, ${name}!
### REST resource — `View`-return dispatch
```java
-import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.*;
import org.apache.juneau.rest.servlet.*;
import org.apache.juneau.rest.view.*;
import org.apache.juneau.rest.view.jsp.*;
-import org.apache.juneau.http.annotation.*;
+import org.apache.juneau.http.*;
@Rest(path="/app", mixins=BasicJspResource.class)
public class AppResource extends RestServlet {
diff --git a/pages/topics/10.14e.ThymeleafViewSupport.md
b/pages/topics/10.14e.ThymeleafViewSupport.md
index f1f1c7b176..766a75c660 100644
--- a/pages/topics/10.14e.ThymeleafViewSupport.md
+++ b/pages/topics/10.14e.ThymeleafViewSupport.md
@@ -105,8 +105,8 @@ src/main/resources/
### REST resource — `View`-return dispatch
```java
-import org.apache.juneau.http.annotation.*;
-import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.http.*;
+import org.apache.juneau.rest.*;
import org.apache.juneau.rest.servlet.*;
import org.apache.juneau.rest.view.*;
import org.apache.juneau.rest.view.thymeleaf.*;
diff --git a/pages/topics/10.14f.MustacheViewSupport.md
b/pages/topics/10.14f.MustacheViewSupport.md
index 22b3c4620c..23ec2de93d 100644
--- a/pages/topics/10.14f.MustacheViewSupport.md
+++ b/pages/topics/10.14f.MustacheViewSupport.md
@@ -107,8 +107,8 @@ src/main/resources/
### REST resource — `View`-return dispatch
```java
-import org.apache.juneau.http.annotation.*;
-import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.http.*;
+import org.apache.juneau.rest.*;
import org.apache.juneau.rest.servlet.*;
import org.apache.juneau.rest.view.*;
import org.apache.juneau.rest.view.mustache.*;
diff --git a/pages/topics/10.14g.FreemarkerViewSupport.md
b/pages/topics/10.14g.FreemarkerViewSupport.md
index c0a886ebd5..c93d956483 100644
--- a/pages/topics/10.14g.FreemarkerViewSupport.md
+++ b/pages/topics/10.14g.FreemarkerViewSupport.md
@@ -118,8 +118,8 @@ plain-text email bodies or JSON-shaped responses where the
caller controls escap
### REST resource — `View`-return dispatch
```java
-import org.apache.juneau.http.annotation.*;
-import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.http.*;
+import org.apache.juneau.rest.*;
import org.apache.juneau.rest.servlet.*;
import org.apache.juneau.rest.view.*;
import org.apache.juneau.rest.view.freemarker.*;
diff --git a/pages/topics/10a.01.JuneauRestServerMcpBasics.md
b/pages/topics/10a.01.JuneauRestServerMcpBasics.md
index 06e28e705b..0142f28c51 100644
--- a/pages/topics/10a.01.JuneauRestServerMcpBasics.md
+++ b/pages/topics/10a.01.JuneauRestServerMcpBasics.md
@@ -55,7 +55,7 @@ Subclass `McpRestServlet` and supply your config in
`createMcpConfig()`. The bas
```java
import org.apache.juneau.bean.mcp.*;
-import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.*;
import org.apache.juneau.rest.mcp.*;
@Rest(path="/mcp")
diff --git a/pages/topics/15.10.HealthProbes.md
b/pages/topics/15.10.HealthProbes.md
index 79d576ca55..e57799281f 100644
--- a/pages/topics/15.10.HealthProbes.md
+++ b/pages/topics/15.10.HealthProbes.md
@@ -50,7 +50,7 @@ HTTP status is:
import org.apache.juneau.commons.inject.*;
import org.apache.juneau.microservice.*;
import org.apache.juneau.microservice.jetty.*;
-import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.*;
import org.apache.juneau.rest.health.*;
import org.apache.juneau.rest.servlet.*;
diff --git a/pages/topics/19.04.JuneauExamplesRestSpringboot.md
b/pages/topics/19.04.JuneauExamplesRestSpringboot.md
index 205e76c40f..e84d5daa4e 100644
--- a/pages/topics/19.04.JuneauExamplesRestSpringboot.md
+++ b/pages/topics/19.04.JuneauExamplesRestSpringboot.md
@@ -54,7 +54,7 @@ The example demonstrates Spring Boot integration with Juneau
REST:
```java
package org.apache.juneau.examples.rest.springboot;
-import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.*;
import org.apache.juneau.rest.springboot.*;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.*;
diff --git a/pages/topics/20.04.JuneauShadedRestServer.md
b/pages/topics/20.04.JuneauShadedRestServer.md
index 7d8f0efeab..f0c679e8ba 100644
--- a/pages/topics/20.04.JuneauShadedRestServer.md
+++ b/pages/topics/20.04.JuneauShadedRestServer.md
@@ -82,7 +82,7 @@ java_library(
### Basic REST Resource
```java
-import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.*;
import org.apache.juneau.rest.servlet.*;
@Rest(
diff --git a/pages/topics/20.05.JuneauShadedRestServerSpringboot.md
b/pages/topics/20.05.JuneauShadedRestServerSpringboot.md
index 3aa003a080..7404762792 100644
--- a/pages/topics/20.05.JuneauShadedRestServerSpringboot.md
+++ b/pages/topics/20.05.JuneauShadedRestServerSpringboot.md
@@ -88,7 +88,7 @@ public class MyApplication {
### REST Resource with Spring Integration
```java
-import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.*;
import org.apache.juneau.rest.springboot.*;
import org.springframework.beans.factory.annotation.Autowired;
@@ -123,7 +123,7 @@ public class PetResource extends SpringRestServlet {
```java
import org.springframework.context.annotation.Configuration;
-import org.apache.juneau.rest.annotation.Rest;
+import org.apache.juneau.rest.Rest;
@Rest(
defaultAccept="application/json",
diff --git a/pages/topics/20.06.JuneauShadedAll.md
b/pages/topics/20.06.JuneauShadedAll.md
index ec8be18572..5d27641626 100644
--- a/pages/topics/20.06.JuneauShadedAll.md
+++ b/pages/topics/20.06.JuneauShadedAll.md
@@ -111,7 +111,7 @@ java_binary(
```java
import org.apache.juneau.microservice.jetty.*;
-import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.*;
import org.apache.juneau.rest.servlet.*;
// Main application
diff --git a/pages/topics/23.01.V9.5-migration-guide.md
b/pages/topics/24.01.V10.0-migration-guide.md
similarity index 93%
rename from pages/topics/23.01.V9.5-migration-guide.md
rename to pages/topics/24.01.V10.0-migration-guide.md
index 63c973e1e6..4101ce341f 100644
--- a/pages/topics/23.01.V9.5-migration-guide.md
+++ b/pages/topics/24.01.V10.0-migration-guide.md
@@ -1,13 +1,71 @@
---
-title: "v9.5 Migration Guide"
-slug: V9.5-migration-guide
+title: "v10.0 Migration Guide"
+slug: V10.0-migration-guide
---
-The following guide can be used to help migrate your code to v9.5.
+The following guide can be used to help migrate your code to v10.0.
Note that you can also refer to the Release Notes for changes as well.
-This guide also captures breaking changes introduced during the 9.2.x line so
that
-teams jumping from 9.1 (or earlier) directly to 9.5 have a single reference.
+This guide covers all breaking changes introduced since v9.1, including
changes that were
+originally developed under the v9.5.0 label (a release that was never shipped
— it was
+renamed to v10.0.0). Teams upgrading from 8.x, 9.1, or any earlier version can
use this
+as a single authoritative reference.
+
+## Annotation Sub-Package Collapse
+
+All `*.annotation` sub-packages have been merged into their parent packages.
+Classes that were in `org.apache.juneau.foo.annotation` are now in
`org.apache.juneau.foo`.
+
+| Old package | New package |
+|-------------|-------------|
+| `org.apache.juneau.annotation.*` | `org.apache.juneau.*` |
+| `org.apache.juneau.bson.annotation.*` | `org.apache.juneau.bson.*` |
+| `org.apache.juneau.cbor.annotation.*` | `org.apache.juneau.cbor.*` |
+| `org.apache.juneau.csv.annotation.*` | `org.apache.juneau.csv.*` |
+| `org.apache.juneau.hjson.annotation.*` | `org.apache.juneau.hjson.*` |
+| `org.apache.juneau.hocon.annotation.*` | `org.apache.juneau.hocon.*` |
+| `org.apache.juneau.html.annotation.*` | `org.apache.juneau.html.*` |
+| `org.apache.juneau.ini.annotation.*` | `org.apache.juneau.ini.*` |
+| `org.apache.juneau.jcs.annotation.*` | `org.apache.juneau.jcs.*` |
+| `org.apache.juneau.json.annotation.*` | `org.apache.juneau.json.*` |
+| `org.apache.juneau.jsonl.annotation.*` | `org.apache.juneau.jsonl.*` |
+| `org.apache.juneau.jsonschema.annotation.*` |
`org.apache.juneau.jsonschema.*` |
+| `org.apache.juneau.markdown.annotation.*` | `org.apache.juneau.markdown.*` |
+| `org.apache.juneau.msgpack.annotation.*` | `org.apache.juneau.msgpack.*` |
+| `org.apache.juneau.oapi.annotation.*` | `org.apache.juneau.oapi.*` |
+| `org.apache.juneau.parquet.annotation.*` | `org.apache.juneau.parquet.*` |
+| `org.apache.juneau.parser.annotation.*` | `org.apache.juneau.parser.*` |
+| `org.apache.juneau.plaintext.annotation.*` | `org.apache.juneau.plaintext.*`
|
+| `org.apache.juneau.proto.annotation.*` | `org.apache.juneau.proto.*` |
+| `org.apache.juneau.serializer.annotation.*` |
`org.apache.juneau.serializer.*` |
+| `org.apache.juneau.soap.annotation.*` | `org.apache.juneau.soap.*` |
+| `org.apache.juneau.toml.annotation.*` | `org.apache.juneau.toml.*` |
+| `org.apache.juneau.uon.annotation.*` | `org.apache.juneau.uon.*` |
+| `org.apache.juneau.urlencoding.annotation.*` |
`org.apache.juneau.urlencoding.*` |
+| `org.apache.juneau.xml.annotation.*` | `org.apache.juneau.xml.*` |
+| `org.apache.juneau.yaml.annotation.*` | `org.apache.juneau.yaml.*` |
+| `org.apache.juneau.commons.annotation.*` | `org.apache.juneau.commons.*` |
+| `org.apache.juneau.jena.annotation.*` | `org.apache.juneau.jena.*` |
+| `org.apache.juneau.http.annotation.*` | `org.apache.juneau.http.*` |
+| `org.apache.juneau.rest.annotation.*` | `org.apache.juneau.rest.*` |
+
+**Migration action required:** Update all `import` statements that reference
an `*.annotation`
+sub-package. Wildcard imports can simply be collapsed to the parent package —
for example:
+
+```diff
+-import org.apache.juneau.json.annotation.*;
++import org.apache.juneau.json.*;
+```
+
+If the parent package is already imported, the `*.annotation` import can be
dropped entirely.
+Single-type imports follow the same rename, e.g.:
+
+```diff
+-import org.apache.juneau.json.annotation.Json;
++import org.apache.juneau.json.Json;
+```
+
+## REST Context Builder and Configuration Refactoring
| Old | New |
|-----|-----|
@@ -26,7 +84,6 @@ teams jumping from 9.1 (or earlier) directly to 9.5 have a
single reference.
| Per-operation `@RestInit public void init(RestOpContext.Builder b) { ... }`
hook — the framework discovered every `@RestInit` method whose parameter list
contained `RestOpContext.Builder` and invoked it once per `@RestOp`-annotated
method, threading the in-flight per-op builder so the hook could imperatively
customize a single operation's context. | **Removed.** The per-op
`@RestInit(RestOpContext.Builder)` injection protocol is gone. All
operation-level configuration is now expressed [...]
| `RestOpContext.create(java.lang.reflect.Method, RestContext)` static factory
+ the fluent `.beanStore(...).type(...).build()` chain — used internally by
`RestContext` and (rarely) by user code building one-off `RestOpContext`
instances. | **Removed.** The two internal callers in
`RestContext.Builder.createRestOperations` migrated to direct constructor
invocation: `new RestOpContext(method, context)` for the standard path and `new
RrpcRestOpContext(method, context)` for the RRPC special [...]
| Class-level `@RestInit public void init(RestContext.Builder b) { ... }` hook
— the framework added the in-flight `RestContext.Builder` to the resource's
bean store so any `@RestInit` method that declared a `RestContext.Builder`
parameter received it and could imperatively configure the resource-level
context (`builder.path(...)`, `builder.children(...)`, `builder.encoders(...)`,
etc.). | **Removed.** The class-level Builder-injection protocol is gone —
`RestContext.Builder` is no longe [...]
-
| Custom annotation appliers — user code that subclassed the internal
`AnnotationApplier<Rest, RestContext.Builder>` (or `AnnotationApplier<RestOp,
RestOpContext.Builder>`) to extend the annotation-processing pass (the
`apply(AnnotationInfo<A>, B builder)` hook invoked once per annotation during
context construction). | **Removed.** The builder-based apply-pass is gone;
`RestAnnotation.Apply` (`RestContextApply`) is now a package-private nested
class inside `RestContext` and is not exten [...]
| Custom `RestAnnotation.create(...)` / `RestOpAnnotation.create(...)`
builder-of-builders patterns — programmatic construction of `@Rest` / `@RestOp`
annotation proxies used to feed synthetic annotations into the builder
apply-pass (common in test fixtures and extension libraries). | The annotation
proxy builders still exist for test use (`RestAnnotation.create()` /
`RestOpAnnotation.create()` are still available via annotation-test helpers),
but they no longer feed into a builder apply [...]
| Debug config attributes on `@Rest` / `@RestOp` (`debug`, `debugDefault`,
`debugEnablement`, `debugOn`) | A single typed slot: `debug=@Debug(...)` on
both `@Rest` and `@RestOp`. Use `@Debug("always" | "never" | "conditional")`,
optional `format`, `level`, and `config` members. | **Hard break.** The old
attributes are removed with no deprecation shim. Method-level debug
configuration is now applied only on `@RestOp` methods. Runtime request
shortcuts (`RestRequest.setDebug()/setDebug(Boo [...]
@@ -71,7 +128,7 @@ flavored maps / lists based on the parser's language, which
changes the runtime
| `Json5Map.ofJson5(CharSequence)` / `Json5Map.ofJson5(Reader)` |
`Json5Map.ofString(CharSequence)` / `Json5Map.ofString(Reader)` (`ofText(...)`
deprecated alias) | Method naming now aligns with string-based parse factories
across `MarshalledMap`/`JsonMap`/`Json5Map`. No behavioral change — the
single-arg form still uses `Json5Parser.DEFAULT`. |
| `Json5List.ofJson5(CharSequence)` / `Json5List.ofJson5(Reader)` |
`Json5List.ofString(CharSequence)` / `Json5List.ofString(Reader)`
(`ofText(...)` deprecated alias) | Method naming now aligns with string-based
parse factories across `MarshalledList`/`JsonList`/`Json5List`. No behavioral
change — the single-arg form still uses `Json5Parser.DEFAULT`. (Note:
`Json5List.ofJson5OrCdl(String)` was NOT renamed.) |
| `Json5Parser.DEFAULT.parse(s, Object.class)` returned a `JsonMap` (and
nested objects were `JsonMap` / `JsonList`). | Returns a `Json5Map` (and nested
objects are `Json5Map` / `Json5List`). | Same change applies to `parse(s,
Map.class)` / `parse(s, Collection.class)` targets, and to nested maps / lists
inside the parsed tree. Code that casts the result to `JsonMap` will throw
`ClassCastException`. Fix options: (1) cast to `Json5Map` / `Json5List`
instead, (2) cast to the neutral `Marsh [...]
-| Every parser other than `JsonParser` / `Json5Parser` (`XmlParser`,
`YamlParser`, `UonParser`, `UrlEncodingParser`, `HoconParser`, `MsgPackParser`,
`CborParser`, `BsonParser`, `HtmlParser`, `JsonlParser`, `HjsonParser`,
`MarkdownParser`, `CsvParser`, `RdfXmlParser`, etc.) returned `JsonMap` /
`JsonList` from `parse(s, Object.class)`. | Returns the neutral `MarshalledMap`
/ `MarshalledList`. | Same fix options as the `Json5Parser` row above.
Per-language flavored `XMap` / `XList` (e.g. ` [...]
+| Every parser other than `JsonParser` / `Json5Parser` (`XmlParser`,
`YamlParser`, `UonParser`, `UrlEncodingParser`, `HoconParser`, `MsgPackParser`,
`CborParser`, `BsonParser`, `HtmlParser`, `JsonlParser`, `HjsonParser`,
`MarkdownParser`, `CsvParser`, `RdfXmlParser`, etc.) returned `JsonMap` /
`JsonList` from `parse(s, Object.class)`. | Returns the neutral `MarshalledMap`
/ `MarshalledList`. | Same fix options as the `Json5Parser` row above.
Per-language flavored `XMap` / `XList` (e.g. ` [...]
| `org.apache.juneau.collections.ResolvingJsonMap` |
`org.apache.juneau.collections.ResolvingMarshalledMap` | Renamed AND
re-parented from `JsonMap` to the new neutral `MarshalledMap` base — SVL
resolution is language-agnostic. Hard rename, no deprecation shim. Update the
import and any `new ResolvingJsonMap(...)` constructor calls. |
## Bean→Marshalled Renames
@@ -302,7 +359,7 @@ the user adds to
`Microservice.Builder.configurations(...)`. The Java package
## REST Client and HTTP Stack Promotion (TODO-38)
-Juneau 9.5.0 promotes the next-generation, transport-agnostic REST client to
the canonical names.
+Juneau v10.0 promotes the next-generation, transport-agnostic REST client to
the canonical names.
The pre-existing Apache HttpClient 4.5–based stack moves under `.classic`
packages and a new
`juneau-rest-client-classic` Maven module so existing call sites keep working.
@@ -311,20 +368,20 @@ The pre-existing Apache HttpClient 4.5–based stack moves
under `.classic` pack
| Old | New | Notes |
|-----|-----|-------|
| `<artifactId>juneau-rest-client</artifactId>` |
`<artifactId>juneau-rest-client</artifactId>` *(canonical, NG)* **and/or**
`<artifactId>juneau-rest-client-classic</artifactId>` *(legacy)* | The
historical `juneau-rest-client` artifact is now the **transport-agnostic NG**
client with no `org.apache.http.*` dependency. The legacy HC4.5-based
`RestClient` moved into the new `juneau-rest-client-classic` sibling artifact.
Pull in both if you need both flavors; the aggregator artifacts (`jun [...]
-| `<artifactId>juneau-ng-rest-client-apache-httpclient-45</artifactId>` |
`<artifactId>juneau-rest-client-apache-httpclient-45</artifactId>` | Drop the
`ng-` prefix. The 9.5 early-snapshot package layout shipped these NG transport
modules under `juneau-ng-rest-client-*` artifacts; the GA cut renames them.
Same rename applies to `…-apache-httpclient-50`, `…-java-httpclient`,
`…-okhttp`, `…-jetty`. |
+| `<artifactId>juneau-ng-rest-client-apache-httpclient-45</artifactId>` |
`<artifactId>juneau-rest-client-apache-httpclient-45</artifactId>` | Drop the
`ng-` prefix. The early-snapshot package layout shipped these NG transport
modules under `juneau-ng-rest-client-*` artifacts; the GA cut renames them.
Same rename applies to `…-apache-httpclient-50`, `…-java-httpclient`,
`…-okhttp`, `…-jetty`. |
### Package renames
| Old | New | Notes |
|-----|-----|-------|
| `org.apache.juneau.http.*` *(Apache HttpCore-based types in
`juneau-rest-common`)* | `org.apache.juneau.http.classic.*` | The historical
`juneau-rest-common` types (`HttpHeaders` facade, `Authorization`, `Range`,
`BasicHeader`, `BasicStatusLine`, response/exception classes, etc., ~170 types)
moved under the `.classic` sub-package. Update `import
org.apache.juneau.http.*;` to `import org.apache.juneau.http.classic.*;`. |
-| `org.apache.juneau.ng.http.*` *(9.5 early snapshot only)* |
`org.apache.juneau.http.*` | The new JDK-native types that briefly lived under
`ng.http.*` graduated to the now-free canonical `org.apache.juneau.http.*`
namespace. The `@Remote` / `@RemoteGet` / `@RemotePost` / etc. annotations stay
at `org.apache.juneau.http.remote.*` (unchanged). |
-| `org.apache.juneau.ng.rest.client.*` *(9.5 early snapshot only)* |
`org.apache.juneau.rest.client.*` | The NG client and HTTP transport SPI are
now canonical. The legacy `RestClient` (Apache HttpClient 4.5–based) is at
`org.apache.juneau.rest.client.classic.*` in the new module. |
-| `org.apache.juneau.ng.rest.mock.*` *(9.5 early snapshot only)* |
`org.apache.juneau.rest.mock.*` | Canonical, paired with the NG `RestClient`. |
+| `org.apache.juneau.ng.http.*` *(early snapshot only)* |
`org.apache.juneau.http.*` | The new JDK-native types that briefly lived under
`ng.http.*` graduated to the now-free canonical `org.apache.juneau.http.*`
namespace. The `@Remote` / `@RemoteGet` / `@RemotePost` / etc. annotations stay
at `org.apache.juneau.http.remote.*` (unchanged). |
+| `org.apache.juneau.ng.rest.client.*` *(early snapshot only)* |
`org.apache.juneau.rest.client.*` | The NG client and HTTP transport SPI are
now canonical. The legacy `RestClient` (Apache HttpClient 4.5–based) is at
`org.apache.juneau.rest.client.classic.*` in the new module. |
+| `org.apache.juneau.ng.rest.mock.*` *(early snapshot only)* |
`org.apache.juneau.rest.mock.*` | Canonical, paired with the NG `RestClient`. |
### Class renames (early-snapshot only)
-If you adopted the 9.5 early snapshots that exposed `Ng*` class names, update
to the canonical names. No alias / deprecation shim is provided.
+If you adopted early snapshots that exposed `Ng*` class names, update to the
canonical names. No alias / deprecation shim is provided.
| Old | New | Notes |
|-----|-----|-------|
@@ -372,7 +429,7 @@ Continues the work started in TODO-38: `juneau-rest-common`
is now split into a
| Old (single artifact) | New (two artifacts) | Notes |
|-----|-----|-------|
-| `<artifactId>juneau-rest-common</artifactId>` *(carries `httpcore`
transitively)* | `<artifactId>juneau-rest-common</artifactId>`
*(transport-neutral, **no** `httpcore`)* **and/or**
`<artifactId>juneau-rest-common-classic</artifactId>` *(new, depends on
`httpcore`)* | Code using only `org.apache.juneau.http.*` /
`org.apache.juneau.http.header.*` / `org.apache.juneau.http.remote.*` /
`org.apache.juneau.http.part.*` / `org.apache.juneau.http.entity.*` /
`org.apache.juneau.http.response.* [...]
+| `<artifactId>juneau-rest-common</artifactId>` *(carries `httpcore`
transitively)* | `<artifactId>juneau-rest-common</artifactId>`
*(transport-neutral, **no** `httpcore`)* **and/or**
`<artifactId>juneau-rest-common-classic</artifactId>` *(new, depends on
`httpcore`)* | Code using only `org.apache.juneau.http.*` /
`org.apache.juneau.http.header.*` / `org.apache.juneau.http.remote.*` /
`org.apache.juneau.http.part.*` / `org.apache.juneau.http.entity.*` /
`org.apache.juneau.http.response.* [...]
### Class moves (source-incompatible)
@@ -403,7 +460,7 @@ Completes the HC 4.5 removal started by TODO-38 / TODO-42.
`juneau-rest-server`
The Maven coordinate stays the same; the transitive set shrinks:
-| Old (9.4) | New (9.5) | Notes |
+| Old (9.4) | New (10.0) | Notes |
|-----|-----|-------|
| `juneau-rest-server` pulled `juneau-rest-common-classic` →
`httpcomponents:httpcore:4.4.16` transitively. | `juneau-rest-server` pulls
only `juneau-rest-common`. No `org.apache.httpcomponents:*` on the classpath. |
If your `@Rest` resource still references any
`org.apache.juneau.http.classic.*` type (e.g. throws
`org.apache.juneau.http.classic.response.BadRequest`, accepts a
`org.apache.juneau.http.classic.header.HeaderList`, returns a
`org.apache.juneau.http.classic.resource.BasicReso [...]
@@ -413,7 +470,7 @@ The shaded aggregator artifacts
(`juneau-shaded-rest-server`, `juneau-shaded-res
The server-side surface that used to expose `org.apache.http.*` types was
retyped. These signature changes are **source-incompatible**:
-| Old (9.4) | New (9.5) | Notes |
+| Old (9.4) | New (10.0) | Notes |
|-----|-----|-------|
| `org.apache.http.Header[] hdrs = req.getAllHeaders();` |
`org.apache.juneau.http.HttpHeader[] hdrs = req.getAllHeaders();` |
`RestRequest#getAllHeaders()` retyped. The new `HttpHeader` is a JDK-only
interface; `getName()` / `getValue()` are unchanged. |
| `org.apache.http.RequestLine rl = req.getRequestLine();` |
`org.apache.juneau.http.HttpRequestLine rl = req.getRequestLine();` |
`getMethod()` / `getUri()` are unchanged; `getProtocolVersion()` now returns
`HttpProtocolVersion` instead of `org.apache.http.ProtocolVersion`. |
@@ -438,7 +495,7 @@ The four request-side part-list classes were renamed for
consistency with the ne
| Old | New | Notes |
|-----|-----|-------|
-| `org.apache.juneau.rest.processor.HttpEntityProcessor` |
`org.apache.juneau.rest.processor.HttpBodyProcessor` | The class was already
internally rewritten to operate on `org.apache.juneau.http.HttpBody` rather
than HC 4.5's `org.apache.http.HttpEntity`; the class name was kept for
compatibility through earlier 9.5 snapshots but is now renamed. The default
response-processor chain registered by `DefaultConfig` is updated; any custom
`RestContext.responseProcessors(...)` configuration th [...]
+| `org.apache.juneau.rest.processor.HttpEntityProcessor` |
`org.apache.juneau.rest.processor.HttpBodyProcessor` | The class was already
internally rewritten to operate on `org.apache.juneau.http.HttpBody` rather
than HC 4.5's `org.apache.http.HttpEntity`; the class name was kept for
compatibility through earlier snapshots but is now renamed. The default
response-processor chain registered by `DefaultConfig` is updated; any custom
`RestContext.responseProcessors(...)` configuration that e [...]
### Legacy return-type handling
@@ -473,7 +530,7 @@ Closes out the format-control extension work (TODO-4 /
TODO-50 / TODO-52 / TODO-
| `byte[]` bean property on `ParquetSerializer` / `ParquetParser` at
non-`NOT_SET` `BinaryFormat` → emitted/read as a raw `TYPE_BYTE_ARRAY` Parquet
column | Emits/reads as a UTF-8 string column containing the configured wire
form (`BASE64` / `BASE64_URL` / `HEX` / `SPACED_HEX`) | **Wire-format change.**
At any non-`NOT_SET` `BinaryFormat` value, Parquet now routes `byte[]` through
the configured text wire form instead of native bytes. Downstream consumers
that were reading the raw-bytes [...]
| `byte[]` bean property on `RdfThriftSerializer` / `RdfThriftParser` /
`RdfProtoSerializer` / `RdfProtoParser` at non-`NOT_SET` `BinaryFormat` →
emitted/read as an `xsd:base64Binary` typed RDF literal | Emits/reads as a
plain RDF string literal containing the configured wire form (`BASE64` /
`BASE64_URL` / `HEX` / `SPACED_HEX`) | **Wire-format change.** Same shape as
the Parquet row above — at any non-`NOT_SET` `BinaryFormat`, the binary RDF
serializers (RDF/Thrift, RDF/Proto) now route [...]
| `BinaryFormat.BASE64_URL.parse("mQ")` (or any non-3-aligned URL-safe payload
without `-` / `_` chars) threw `IllegalArgumentException: Invalid BASE64 string
length` | Decodes correctly via `Base64.getUrlDecoder()` (which accepts missing
padding) | **Bug fix, not a breaking change.** `BinaryFormat.parse` now honors
the `BASE64_URL` constant directly before falling through to the
format-agnostic wire-shape sniff. No source change required. |
-| `JsonParser.DEFAULT.parse("3.14", Object.class)` returned `java.lang.Float`
*(or any JSON-family parser auto-classifying a bare decimal)* | Returns
`java.lang.Double` | **Behavioral change (Bug #5 closure)** — see release notes
for the full rationale. The shared classifier `StringUtils.parseNumber` no
longer auto-compacts to `Float` when the lossless `Float`/`Double` `toString()`
representations happen to match. Affects all JSON-family parsers (JSON / JSON5
/ JSONL / XML / HTML / UON / [...]
+| `JsonParser.DEFAULT.parse("3.14", Object.class)` returned `java.lang.Float`
*(or any JSON-family parser auto-classifying a bare decimal)* | Returns
`java.lang.Double` | **Behavioral change** — the shared classifier
`StringUtils.parseNumber` no longer auto-compacts to `Float` when the lossless
`Float`/`Double` `toString()` representations happen to match. Affects all
JSON-family parsers (JSON / JSON5 / JSONL / XML / HTML / UON / UrlEncoding /
JCS) plus any caller of `StringUtils.parseNu [...]
## Format-Control: Duration / Period Defaults (TODO-4)
@@ -521,7 +578,7 @@ The legacy `ByteArraySwap` family, the
`OutputStreamSerializer.Builder` / `Input
|-----|-----|-------|
| `org.apache.juneau.swaps.ClassSwap` |
`@MarshalledProp(classFormat=ClassFormat.FQCN)` /
`@Marshalled(classFormat=...)` /
`MarshallingContext.Builder.classFormat(ClassFormat)` for bean properties; for
top-level `Class<?>` values the new `org.apache.juneau.swaps.ClassFormatSwap`
is registered in `DefaultSwaps` and reads the resolved `ClassFormat` at swap
time | Hard deletion. Default `ClassFormat.FQCN` (≈ `Class.getCanonicalName()`)
is functionally compatible with the old `ClassSwap.getN [...]
| `MarshallingContext` had no top-level `booleanFormat` / `floatFormat` /
`currencyFormat` / `classFormat` setting | New
`MarshallingContext.Builder.booleanFormat(BooleanFormat)` /
`floatFormat(FloatFormat)` / `currencyFormat(CurrencyFormat)` /
`classFormat(ClassFormat)` settings | Additive. **Defaults:**
`BooleanFormat.TRUE_FALSE`, `FloatFormat.NaN_AS_NULL` (boxed `Float` / `Double`
only — primitive `float` / `double` keep the legacy null-to-zero contract),
`CurrencyFormat.ISO_CODE`, `C [...]
-| `Currency` bean properties at the default `CurrencyFormat` were unrecognized
(no default swap) | `Currency` round-trips via `DefaultSwaps` registration at
`CurrencyFormat.ISO_CODE` / `NOT_SET` | Bug #6 closure; source-compatible. |
+| `Currency` bean properties at the default `CurrencyFormat` were unrecognized
(no default swap) | `Currency` round-trips via `DefaultSwaps` registration at
`CurrencyFormat.ISO_CODE` / `NOT_SET` | Bug fix, source-compatible. |
## JSON Strict-Mode Separation (`JsonParser` / `JsonSerializer` vs
`Json5Parser` / `Json5Serializer`)
@@ -576,7 +633,7 @@ Several attributes on these annotations have been **removed
without deprecation
| `on()` / `onClass()` attributes on all HTTP annotations | Removed — apply
the annotation directly to the target rather than via `on()` / `onClass()`
proxies | Hard removal. |
| `@ContextApply` on HTTP annotations | Removed — the annotation no longer
participates in the context-apply pass | Hard removal. |
| 10 `XAnnotation` companion classes: `ContentAnnotation`,
`FormDataAnnotation`, `HasFormDataAnnotation`, `HasQueryAnnotation`,
`HeaderAnnotation`, `PathAnnotation`, `PathRemainderAnnotation`,
`QueryAnnotation`, `RequestAnnotation`, `StatusCodeAnnotation` | Removed (used
by the deleted `@ContextApply` plumbing) | Hard removal. `ContactAnnotation`,
`LicenseAnnotation`, `TagAnnotation`, and `ResponseAnnotation` remain (still
consumed by Swagger generation utilities). |
-| `org.apache.juneau.ng.http.remote.Body` / `Header` / `Path` / `Query` *(9.5
early snapshot only)* | `@org.apache.juneau.http.annotation.Content` / `Header`
/ `Path` / `Query` | The NG duplicate annotations were deleted; the canonical
`RestClient` (formerly `NgRestClient`) uses the standard annotations. |
+| `org.apache.juneau.ng.http.remote.Body` / `Header` / `Path` / `Query`
*(early snapshot only)* | `@org.apache.juneau.http.annotation.Content` /
`Header` / `Path` / `Query` | The NG duplicate annotations were deleted; the
canonical `RestClient` (formerly `NgRestClient`) uses the standard annotations.
|
## Request Attributes vs Session Properties Separation
@@ -590,7 +647,7 @@ Request attributes and parser / serializer session
properties are now completely
## REST Session-Option Allowlist Refactor
-The standalone session-option allowlist machinery has been replaced by a
`noInherit` attribute on the existing `@Rest` / `@RestOp` group of annotations.
Programmatic `RestContext.Builder` / `RestOpContext.Builder` allowlist setters
are gone (the builders themselves are gone — see the top of this file).
+The standalone session-option allowlist machinery has been replaced by a
`noInherit` attribute on the existing `@Rest` / `@RestOp` group of annotations.
Programmatic `RestContext.Builder` / `RestOpContext.Builder` allowlist setters
are gone (the builders themselves are gone — see the REST Configuration section
above).
| Old | New | Notes |
|-----|-----|-------|
@@ -676,7 +733,7 @@ The previous `juneau-all` Maven module has been **removed**
in favor of `juneau-
## OpenAPI 3.1 Emission + API-docs Mixin Pack (TODO-63 + TODO-74)
-OpenAPI 3.1 emission is new in 9.5; existing Swagger v2 emission is unchanged.
Composition is done by listing api-docs mixins in `@Rest(mixins=...)` rather
than via a string knob — the `apiFormat` annotation member, system property,
and `RestContext.getApiFormat()` accessor that briefly existed during the 9.5
development cycle were removed before release in favor of compose-by-class.
+OpenAPI 3.1 emission is new in v10.0; existing Swagger v2 emission is
unchanged. Composition is done by listing api-docs mixins in
`@Rest(mixins=...)` rather than via a string knob — the `apiFormat` annotation
member, system property, and `RestContext.getApiFormat()` accessor that briefly
existed during the development cycle were removed before release in favor of
compose-by-class.
| Old | New | Notes |
|-----|-----|-------|
@@ -684,8 +741,3 @@ OpenAPI 3.1 emission is new in 9.5; existing Swagger v2
emission is unchanged. C
| `BasicRestOperations.getSwagger(RestRequest)` and `getOpenApi(RestRequest)`
interface methods | Removed. The endpoints are now mounted via the api-docs
mixin pack on `BasicRestServlet` / `BasicRestObject`. User-written
`BasicRestOperations` implementers should remove their old `getSwagger` /
`getOpenApi` overrides — the methods are no longer on the interface. | If you
need a different api-docs surface, add `@Rest(noInherit={"mixins"},
mixins=...)` on your subclass. |
| `BasicGroupOperations.getChildrenSwagger(RestRequest)` /
`getChildrenOpenApi(RestRequest)` (the `?Swagger` / `?OpenApi` query mirrors on
group resources) and the `HasSwaggerQueryParam` / `HasOpenApiQueryParam`
matcher inner classes | Removed. Hit `/api`, `/swagger`, `/openapi`, or
`/redoc` directly — they are always mounted on `BasicRestServletGroup` /
`BasicRestObjectGroup` via the api-docs mixin pack. | External docs that linked
to `/?Swagger=true` need updating to `/api` (or `/swagger`). |
| `RestRequest.getSwagger()` was the only way to ask the server for its
self-described API. | `RestRequest.getOpenApi()` provides the OpenAPI 3.1
sibling. `RestContext.getOpenApi(Locale)` and
`RestContext.getOpenApiProvider()` mirror the Swagger getters. | The OpenAPI
3.1 document is generated by transforming the Swagger 2.0 emission to OpenAPI
3.1 JSON, so every Swagger-aware annotation (`@Schema`, `@Content`,
`@StatusCode`, etc.) round-trips with no source changes. |
-
-Reference: see the per-module section in the 9.5 release notes (`###
juneau-rest-server` → `OpenAPI 3.1 Emission + API-docs Mixin Pack (TODO-63 +
TODO-74)`).
-
-<!-- Migration guide complete for the 9.1 → 9.5 jump. Add new entries here as
further 9.5.x
-or 9.6 breaking changes land. -->
diff --git a/sidebars.ts b/sidebars.ts
index 13bd1039d4..6c4b8816e0 100644
--- a/sidebars.ts
+++ b/sidebars.ts
@@ -2148,21 +2148,21 @@ const sidebars: SidebarsConfig = {
},
],
},
+ {
+ type: 'category',
+ label: '23. V10.0 Migration Guide',
+ collapsed: true,
+ items: [
{
- type: 'category',
- label: '23. V9.5 Migration Guide',
- collapsed: true,
- items: [
- {
- type: 'doc',
- id:
'topics/23.01.V9.5-migration-guide',
- label: '23.1. V9.5
Migration Guide',
- },
- ],
+ type: 'doc',
+ id:
'topics/24.01.V10.0-migration-guide',
+ label: '23.1. V10.0 Migration Guide',
},
],
},
- // Developer Info section
+ ],
+ },
+ // Developer Info section
{
type: 'category',
label: 'Developer Info',