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`** &mdash; 
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`** &mdash; 
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`** &mdash; `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`** &mdash; Enum of supported 
HTTP bindings (`POST`, `REDIRECT`). Artifact + SOAP bindings deferred to a 
future iteration.
 - **`org.apache.juneau.rest.auth.saml.SamlMetadataResolvers`** &mdash; 
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` &mdash; 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` &mdash; 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.

Reply via email to