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 1c84283bfd Add resource-level RestAuthenticator; SonarQube, regex, and
TestUtils cleanup
1c84283bfd is described below
commit 1c84283bfdbac1caf506368aa07a8d60cf93caf4
Author: James Bognar <[email protected]>
AuthorDate: Tue Jun 30 21:48:42 2026 -0400
Add resource-level RestAuthenticator; SonarQube, regex, and TestUtils
cleanup
- Add RestAuthenticator SPI and @Rest(authenticator) with AuthResult merge
modes (ADD/REPLACE), docs, and full test coverage.
- Consolidate duplicated TestUtils helpers into a shared XmlTestUtils and
remove dead helper methods across modules.
- Fix or suppress a large batch of SonarQube issues across core, rest,
microservice, and bean modules.
- Replace backtracking regexes with linear state machines in Iso8601Utils
(parseDuration/parsePeriod), HttpPartSchema validators, DurationFormat, and
Hjson/Hocon/Ini number parsing; cache compiled SVL Patterns.
- Fix MockRestClient default parser gap, EphemeralJettyServerConfig stop
timeout, and update perf baselines.
- Documentation cleanup (Marshalling overview, SVL variables, sidebar
ordering).
---
pages/release-notes/9.5.0.md | 12 ++++++------
pages/topics/02.11.02.DefaultSwaps.md | 4 ++--
pages/topics/02.11.05.OneWaySwaps.md | 2 +-
pages/topics/02.22.06.ValueAnnotationBasics.md | 2 +-
pages/topics/02.35.01.YamlBasics.md | 2 +-
pages/topics/03.02.RdfBasics.md | 2 +-
pages/topics/10.21.StaticFilesMixin.md | 2 +-
pages/topics/10.24.JspViewSupport.md | 2 +-
pages/topics/10.25.ThymeleafViewSupport.md | 2 +-
pages/topics/10.26.MustacheViewSupport.md | 2 +-
pages/topics/10.27.FreemarkerViewSupport.md | 2 +-
pages/topics/10.43.SamlAuthSupport.md | 2 +-
pages/topics/10.44.OAuthAuthSupport.md | 2 +-
pages/topics/15.01.JuneauMicroserviceBasics.md | 2 +-
14 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/pages/release-notes/9.5.0.md b/pages/release-notes/9.5.0.md
index 6d89f20fd5..1d664b3f6e 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
-[v10.0 Migration Guide](/docs/topics/V10.0-migration-guide) for the full
breakdown and the
+[v10.0 Migration Guide](/docs/topics/V10MigrationGuide) 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 [v10.0 Migration
Guide](/docs/topics/V10.0-migration-guide) for the import update.
+in this file and the [v10.0 Migration Guide](/docs/topics/V10MigrationGuide)
for the import update.
##### Migration
@@ -3054,7 +3054,7 @@ elements can resolve through).
> `Environment` under Spring Boot via a Juneau-`Config`-to-`Environment`
> bridge — no API change
> here, just an additional resolution source registered with the `Config` bean.
-See [REST Server — Mixins and Multi-Mount Paths § Runtime-overridable
paths](/docs/topics/RestServerCompositionMixinsAndPaths#runtime-overridable-paths-since-950)
+See [REST Server — Mixins and Multi-Mount Paths § Runtime-overridable
paths](/docs/topics/RestServerCompositionMixinsAndPaths#runtime-overridable-paths)
for the full reference, including the precedence table, worked examples for
each rung, the
Spring Boot integration walkthrough, and the `null`-vs-empty-array semantic
table.
@@ -3362,7 +3362,7 @@ method on the host, leave the rest unmounted.
(`Runtime` + `MemoryMXBean` stats), `POST /admin/cache/flush` (run
registered hooks),
and `/admin/ratelimit` (registered `RateLimitGuard` beans — both static
configuration and
live per-key bucket snapshot; see the
- [`RateLimitGuard.Storage.snapshot()` SPI
extension](#ratelimitguardstorage-snapshot-spi--basicadminresource-enrichment-work-item-89)
+ [`RateLimitGuard.Storage.snapshot()` SPI
extension](#ratelimitguardstoragesnapshot-spi--basicadminresource-enrichment-work-item-89)
below). Default-deny via the new `org.apache.juneau.rest.guard.DenyAllGuard`
until the host
registers a `@Bean RestGuardList` factory; the framework's bean-store
override seam
**replaces** the entire annotation-derived guard list (including the
deny-all) with the
@@ -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 [V10.0 Migration Guide](/docs/topics/V10.0-migration-guide) for a
per-setting replacement table.
+See the [V10.0 Migration Guide](/docs/topics/V10MigrationGuide) for a
per-setting replacement table.
#### Bean precedence: Spring > `@Bean` (inject) > default (breaking)
@@ -4599,7 +4599,7 @@ A new opt-in REST module, `juneau-rest-server-auth-saml`,
adds SAML 2.0 single-s
#### New Classes
-- **`org.apache.juneau.rest.auth.saml.SamlAssertionValidator`** —
Validates a SAML 2.0 `<samlp:Response>` document and returns a
[`ClaimsPrincipal`](/docs/topics/AuthGuards) marked with `issuerType=SAML`.
Builder: `spEntityId(String)`, `expectedIssuer(String)`,
`metadataResolver(MetadataResolver)` or `signingCredential(Credential)`
(mutually exclusive), `decryptionCredential(Credential)` (opt-in for encrypted
assertions), `algorithms(String...)` (default `[rsa-sha256, ecdsa-sha256] [...]
+- **`org.apache.juneau.rest.auth.saml.SamlAssertionValidator`** —
Validates a SAML 2.0 `<samlp:Response>` document and returns a
[`ClaimsPrincipal`](/docs/topics/RestServerAuthGuards) marked with
`issuerType=SAML`. Builder: `spEntityId(String)`, `expectedIssuer(String)`,
`metadataResolver(MetadataResolver)` or `signingCredential(Credential)`
(mutually exclusive), `decryptionCredential(Credential)` (opt-in for encrypted
assertions), `algorithms(String...)` (default `[rsa-sha256, ecd [...]
- **`org.apache.juneau.rest.auth.saml.SamlAuthFilter`** — `AuthFilter`
that decodes the inbound `SAMLResponse` (base64 + DEFLATE for the Redirect
binding) at a configurable consumer path and delegates validation. Builder:
`validator(SamlAssertionValidator)`, `binding(SamlBinding)` (default `POST`),
`consumerPath(String)` (default `/saml/acs`), `rolesClaim(String)` (default
`"roles"`), `realm(String)` (default `"saml"`).
- **`org.apache.juneau.rest.auth.saml.SamlBinding`** — Enum of supported
HTTP bindings (`POST`, `REDIRECT`). Artifact + SOAP bindings deferred to a
future iteration.
- **`org.apache.juneau.rest.auth.saml.SamlMetadataResolvers`** —
Convenience factories `file(File|Path)` and `url(String)` that produce
initialized `MetadataResolver` instances ready to hand to
`SamlAssertionValidator.Builder.metadataResolver(...)`. No bundled default
singleton.
diff --git a/pages/topics/02.11.02.DefaultSwaps.md
b/pages/topics/02.11.02.DefaultSwaps.md
index f2e68bc3af..f2f117048d 100644
--- a/pages/topics/02.11.02.DefaultSwaps.md
+++ b/pages/topics/02.11.02.DefaultSwaps.md
@@ -8,7 +8,7 @@ By default, all serializers and parsers have built in
`ObjectSwaps` defined for
:::note
As of 9.5.0, `Iterator`, `Iterable`, `Stream`, and `Enumeration` types are
serialized natively without swaps.
The `IteratorSwap` and `EnumerationSwap` classes have been removed.
-See [Release 9.5.0](/release-notes/9.5.0) for details.
+See [Release 9.5.0](/docs/release-notes/9.5.0) for details.
:::
:::note
@@ -17,7 +17,7 @@ serialized and parsed natively as ISO 8601 strings without
swaps. The default sw
have been removed from this list. The swap classes themselves
(`TemporalCalendarSwap`, `TemporalDateSwap`,
`CalendarSwap`, `DateSwap`, `TemporalSwap`) remain available as **override
mechanisms** for customizing the
output format (e.g. RFC 1123 instead of ISO 8601).
-See [Release 9.5.0](/release-notes/9.5.0) for details.
+See [Release 9.5.0](/docs/release-notes/9.5.0) for details.
:::
<tree>
diff --git a/pages/topics/02.11.05.OneWaySwaps.md
b/pages/topics/02.11.05.OneWaySwaps.md
index c52ab7b8b3..5f19a5b064 100644
--- a/pages/topics/02.11.05.OneWaySwaps.md
+++ b/pages/topics/02.11.05.OneWaySwaps.md
@@ -15,7 +15,7 @@ The `unswap()` method is simply left unimplemented.
:::note
As of 9.5.0, `Iterator`, `Iterable`, `Stream`, and `Enumeration` types are
serialized natively by all serializers
without needing any swap. The `IteratorSwap` and `EnumerationSwap` classes
have been removed.
-See [Release 9.5.0](/release-notes/9.5.0) for details.
+See [Release 9.5.0](/docs/release-notes/9.5.0) for details.
:::
An example of a one-way swap would be one that converts a `Thread` to a simple
map containing its name and state.
diff --git a/pages/topics/02.22.06.ValueAnnotationBasics.md
b/pages/topics/02.22.06.ValueAnnotationBasics.md
index 6e6ddc951d..74479b5bb7 100644
--- a/pages/topics/02.22.06.ValueAnnotationBasics.md
+++ b/pages/topics/02.22.06.ValueAnnotationBasics.md
@@ -163,7 +163,7 @@ Supplier<String> cachePolicy;
```
See [Simple Variable Language Basics — `Supplier<String>` field-type
-semantics](/docs/topics/SimpleVariableLanguageBasics#suppliersstring-field-type-semantics)
for
+semantics](/docs/topics/SimpleVariableLanguageBasics#supplierstring-field-type-semantics)
for
the canonical decision table and stable-folding interaction.
## Spring `@Value` compatibility
diff --git a/pages/topics/02.35.01.YamlBasics.md
b/pages/topics/02.35.01.YamlBasics.md
index c67f6df00d..5d0acd00bf 100644
--- a/pages/topics/02.35.01.YamlBasics.md
+++ b/pages/topics/02.35.01.YamlBasics.md
@@ -120,6 +120,6 @@ public class MyResource extends RestServlet implements
BasicUniversalConfig { ..
- [YAML Methodology](/docs/topics/YamlMethodology) for data type conversion
details.
- [YAML Serializers](/docs/topics/YamlSerializers) for serializer
configuration.
- [YAML Parsers](/docs/topics/YamlParsers) for parser configuration.
-- [@YamlConfig Annotation](/docs/topics/YamlAnnotation) for REST integration
details.
+- [@YamlConfig Annotation](/docs/topics/YamlConfigAnnotation) for REST
integration details.
:::
diff --git a/pages/topics/03.02.RdfBasics.md b/pages/topics/03.02.RdfBasics.md
index 6e00afb765..54ccf042a8 100644
--- a/pages/topics/03.02.RdfBasics.md
+++ b/pages/topics/03.02.RdfBasics.md
@@ -123,6 +123,6 @@ RDF/XML, RDF/THRIFT, RDF/PROTO, and other RDF formats are
included in the `Round
- [RDF Serializers](/docs/topics/RdfSerializers) for serializer configuration
and options.
- [RDF Parsers](/docs/topics/RdfParsers) for parser configuration and options.
-- [juneau-marshall-rdf Module](/docs/topics/Module-juneau-marshall-rdf) for
module overview and Maven setup.
+- [juneau-marshall-rdf Module](/docs/topics/JuneauMarshallRdfOverview) for
module overview and Maven setup.
:::
diff --git a/pages/topics/10.21.StaticFilesMixin.md
b/pages/topics/10.21.StaticFilesMixin.md
index c5907e7e3d..5f16ed302b 100644
--- a/pages/topics/10.21.StaticFilesMixin.md
+++ b/pages/topics/10.21.StaticFilesMixin.md
@@ -216,7 +216,7 @@ The mixin combines two layers of routing:
1. **Container-level mount.** `@Rest(paths = {"/static/*","/htdocs/*"})`
declares which URLs the
servlet container should dispatch to the `BasicStaticFilesResource`
instance. This rung
- participates in the [runtime-override paths chain
(TODO-73)](/docs/topics/RestServerCompositionMixinsAndPaths#runtime-overridable-paths-since-950)
+ participates in the [runtime-override paths chain
(TODO-73)](/docs/topics/RestServerCompositionMixinsAndPaths#runtime-overridable-paths)
so a subclass with `@Rest(paths = {"/assets/*"})` widens the container
mount to `/assets/*`.
2. **Inner `@RestGet` matcher.** `@RestGet(path = {"/static/*","/htdocs/*"})`
declares which
URL patterns route to the `getStaticFile(...)` Java handler *within* the
resource. This rung
diff --git a/pages/topics/10.24.JspViewSupport.md
b/pages/topics/10.24.JspViewSupport.md
index ed1c757d55..fd52055fec 100644
--- a/pages/topics/10.24.JspViewSupport.md
+++ b/pages/topics/10.24.JspViewSupport.md
@@ -256,7 +256,7 @@ Both subclasses mount independently and each resolves
templates against its own
## See also
-- [REST Server — Composition (mixins,
paths)](/docs/topics/RestServerComposition)
+- [REST Server — Composition (mixins,
paths)](/docs/topics/RestServerCompositionMixinsAndPaths)
- [REST Server — Static-Files Mixin](/docs/topics/StaticFilesMixin)
- [Thymeleaf View Support](/docs/topics/ThymeleafViewSupport) — sibling bridge
for Thymeleaf
- [Mustache View Support](/docs/topics/MustacheViewSupport) — sibling bridge
for Mustache
diff --git a/pages/topics/10.25.ThymeleafViewSupport.md
b/pages/topics/10.25.ThymeleafViewSupport.md
index e6a742a16d..12e3b40cfb 100644
--- a/pages/topics/10.25.ThymeleafViewSupport.md
+++ b/pages/topics/10.25.ThymeleafViewSupport.md
@@ -257,7 +257,7 @@ Both subclasses mount independently and each resolves
templates against its own
## See also
-- [REST Server — Composition (mixins,
paths)](/docs/topics/RestServerComposition)
+- [REST Server — Composition (mixins,
paths)](/docs/topics/RestServerCompositionMixinsAndPaths)
- [JSP View Support](/docs/topics/JspViewSupport) — sibling bridge for
JSP-based apps
- [Mustache View Support](/docs/topics/MustacheViewSupport) — sibling bridge
for Mustache
- [FreeMarker View Support](/docs/topics/FreemarkerViewSupport) — sibling
bridge for FreeMarker
diff --git a/pages/topics/10.26.MustacheViewSupport.md
b/pages/topics/10.26.MustacheViewSupport.md
index a6a024a755..4e2a6d25f9 100644
--- a/pages/topics/10.26.MustacheViewSupport.md
+++ b/pages/topics/10.26.MustacheViewSupport.md
@@ -268,7 +268,7 @@ Both subclasses mount independently and each resolves
templates against its own
## See also
-- [REST Server — Composition (mixins,
paths)](/docs/topics/RestServerComposition)
+- [REST Server — Composition (mixins,
paths)](/docs/topics/RestServerCompositionMixinsAndPaths)
- [JSP View Support](/docs/topics/JspViewSupport) — sibling bridge for
JSP-based apps
- [Thymeleaf View Support](/docs/topics/ThymeleafViewSupport) — sibling bridge
for Thymeleaf
- [FreeMarker View Support](/docs/topics/FreemarkerViewSupport) — sibling
bridge for FreeMarker
diff --git a/pages/topics/10.27.FreemarkerViewSupport.md
b/pages/topics/10.27.FreemarkerViewSupport.md
index b425865a4b..1e64b2cc71 100644
--- a/pages/topics/10.27.FreemarkerViewSupport.md
+++ b/pages/topics/10.27.FreemarkerViewSupport.md
@@ -308,7 +308,7 @@ Both subclasses mount independently and each resolves
templates against its own
## See also
-- [REST Server — Composition (mixins,
paths)](/docs/topics/RestServerComposition)
+- [REST Server — Composition (mixins,
paths)](/docs/topics/RestServerCompositionMixinsAndPaths)
- [JSP View Support](/docs/topics/JspViewSupport) — sibling bridge for
JSP-based apps
- [Thymeleaf View Support](/docs/topics/ThymeleafViewSupport) — sibling bridge
for Thymeleaf
- [Mustache View Support](/docs/topics/MustacheViewSupport) — sibling bridge
for Mustache
diff --git a/pages/topics/10.43.SamlAuthSupport.md
b/pages/topics/10.43.SamlAuthSupport.md
index 71f2162496..64b9d822b6 100644
--- a/pages/topics/10.43.SamlAuthSupport.md
+++ b/pages/topics/10.43.SamlAuthSupport.md
@@ -3,7 +3,7 @@ title: "SAML 2.0 AuthN Support (juneau-rest-server-auth-saml)"
slug: SamlAuthSupport
---
-The opt-in `juneau-rest-server-auth-saml` module adds SAML 2.0 single-sign-on
(Web Browser SSO Profile) to `juneau-rest-server` by wrapping [OpenSAML
5.x](https://shibboleth.atlassian.net/wiki/spaces/OS30) behind the
[AuthFilter](/docs/topics/AuthFilterFramework) /
[TokenValidator](/docs/topics/AuthGuards) SPIs that ship in
`juneau-rest-server`.
+The opt-in `juneau-rest-server-auth-saml` module adds SAML 2.0 single-sign-on
(Web Browser SSO Profile) to `juneau-rest-server` by wrapping [OpenSAML
5.x](https://shibboleth.atlassian.net/wiki/spaces/OS30) behind the
[AuthFilter](/docs/topics/AuthFilterFramework) /
[TokenValidator](/docs/topics/RestServerAuthGuards) SPIs that ship in
`juneau-rest-server`.
OpenSAML is an Apache 2.0-licensed library maintained by
[Shibboleth](https://shibboleth.atlassian.net/). It is declared in `provided`
scope on the module's POM so the dependency does **not** bleed into
`juneau-rest-server` — consumers explicitly pick the OpenSAML 5.x patch
they want (default pin: `5.2.2`).
diff --git a/pages/topics/10.44.OAuthAuthSupport.md
b/pages/topics/10.44.OAuthAuthSupport.md
index a8c7416b08..1759b6d96a 100644
--- a/pages/topics/10.44.OAuthAuthSupport.md
+++ b/pages/topics/10.44.OAuthAuthSupport.md
@@ -3,7 +3,7 @@ title: "OAuth 2.0 / OIDC AuthN Support
(juneau-rest-server-auth-oauth)"
slug: OAuthAuthSupport
---
-The opt-in `juneau-rest-server-auth-oauth` module adds OAuth 2.0 + OIDC
bearer-token validation, RFC 7662 token introspection, RFC 6749 client-side
grant flows, and OIDC discovery to `juneau-rest-server` by wrapping the [Nimbus
OAuth 2.0 SDK](https://connect2id.com/products/nimbus-oauth-openid-connect-sdk)
(`com.nimbusds:oauth2-oidc-sdk`) behind the
[AuthFilter](/docs/topics/AuthFilterFramework) /
[TokenValidator](/docs/topics/AuthGuards) SPIs.
+The opt-in `juneau-rest-server-auth-oauth` module adds OAuth 2.0 + OIDC
bearer-token validation, RFC 7662 token introspection, RFC 6749 client-side
grant flows, and OIDC discovery to `juneau-rest-server` by wrapping the [Nimbus
OAuth 2.0 SDK](https://connect2id.com/products/nimbus-oauth-openid-connect-sdk)
(`com.nimbusds:oauth2-oidc-sdk`) behind the
[AuthFilter](/docs/topics/AuthFilterFramework) /
[TokenValidator](/docs/topics/RestServerAuthGuards) SPIs.
The Nimbus SDK is Apache 2.0-licensed and is from the same vendor as the
`nimbus-jose-jwt` already used by
[juneau-rest-server-auth-jwt](/docs/topics/RestServerAuthGuards). It is
declared in `provided` scope on the module's POM so the dependency does **not**
bleed into `juneau-rest-server` — consumers explicitly pick the SDK
version they want (default pin: `11.37.2`).
diff --git a/pages/topics/15.01.JuneauMicroserviceBasics.md
b/pages/topics/15.01.JuneauMicroserviceBasics.md
index c2f4092e09..db1c1863de 100644
--- a/pages/topics/15.01.JuneauMicroserviceBasics.md
+++ b/pages/topics/15.01.JuneauMicroserviceBasics.md
@@ -40,5 +40,5 @@ Features include:
#### Module Name (Renamed in 9.5)
In 9.5 this module was renamed from `juneau-microservice-core` to
`juneau-microservice`. The Java package
-(`org.apache.juneau.microservice`) is unchanged. See the [V9.5 Migration
Guide](V9.5-migration-guide) for the
+(`org.apache.juneau.microservice`) is unchanged. See the [V9.5 Migration
Guide](/docs/release-notes/9.5.0) for the
exact dependency update.