This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new d2a03b149 Update docs.
d2a03b149 is described below
commit d2a03b149e8ffedcde75afbed97342e6d28752a2
Author: James Bognar <[email protected]>
AuthorDate: Sun Sep 28 12:07:18 2025 -0400
Update docs.
---
README.md | 149 ++++-
.../topics/01.01.00.JuneauEcosystemOverview.md | 5 +-
.../docs/topics/07.01.00.JuneauBctBasics.md | 705 +++++++++++++++++++++
...asics.md => 08.01.00.JuneauRestCommonBasics.md} | 0
....HelperClasses.md => 08.02.00.HelperClasses.md} | 0
...3.00.Annotations.md => 08.03.00.Annotations.md} | 0
...4.00.HttpHeaders.md => 08.04.00.HttpHeaders.md} | 0
...07.05.00.HttpParts.md => 08.05.00.HttpParts.md} | 0
...ces.md => 08.06.00.HttpEntitiesAndResources.md} | 0
....HttpResponses.md => 08.07.00.HttpResponses.md} | 0
...rfaces.md => 08.08.00.RemoteProxyInterfaces.md} | 0
...asics.md => 09.01.00.JuneauRestServerBasics.md} | 0
...rOverview.md => 09.02.00.RestServerOverview.md} | 0
...ics.md => 09.03.01.RestAnnotatedClassBasics.md} | 0
...nedClasses.md => 09.03.02.PredefinedClasses.md} | 0
...hildResources.md => 09.03.03.ChildResources.md} | 0
....PathVariables.md => 09.03.04.PathVariables.md} | 0
....03.05.Deployment.md => 09.03.05.Deployment.md} | 0
...ifecycleHooks.md => 09.03.06.LifecycleHooks.md} | 0
....md => 09.04.01.RestOpAnnotatedMethodBasics.md} | 0
....md => 09.04.02.InferredHttpMethodsAndPaths.md} | 0
...ameters.md => 09.04.03.JavaMethodParameters.md} | 0
...nTypes.md => 09.04.04.JavaMethodReturnTypes.md} | 0
...pes.md => 09.04.05.JavaMethodThrowableTypes.md} | 0
...06.PathPatterns.md => 09.04.06.PathPatterns.md} | 0
.../{08.04.07.Matchers.md => 09.04.07.Matchers.md} | 0
...thods.md => 09.04.08.OverloadingHttpMethods.md} | 0
...mation.md => 09.04.09.AdditionalInformation.md} | 0
...ttpPartBasics.md => 09.05.01.HttpPartBasics.md} | 0
...tMarshallers.md => 09.05.02.PartMarshallers.md} | 0
...otations.md => 09.05.03.HttpPartAnnotations.md} | 0
...04.DefaultParts.md => 09.05.04.DefaultParts.md} | 0
...05.RequestBeans.md => 09.05.05.RequestBeans.md} | 0
....ResponseBeans.md => 09.05.06.ResponseBeans.md} | 0
...07.HttpPartApis.md => 09.05.07.HttpPartApis.md} | 0
...6.00.Marshalling.md => 09.06.00.Marshalling.md} | 0
...gFormPosts.md => 09.07.00.HandlingFormPosts.md} | 0
.../{08.08.00.Guards.md => 09.08.00.Guards.md} | 0
....09.00.Converters.md => 09.09.00.Converters.md} | 0
...edMessages.md => 09.10.00.LocalizedMessages.md} | 0
.../{08.11.00.Encoders.md => 09.11.00.Encoders.md} | 0
...tionFiles.md => 09.12.00.ConfigurationFiles.md} | 0
...00.SvlVariables.md => 09.13.00.SvlVariables.md} | 0
...4.00.StaticFiles.md => 09.14.00.StaticFiles.md} | 0
...tVersioning.md => 09.15.00.ClientVersioning.md} | 0
....SwaggerBasics.md => 09.16.01.SwaggerBasics.md} | 0
...gger.md => 09.16.02.BasicRestServletSwagger.md} | 0
...SwaggerInfo.md => 09.16.03.BasicSwaggerInfo.md} | 0
...6.04.SwaggerTags.md => 09.16.04.SwaggerTags.md} | 0
...Operations.md => 09.16.05.SwaggerOperations.md} | 0
...Parameters.md => 09.16.06.SwaggerParameters.md} | 0
...erResponses.md => 09.16.07.SwaggerResponses.md} | 0
....SwaggerModels.md => 09.16.08.SwaggerModels.md} | 0
...Stylesheet.md => 09.16.09.SwaggerStylesheet.md} | 0
...atistics.md => 09.17.00.ExecutionStatistics.md} | 0
...d => 09.18.01.HtmlDocConfigAnnotationBasics.md} | 0
....18.02.HtmlUIvsDI.md => 09.18.02.HtmlUIvsDI.md} | 0
...8.03.HtmlWidgets.md => 09.18.03.HtmlWidgets.md} | 0
...idgets.md => 09.18.04.HtmlPredefinedWidgets.md} | 0
...mization.md => 09.18.05.HtmlUiCustomization.md} | 0
...lStylesheets.md => 09.18.06.HtmlStylesheets.md} | 0
...ebugging.md => 09.19.00.LoggingAndDebugging.md} | 0
...pStatusCodes.md => 09.20.00.HttpStatusCodes.md} | 0
...Parameters.md => 09.21.00.BuiltInParameters.md} | 0
....UsingWithOsgi.md => 09.22.00.UsingWithOsgi.md} | 0
...3.00.RestContext.md => 09.23.00.RestContext.md} | 0
....RestOpContext.md => 09.24.00.RestOpContext.md} | 0
...rocessors.md => 09.25.00.ResponseProcessors.md} | 0
.../{08.26.00.RestRpc.md => 09.26.00.RestRpc.md} | 0
...ializingUris.md => 09.27.00.SerializingUris.md} | 0
...00.UtilityBeans.md => 09.28.00.UtilityBeans.md} | 0
...08.29.00.HtmlBeans.md => 09.29.00.HtmlBeans.md} | 0
....30.00.OtherNotes.md => 09.30.00.OtherNotes.md} | 0
.../{08.31.00.Log4j.md => 09.31.00.Log4j.md} | 0
...> 10.01.00.JuneauRestServerSpringbootBasics.md} | 0
...tOverview.md => 10.02.00.SpringBootOverview.md} | 0
...asics.md => 11.01.00.JuneauRestClientBasics.md} | 0
...oMarshalling.md => 11.02.00.PojoMarshalling.md} | 0
...00.RequestParts.md => 11.03.00.RequestParts.md} | 0
...equestContent.md => 11.04.00.RequestContent.md} | 0
...esponseStatus.md => 11.05.00.ResponseStatus.md} | 0
...ponseHeaders.md => 11.06.00.ResponseHeaders.md} | 0
...ponseContent.md => 11.07.00.ResponseContent.md} | 0
...lHandlers.md => 11.08.00.CustomCallHandlers.md} | 0
...00.Interceptors.md => 11.09.00.Interceptors.md} | 0
...tProxyBasics.md => 11.10.01.RestProxyBasics.md} | 0
.../{10.10.02.Remote.md => 11.10.02.Remote.md} | 0
...03.RemoteMethod.md => 11.10.03.RemoteMethod.md} | 0
.../{10.10.04.Content.md => 11.10.04.Content.md} | 0
.../{10.10.05.FormData.md => 11.10.05.FormData.md} | 0
.../{10.10.06.Query.md => 11.10.06.Query.md} | 0
.../{10.10.07.Header.md => 11.10.07.Header.md} | 0
.../topics/{10.10.08.Path.md => 11.10.08.Path.md} | 0
.../{10.10.09.Request.md => 11.10.09.Request.md} | 0
.../{10.10.10.Response.md => 11.10.10.Response.md} | 0
...rfaces.md => 11.10.11.DualPurposeInterfaces.md} | 0
...ebugging.md => 11.11.00.LoggingAndDebugging.md} | 0
...Client.md => 11.12.00.CustomizingHttpClient.md} | 0
...stClient.md => 11.13.00.ExtendingRestClient.md} | 0
...nBasics.md => 11.14.01.AuthenticationBasics.md} | 0
...ionBASIC.md => 11.14.02.AuthenticationBASIC.md} | 0
...ationForm.md => 11.14.03.AuthenticationForm.md} | 0
...ationOIDC.md => 11.14.04.AuthenticationOIDC.md} | 0
...kBasics.md => 12.01.00.JuneauRestMockBasics.md} | 0
...rview.md => 12.02.00.MockRestClientOverview.md} | 0
...md => 13.01.00.JuneauMicroserviceCoreBasics.md} | 0
...iew.md => 13.02.00.MicroserviceCoreOverview.md} | 0
.../docs/topics/13.03.00.LifecycleMethods.md | 89 ---
.../topics/{12.04.00.Args.md => 13.04.00.Args.md} | 0
.../{12.05.00.Manifest.md => 13.05.00.Manifest.md} | 0
juneau-docs/docs/topics/13.06.00.Config.md | 184 ------
...mProperties.md => 13.07.00.SystemProperties.md} | 0
...8.00.VarResolver.md => 13.08.00.VarResolver.md} | 0
...soleCommands.md => 13.09.00.ConsoleCommands.md} | 0
...12.10.00.Listeners.md => 13.10.00.Listeners.md} | 0
...d => 14.01.00.JuneauMicroserviceJettyBasics.md} | 0
...ew.md => 14.02.00.MicroserviceJettyOverview.md} | 0
...ycleMethods.md => 14.03.00.LifecycleMethods.md} | 0
...ourceClasses.md => 14.04.00.ResourceClasses.md} | 0
...es.md => 14.05.00.PredefinedResourceClasses.md} | 0
.../{12.06.00.Config.md => 14.06.00.Config.md} | 0
.../{13.07.00.JettyXml.md => 14.07.00.JettyXml.md} | 0
...ustomization.md => 14.08.00.UiCustomization.md} | 0
...13.09.00.Extending.md => 14.09.00.Extending.md} | 0
...cs.md => 15.01.00.MyJettyMicroserviceBasics.md} | 0
...d => 15.02.00.MyJettyMicroserviceInstalling.md} | 0
...g.md => 15.03.00.MyJettyMicroserviceRunning.md} | 0
....md => 15.04.00.MyJettyMicroserviceBuilding.md} | 0
... => 16.01.00.MySpringBootMicroserviceBasics.md} | 0
...16.02.00.MySpringBootMicroserviceInstalling.md} | 0
...=> 16.03.00.MySpringBootMicroserviceRunning.md} | 0
...> 16.04.00.MySpringBootMicroserviceBuilding.md} | 0
...eBasics.md => 17.01.00.JuneauPetstoreBasics.md} | 0
...unning.md => 17.02.00.JuneauPetstoreRunning.md} | 0
...etstoreApi.md => 17.03.00.JuneauPetstoreApi.md} | 0
...eClient.md => 17.04.00.JuneauPetstoreClient.md} | 0
...eServer.md => 17.05.00.JuneauPetstoreServer.md} | 0
...mplesCore.md => 18.01.00.JuneauExamplesCore.md} | 0
...mplesRest.md => 18.02.00.JuneauExamplesRest.md} | 0
...etty.md => 18.03.00.JuneauExamplesRestJetty.md} | 0
...md => 18.04.00.JuneauExamplesRestSpringboot.md} | 0
...ecurityBasics.md => 19.01.00.SecurityBasics.md} | 0
...Security.md => 19.02.00.MarshallingSecurity.md} | 0
...3.00.SvlSecurity.md => 19.03.00.SvlSecurity.md} | 0
...00.RestSecurity.md => 19.04.00.RestSecurity.md} | 0
...n-guide.md => 20.01.00.V9.0-migration-guide.md} | 0
juneau-docs/sidebars.ts | 622 +++++++++---------
147 files changed, 1157 insertions(+), 597 deletions(-)
diff --git a/README.md b/README.md
index 4d6d7d154..fa57a32ce 100644
--- a/README.md
+++ b/README.md
@@ -23,25 +23,25 @@
[](https://sonarcloud.io/summary/new_code?id=apache_juneau)
[](https://sonarcloud.io/summary/new_code?id=apache_juneau)
-## π Documentation & Resources
-
-### π Official Resources
-* **[π Homepage](https://juneau.staged.apache.org/)** - Official Apache Juneau
website
-* **[π Wiki](https://github.com/apache/juneau/wiki)** - Community
documentation and guides
-* **[π― Pet Store App](https://github.com/apache/juneau-petstore)** - Complete
example application
-
-### π Documentation
-* **[π Javadocs](https://juneau.staged.apache.org/site/apidocs/)** - Complete
API documentation
-* **[π User
Guide](https://juneau.staged.apache.org/docs/topics/JuneauEcosystemOverview)**
- Comprehensive framework documentation
-* **[βοΈ Framework
Comparisons](https://juneau.staged.apache.org/docs/topics/FrameworkComparisons)**
- Compare Juneau with Jackson, Spring Boot, and JAX-RS
-* **[π§
Examples](https://juneau.staged.apache.org/docs/topics/JuneauExamplesCore)** -
Code examples and tutorials
+## Documentation & Resources
+
+### Official Resources
+* **[Homepage](https://juneau.staged.apache.org/)** - Official Apache Juneau
website
+* **[Wiki](https://github.com/apache/juneau/wiki)** - Community documentation
and guides
+* **[Pet Store App](https://github.com/apache/juneau-petstore)** - Complete
example application
+
+### Documentation
+* **[Javadocs](https://juneau.staged.apache.org/site/apidocs/)** - Complete
API documentation
+* **[User
Guide](https://juneau.staged.apache.org/docs/topics/JuneauEcosystemOverview)**
- Comprehensive framework documentation
+* **[Framework
Comparisons](https://juneau.staged.apache.org/docs/topics/FrameworkComparisons)**
- Compare Juneau with Jackson, Spring Boot, and JAX-RS
+*
**[Examples](https://juneau.staged.apache.org/docs/topics/JuneauExamplesCore)**
- Code examples and tutorials
*
[juneau-examples-core](https://juneau.staged.apache.org/docs/topics/JuneauExamplesCore)
- Core serialization examples
*
[juneau-examples-rest](https://juneau.staged.apache.org/docs/topics/JuneauExamplesRest)
- REST API examples
*
[juneau-examples-rest-jetty](https://juneau.staged.apache.org/docs/topics/JuneauExamplesRestJetty)
- Jetty microservice examples
*
[juneau-examples-rest-springboot](https://juneau.staged.apache.org/docs/topics/JuneauExamplesRestSpringboot)
- Spring Boot examples
-* **[π Test Reports](https://juneau.staged.apache.org/site/surefire.html)** -
JUnit test execution results
-* **[π¦
Dependencies](https://juneau.staged.apache.org/site/dependency-info.html)** -
Project dependency analysis
-* **[π Project
Reports](https://juneau.staged.apache.org/site/project-reports.html)** -
Complete Maven site reports
+* **[Test Reports](https://juneau.staged.apache.org/site/surefire.html)** -
JUnit test execution results
+*
**[Dependencies](https://juneau.staged.apache.org/site/dependency-info.html)**
- Project dependency analysis
+* **[Project
Reports](https://juneau.staged.apache.org/site/project-reports.html)** -
Complete Maven site reports
> **Note:** The documentation is automatically updated and provides the most
> current project information.
@@ -56,9 +56,115 @@ Apache Juneauβ’ excels in the following scenarios:
* **Serverless unit testing of REST APIs** - Test REST services without
servlet containers using MockRestClient for fast, comprehensive testing
* **Microservice development** - Build lightweight microservices with embedded
Jetty or Spring Boot integration
* **Data transformation and mapping** - Convert between different data formats
and handle complex object hierarchies with swap mechanisms
-* **Fluent-style assertions and testing** - Write readable test assertions
with comprehensive validation capabilities
+* **Bean-Centric Testing and fluent-style assertions** - Write readable test
assertions with comprehensive validation capabilities using juneau-bct and
juneau-assertions
* **Content negotiation and HTTP/2 support** - Handle multiple content types
automatically with modern HTTP features
+## Getting Started in 5 Minutes
+
+### 1. Add Dependency
+
+```xml
+<dependency>
+ <groupId>org.apache.juneau</groupId>
+ <artifactId>juneau-all</artifactId>
+ <version>9.1.0</version>
+</dependency>
+```
+
+### 2. Serialize a POJO to JSON
+
+```java
+import org.apache.juneau.json.*;
+
+public class QuickStart {
+ public static void main(String[] args) {
+ // Create a simple POJO
+ Person person = new Person("John", 30);
+
+ // Serialize to JSON
+ String json = JsonSerializer.DEFAULT_READABLE.serialize(person);
+ System.out.println(json);
+ // Output: {"name":"John","age":30}
+ }
+
+ public static class Person {
+ public String name;
+ public int age;
+
+ public Person(String name, int age) {
+ this.name = name;
+ this.age = age;
+ }
+ }
+}
+```
+
+### 3. Parse JSON back to POJO
+
+```java
+// Parse JSON back to POJO
+Person parsed = JsonParser.DEFAULT.parse(json, Person.class);
+System.out.println(parsed.name); // Output: John
+```
+
+### 4. Create a REST API
+
+```java
+import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.servlet.*;
+
+@Rest(
+ title="Hello World API",
+ description="Simple REST API example"
+)
+public class HelloWorldResource extends BasicRestServlet {
+
+ @RestGet("/hello/{name}")
+ public String sayHello(@Path String name) {
+ return "Hello " + name + "!";
+ }
+
+ @RestGet("/person")
+ public Person getPerson() {
+ return new Person("Jane", 25);
+ }
+}
+```
+
+### 5. Test Your API
+
+```java
+import org.apache.juneau.rest.mock.*;
+
+public class ApiTest {
+ @Test
+ public void testHello() throws Exception {
+ String response = MockRestClient
+ .create(HelloWorldResource.class)
+ .json5()
+ .build()
+ .get("/hello/World")
+ .run()
+ .assertStatus().is(200)
+ .getContent().asString();
+
+ assertEquals("Hello World!", response);
+ }
+}
+```
+
+**That's it!** You now have:
+- JSON serialization/parsing
+- A working REST API with automatic content negotiation
+- Built-in testing support
+- Zero external dependencies
+
+### Next Steps
+- **Multi-format support**: Try XML, HTML, or other formats
+- **Configuration files**: Use `juneau-config` for INI-style configs
+- **Spring Boot integration**: Add `juneau-rest-server-springboot`
+- **Examples**: Check out our [comprehensive
examples](/docs/topics/JuneauExamplesCore)
+
## Description
Apache Juneauβ’ is a single cohesive Java ecosystem consisting of the following
parts:
@@ -67,9 +173,18 @@ Apache Juneauβ’ is a single cohesive Java ecosystem
consisting of the following
* **juneau-marshall-rdf** - Additional support for various RDF languages.
* **juneau-bean-atom, juneau-bean-common, juneau-bean-html5,
juneau-bean-jsonschema, juneau-bean-openapi3** - A variety of predefined
serializable beans such as HTML5, Swagger and ATOM.
* **juneau-config** - A sophisticated configuration file API.
+* **juneau-assertions** - Fluent-style assertions API.
+* **juneau-bct** - Bean-Centric Testing framework that extends JUnit with
streamlined assertion methods for Java objects.
* **juneau-rest-server** - A universal REST server API for creating
Swagger-based self-documenting REST interfaces using POJOs, simply deployed as
one or more top-level servlets in any Servlet 3.1.0+ container. Includes Spring
Boot and JAX-RS integration support.
* **juneau-rest-client** - A universal REST client API for interacting with
Juneau or 3rd-party REST interfaces using POJOs and proxy interfaces.
-* **juneau-rest-springboot** - Spring boot integration for
juneau-rest-servlet.
+* **juneau-rest-springboot** - Spring boot integration for juneau-rest-servlet.
+* **juneau-rest-mock** - REST testing API.
+* **juneau-microservice-core** - Core microservice API.
+* **juneau-microservice-jetty** - Jetty microservice API.
+* **juneau-examples-core** - Core code examples.
+* **juneau-examples-rest** - REST code examples.
+* **juneau-examples-rest-jetty** - Jetty microservice examples.
+* **juneau-examples-rest-springboot** - Spring Boot examples.
Questions via email to [email protected] are always welcome.
diff --git a/juneau-docs/docs/topics/01.01.00.JuneauEcosystemOverview.md
b/juneau-docs/docs/topics/01.01.00.JuneauEcosystemOverview.md
index 90a662c2b..24fbdc9bc 100644
--- a/juneau-docs/docs/topics/01.01.00.JuneauEcosystemOverview.md
+++ b/juneau-docs/docs/topics/01.01.00.JuneauEcosystemOverview.md
@@ -19,7 +19,7 @@ Juneau excels in the following scenarios:
* **Serverless unit testing of REST APIs** - Test REST services without
servlet containers using MockRestClient for fast, comprehensive testing
* **Microservice development** - Build lightweight microservices with embedded
Jetty or Spring Boot integration
* **Data transformation and mapping** - Convert between different data formats
and handle complex object hierarchies with swap mechanisms
-* **Fluent-style assertions and testing** - Write readable test assertions
with comprehensive validation capabilities
+* **Bean-Centric Testing and fluent-style assertions** - Write readable test
assertions with comprehensive validation capabilities using juneau-bct and
juneau-assertions
* **Content negotiation and HTTP/2 support** - Handle multiple content types
automatically with modern HTTP features
#### When to Choose Juneau
@@ -39,6 +39,7 @@ The Juneau ecosystem consists of the following parts:
| | [juneau-dto](/docs/topics/JuneauDtoBasics) | Data Transfer Objects for
HTML5, Atom, Cognos, JSON-Schema, and Swagger | β’ *None* |
| | [juneau-config](/docs/topics/JuneauConfigBasics) | Configuration File API
| β’ *None* |
| | [juneau-assertions](/docs/topics/JuneauAssertionBasics) | Fluent-style
assertions API | β’ *None* |
+| | [juneau-bct](/docs/topics/JuneauBctBasics) | Bean-Centric Testing
framework | β’ JUnit 5 |
| **juneau-rest** | [juneau-rest-common](/docs/topics/JuneauRestCommonBasics)
| REST APIs common to client and server side. | β’ Apache HttpCore 4.4 |
| | [juneau-rest-server](/docs/topics/JuneauRestServerBasics) | REST Servlet
API | β’ Servlet 3.1+ |
| |
[juneau-rest-server-springboot](/docs/topics/JuneauRestServerSpringbootBasics)
| REST Spring Boot integration | β’ Spring Boot 2.0+ |
@@ -47,7 +48,7 @@ The Juneau ecosystem consists of the following parts:
| **my-springboot-microservice** | | Spring Boot developer template | β’ Spring
Boot 2.0+ |
| **juneau-examples** | `juneau-examples-core` | Core code examples | |
| | `juneau-examples-rest` | REST code examples | |
-| **juneau-all** | `juneau-all` | Combination of the following:<br/>β’
[juneau-marshall](/docs/topics/JuneauMarshallBasics)<br/>β’
[juneau-dto](/docs/topics/JuneauDtoBasics)<br/>β’
[juneau-config](/docs/topics/JuneauConfigBasics)<br/>β’
[juneau-assertions](/docs/topics/JuneauAssertionBasics)<br/>β’
[juneau-rest-common](/docs/topics/JuneauRestCommonBasics)<br/>β’
[juneau-rest-server](/docs/topics/JuneauRestServerBasics)<br/>β’
[juneau-rest-client](/docs/topics/JuneauRestClientBasics) | β’ Servlet [...]
+| **juneau-all** | `juneau-all` | Combination of the following:<br/>β’
[juneau-marshall](/docs/topics/JuneauMarshallBasics)<br/>β’
[juneau-dto](/docs/topics/JuneauDtoBasics)<br/>β’
[juneau-config](/docs/topics/JuneauConfigBasics)<br/>β’
[juneau-assertions](/docs/topics/JuneauAssertionBasics)<br/>β’
[juneau-bct](/docs/topics/JuneauBctBasics)<br/>β’
[juneau-rest-common](/docs/topics/JuneauRestCommonBasics)<br/>β’
[juneau-rest-server](/docs/topics/JuneauRestServerBasics)<br/>β’
[juneau-rest-client] [...]
The current version of Juneau is `9.0.1`.
diff --git a/juneau-docs/docs/topics/07.01.00.JuneauBctBasics.md
b/juneau-docs/docs/topics/07.01.00.JuneauBctBasics.md
new file mode 100644
index 000000000..1fa3fe76c
--- /dev/null
+++ b/juneau-docs/docs/topics/07.01.00.JuneauBctBasics.md
@@ -0,0 +1,705 @@
+---
+title: "juneau-bct Basics"
+slug: JuneauBctBasics
+---
+
+# Bean-Centric Testing Framework
+
+A powerful and intuitive testing framework that extends JUnit with streamlined
assertion methods for Java objects. BCT eliminates verbose test code while
providing comprehensive object introspection and comparison capabilities.
+
+## π Table of Contents
+
+- [Overview](#overview)
+- [Quick Start](#quick-start)
+- [Core Assertion Methods](#core-assertion-methods)
+- [Nested Property Access](#nested-property-access)
+- [Advanced Configuration](#advanced-configuration)
+- [Extending the Framework](#extending-the-framework)
+- [Migration Examples](#migration-examples)
+
+## Overview
+
+The Bean-Centric Testing Framework transforms complex multi-line JUnit
assertions into simple, readable one-liners. Instead of manually extracting and
comparing individual properties, BCT provides intelligent object introspection
with flexible property access patterns.
+
+### Key Benefits
+
+- **Concise Assertions**: Replace many lines of manual property extraction
with single assertion calls
+- **Powerful Property Access**: Nested objects, collections, arrays, and maps
with unified syntax
+- **Flexible Comparison**: Support for custom converters, formatters, and
comparison logic
+- **Type Safety**: Comprehensive error messages with clear property paths
+- **Extensible**: Custom property extractors, stringifiers, and conversion
logic
+- **Minimal Dependencies**: Depends only on JUnit 5 - no external libraries or
heavyweight frameworks
+- **Zero Configuration**: Works out-of-the-box with sensible defaults and
automatic discovery
+- **100% Test Coverage**: Thoroughly tested with comprehensive unit tests
ensuring reliability and stability
+
+### Real-World Impact
+
+BCT has been successfully deployed across the Apache Juneau project test suite
with impressive results:
+
+- **Adoption Rate**: 342 out of 658 test files (52%) now use BCT assertions
+- **Usage Statistics**: Over 1,700 BCT assertion calls across the codebase
+ - 859 `assertBean()` calls across 127 files
+ - 663 `assertList()` calls across 69 files
+ - 192 `assertBeans()` calls across 10 files
+- **Code Reduction**: Thousands of lines of verbose property extraction
replaced with concise assertions
+- **Test Clarity**: Complex object validation simplified to single-line
assertions
+
+### JUnit vs BCT Comparison
+
+**Traditional JUnit:**
+```java
+// Testing a user object - verbose and repetitive
+assertEquals("John", user.getName());
+assertEquals(30, user.getAge());
+assertTrue(user.isActive());
+assertEquals("123 Main St", user.getAddress().getStreet());
+assertEquals("Springfield", user.getAddress().getCity());
+```
+
+**Bean-Centric Testing:**
+```java
+// Same test - concise and readable
+assertBean(user, "name,age,active,address{street,city}",
+ "John,30,true,{123 Main St,Springfield}");
+```
+
+## Quick Start
+
+### 1. Import Static Methods
+
+```java
+import static org.apache.juneau.junit.bct.BctAssertions.*;
+```
+
+### 2. Basic Object Testing
+
+```java
+@Test
+void testUser() {
+ User user = new User("Alice", 25, true);
+
+ // Test multiple properties at once
+ assertBean(user, "name,age,active", "Alice,25,true");
+
+ // Test individual properties
+ assertBean(user, "name", "Alice");
+ assertBean(user, "age", "25");
+}
+
+@Test
+void testMultipleUsers() {
+ List<User> users = List.of(
+ new User("Alice", 25, true),
+ new User("Bob", 30, false),
+ new User("Carol", 35, true)
+ );
+
+ // Test same properties across multiple objects
+ assertBeans(users, "name,age",
+ "Alice,25",
+ "Bob,30",
+ "Carol,35");
+
+ // Test just names
+ assertBeans(users, "name", "Alice", "Bob", "Carol");
+}
+```
+
+### 3. Collection Testing
+
+```java
+@Test
+void testList() {
+ List<String> colors = List.of("red", "green", "blue");
+
+ // Test all elements
+ assertList(colors, "red", "green", "blue");
+
+ // Test as bean properties
+ assertBean(colors, "0,1,2", "red,green,blue");
+ assertBean(colors, "size", "3");
+}
+```
+
+## Core Assertion Methods
+
+#### [assertBean(Object, String,
String)](/docs/apidocs/org/apache/juneau/junit/bct/BctAssertions.html#assertBean(java.lang.Object,java.lang.String,java.lang.String))
+
+Tests properties of a single object using a flexible property syntax with
powerful nested access capabilities.
+
+This method provides comprehensive property access for any Java object,
supporting nested objects, collections, arrays, maps, and custom field access
patterns. It uses intelligent property resolution with automatic type handling
and supports complex object graphs.
+
+#### **Basic Property Testing:**
+```java
+// Simple properties
+assertBean(user, "name,email", "John,[email protected]");
+
+// Boolean properties
+assertBean(user, "active,verified", "true,false");
+
+// Null handling
+assertBean(user, "middleName", "null");
+```
+
+#### **Nested Object Testing:**
+```java
+// Single-level nesting
+assertBean(user, "address{street,city}", "{123 Main St,Springfield}");
+
+// Multi-level nesting
+assertBean(user, "profile{settings{notifications{email}}}", "{{{true}}}");
+
+// Mixed simple and nested
+assertBean(order, "id,customer{name,email},total", "12345,{John
Doe,[email protected]},99.95");
+```
+
+#### **Collection and Array Testing:**
+```java
+// Index-based access
+assertBean(order, "items{0{name},1{name}}", "{{Laptop},{Phone}}");
+
+// Collection iteration (#{} syntax)
+assertBean(order, "items{#{name}}", "[{Laptop},{Phone},{Tablet}]");
+
+// Collection properties
+assertBean(order, "items{length,#{price}}",
"{3,[{999.99},{699.99},{299.99}]}");
+
+// Array access
+assertBean(data, "values{0,1,2}", "{100,200,300}");
+```
+
+#### **Map Testing:**
+```java
+// Direct key access
+assertBean(config, "database{host,port}", "{localhost,5432}");
+
+// Map size testing
+assertBean(user, "settings{size}", "{5}");
+
+// Null key handling
+assertBean(user, "mapWithNullKey{<null>}", "{nullKeyValue}");
+```
+
+#### **Field and Method Testing:**
+```java
+// Public fields (no getters required)
+assertBean(myBean, "f1,f2,f3", "val1,val2,val3");
+
+// Field properties with chaining
+assertBean(myBean, "f1{length},f2{class{simpleName}}", "{5},{{String}}");
+
+// Boolean method variations
+assertBean(user, "enabled,isActive,hasPermission", "true,false,true");
+```
+
+#### [assertBeans(Collection, String,
String...)](/docs/apidocs/org/apache/juneau/junit/bct/BctAssertions.html#assertBeans(java.lang.Object,java.lang.String,java.lang.String...))
+
+Tests multiple objects in a collection, comparing the same properties across
all objects using the same property access logic as `assertBean`.
+
+This method validates that each bean in a collection has the specified
property values. It's perfect for testing collections of similar objects,
validation results, or parsed data structures. Each expected value string
corresponds to one bean in the collection.
+
+#### **Basic Collection Testing:**
+```java
+List<User> users = Arrays.asList(
+ new User("Alice", 25),
+ new User("Bob", 30),
+ new User("Charlie", 35)
+);
+
+// Test same properties across all users
+assertBeans(users, "name,age",
+ "Alice,25",
+ "Bob,30",
+ "Charlie,35"
+);
+```
+
+#### **Complex Nested Properties:**
+```java
+// Test nested properties across multiple beans
+List<Order> orders = getOrderList();
+assertBeans(orders, "id,customer{name,email}",
+ "1,{John,[email protected]}",
+ "2,{Jane,[email protected]}"
+);
+
+// Test collection properties within beans
+List<ShoppingCart> carts = getCartList();
+assertBeans(carts, "items{0{name}},total",
+ "{{Laptop}},999.99",
+ "{{Phone}},599.99"
+);
+```
+
+#### [assertList(Object,
Object...)](/docs/apidocs/org/apache/juneau/junit/bct/BctAssertions.html#assertList(java.lang.Object,java.lang.Object...))
+
+Tests collection elements directly with support for multiple comparison modes:
string conversion, functional validation with predicates, and direct object
equality.
+
+This method supports any object that can be converted to a List, including
arrays, collections, iterables, streams, and more. It provides three distinct
comparison modes based on the type of expected values provided.
+
+#### **String Conversion Testing (Default Mode):**
+```java
+// String collections - compares string representations
+assertList(List.of("a", "b", "c"), "a", "b", "c");
+
+// Number collections - converts to string for comparison
+assertList(List.of(1, 2, 3), "1", "2", "3");
+
+// Object collections - uses toString() or converter
+assertList(productNames, "Laptop", "Phone", "Tablet");
+
+// Arrays and other collection types
+assertList(myArray, "element1", "element2", "element3");
+```
+
+#### **Predicate Testing (Functional Validation):**
+```java
+// Use Predicate<T> for functional testing
+Predicate<Integer> greaterThanOne = x -> x > 1;
+assertList(List.of(2, 3, 4), greaterThanOne, greaterThanOne, greaterThanOne);
+
+// Mix predicates with other comparison types
+Predicate<String> startsWithA = s -> s.startsWith("a");
+assertList(List.of("apple", "banana"), startsWithA, "banana");
+
+// Complex predicate validation
+Predicate<User> isActive = user -> user.isActive();
+assertList(userList, isActive, isActive);
+```
+
+#### **Object Equality Testing (Direct Comparison):**
+```java
+// Non-String, non-Predicate objects use Objects.equals() comparison
+assertList(List.of(1, 2, 3), 1, 2, 3); // Integer objects
+
+// Custom objects with proper equals() implementation
+assertList(List.of(myBean1, myBean2), myBean1, myBean2);
+
+// Mixed object types
+assertList(mixedList, stringObj, integerObj, customObj);
+```
+
+#### [assertMapped(Object, BiFunction, String,
String)](/docs/apidocs/org/apache/juneau/junit/bct/BctAssertions.html#assertMapped(java.lang.Object,java.util.function.BiFunction,java.lang.String,java.lang.String))
+
+Tests objects with custom property access logic using a BiFunction, designed
for objects that don't follow standard JavaBean patterns or require specialized
property extraction.
+
+This method creates an intermediate LinkedHashMap to collect all property
values before using the same logic as `assertBean` for comparison. This ensures
consistent ordering and supports the full nested property syntax. The
BiFunction receives the object and property name, returning the property value.
+
+#### **Custom Property Access:**
+```java
+// Custom property access for non-standard objects
+assertMapped(myObject, (obj, prop) -> obj.getProperty(prop),
+ "prop1,prop2", "value1,value2");
+
+// Map-based property access
+Map<String, Object> data = new HashMap<>();
+data.put("name", "Alice");
+data.put("score", 95);
+assertMapped(data, (map, key) -> map.get(key),
+ "name,score", "Alice,95");
+```
+
+#### **Exception Handling:**
+```java
+// Exceptions become simple class names in output
+assertMapped(dataSource, (ds, prop) -> {
+ try {
+ return ds.getConnection().getMetaData().getDatabaseProductName();
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+}, "databaseName", "PostgreSQL");
+
+// Safe property access with exception conversion
+assertMapped(webService, (service, endpoint) -> {
+ try {
+ return service.call(endpoint);
+ } catch (Exception e) {
+ return e.getClass().getSimpleName(); // Returns "TimeoutException"
+ }
+}, "userEndpoint", "TimeoutException");
+```
+
+#### **Complex Property Logic:**
+```java
+// Transform complex nested access patterns
+assertMapped(configSystem, (config, prop) -> {
+ switch(prop) {
+ case "timeout": return config.getSettings().getTimeout();
+ case "retries": return config.getSettings().getRetries();
+ case "database": return config.getDatabase().getUrl();
+ default: return config.getAttribute(prop);
+ }
+}, "timeout,retries,database",
"30000,3,jdbc:postgresql://localhost:5432/mydb");
+
+// Conditional property access
+assertMapped(userService, (service, operation) -> {
+ if ("count".equals(operation)) {
+ return service.getUserCount();
+ } else if ("active".equals(operation)) {
+ return service.getActiveUsers().size();
+ }
+ return service.getProperty(operation);
+}, "count,active", "150,45");
+```
+
+#### **Legacy System Integration:**
+```java
+// Access legacy objects without standard getters
+assertMapped(legacyBean, (bean, fieldName) -> {
+ Field field = bean.getClass().getDeclaredField(fieldName);
+ field.setAccessible(true);
+ return field.get(bean);
+}, "privateField1,privateField2", "value1,value2");
+```
+
+### Additional Assertion Methods
+
+BCT provides several additional assertion methods for common testing scenarios:
+
+#### [assertContains(String,
Object)](/docs/apidocs/org/apache/juneau/junit/bct/BctAssertions.html#assertContains(java.lang.String,java.lang.Object))
+
+Tests that a string appears somewhere within the stringified object.
+
+```java
+User user = new User("Alice Smith", 25);
+List<String> items = Arrays.asList("apple", "banana", "cherry");
+
+// Test substring presence
+assertContains("Alice", user);
+assertContains("Smith", user);
+assertContains("banana", items);
+```
+
+#### [assertContainsAll(Object,
String...)](/docs/apidocs/org/apache/juneau/junit/bct/BctAssertions.html#assertContainsAll(java.lang.Object,java.lang.String...))
+
+Tests that all specified strings appear within the stringified object.
+
+```java
+User user = new User("Alice Smith", 25);
+user.setEmail("[email protected]");
+
+// Test multiple substrings
+assertContainsAll(user, "Alice", "Smith", "25");
+assertContainsAll(user, "alice", "example.com");
+```
+
+####
[assertEmpty(Object)](/docs/apidocs/org/apache/juneau/junit/bct/BctAssertions.html#assertEmpty(java.lang.Object))
+
+Tests that collections, arrays, maps, or strings are empty.
+
+```java
+List<String> emptyList = new ArrayList<>();
+String[] emptyArray = {};
+Map<String,String> emptyMap = new HashMap<>();
+String emptyString = "";
+
+// Test empty collections
+assertEmpty(emptyList);
+assertEmpty(emptyArray);
+assertEmpty(emptyMap);
+assertEmpty(emptyString);
+```
+
+####
[assertNotEmpty(Object)](/docs/apidocs/org/apache/juneau/junit/bct/BctAssertions.html#assertNotEmpty(java.lang.Object))
+
+Tests that collections, arrays, maps, or strings are not empty.
+
+```java
+List<String> names = Arrays.asList("Alice");
+String[] colors = {"red"};
+Map<String,String> config = Map.of("key", "value");
+String message = "Hello";
+
+// Test non-empty collections
+assertNotEmpty(names);
+assertNotEmpty(colors);
+assertNotEmpty(config);
+assertNotEmpty(message);
+```
+
+#### [assertSize(int,
Object)](/docs/apidocs/org/apache/juneau/junit/bct/BctAssertions.html#assertSize(int,java.lang.Object))
+
+Tests the size/length of collections, arrays, maps, or strings.
+
+```java
+List<String> names = Arrays.asList("Alice", "Bob", "Carol");
+String[] colors = {"red", "green"};
+Map<String,Integer> scores = Map.of("Alice", 95, "Bob", 87);
+String message = "Hello";
+
+// Test collection sizes
+assertSize(3, names);
+assertSize(2, colors);
+assertSize(2, scores);
+assertSize(5, message);
+```
+
+#### [assertString(String,
Object)](/docs/apidocs/org/apache/juneau/junit/bct/BctAssertions.html#assertString(java.lang.String,java.lang.Object))
+
+Tests the string representation of an object using the configured converter.
+
+```java
+User user = new User("Alice", 25);
+List<Integer> numbers = Arrays.asList(1, 2, 3);
+Date date = new Date(1609459200000L); // 2021-01-01
+
+// Test string representations
+assertString("User(name=Alice, age=25)", user);
+assertString("[1, 2, 3]", numbers);
+assertString("2021-01-01", date);
+```
+
+#### [assertMatchesGlob(String,
Object)](/docs/apidocs/org/apache/juneau/junit/bct/BctAssertions.html#assertMatchesGlob(java.lang.String,java.lang.Object))
+
+Tests that the stringified object matches a glob-style pattern (* and ?
wildcards).
+
+```java
+User user = new User("Alice Smith", 25);
+String filename = "report.pdf";
+String email = "[email protected]";
+
+// Test pattern matching
+assertMatchesGlob("*Alice*", user);
+assertMatchesGlob("*.pdf", filename);
+assertMatchesGlob("*@*.com", email);
+assertMatchesGlob("User(name=Alice*, age=25)", user);
+```
+
+## Nested Property Access
+
+BCT provides powerful nested property access with intuitive syntax:
+
+### Object Nesting
+
+```java
+// Access nested object properties
+assertBean(order, "customer{address{city}}", "{{Springfield}}");
+
+// Multiple nested levels
+assertBean(user, "profile{settings{notifications{email}}}", "{{{true}}}");
+
+// Multiple properties at each level
+assertBean(order, "customer{name,email},shipping{method,cost}",
+ "{John,[email protected]},{Express,15.99}");
+```
+
+### Collection and Array Access
+
+```java
+// Index-based access
+assertBean(order, "items{0{name},1{name}}", "{{Laptop},{Phone}}");
+
+// Iterate over all elements
+assertBean(order, "items{#{name}}", "[{Laptop},{Phone},{Tablet}]");
+
+// Collection properties
+assertBean(order, "items{length,#{price}}",
"{3,[{999.99},{699.99},{299.99}]}");
+
+// Array access
+assertBean(data, "values{0,1,2}", "{100,200,300}");
+```
+
+### Map Access
+
+```java
+// Direct key access
+assertBean(config, "database{host,port}", "{localhost,5432}");
+
+// Special characters in keys
+assertBean(props, "app.version,app.name", "1.0.0,MyApp");
+
+// Null key access
+assertBean(mapWithNullKey, "<null>", "nullKeyValue");
+```
+
+### Size and Length Properties
+
+```java
+// Universal size access
+assertBean(list, "size", "5");
+assertBean(array, "length", "10");
+assertBean(map, "size", "3");
+
+// Combined with other properties
+assertBean(user, "orders{size,#{total}}", "{3,[{99.99},{149.99},{79.99}]}");
+```
+
+## Advanced Configuration
+
+### Custom Error Messages
+
+```java
+// Static messages
+assertBean(args().setMessage("User validation failed"),
+ user, "email", "[email protected]");
+
+// Dynamic messages with placeholders
+assertBean(args().setMessage("Test {0} failed on iteration {1}", testName,
iteration),
+ result, "status", "SUCCESS");
+
+// Supplier-based messages for expensive computation
+assertBean(args().setMessage(() -> "Test failed at " + Instant.now()),
+ user, "lastLogin", expectedTime);
+```
+
+### Custom Bean Converters
+
+```java
+// Create converter with custom formatting
+var converter = BasicBeanConverter.builder()
+ .defaultSettings()
+ .addStringifier(LocalDate.class, date ->
+ date.format(DateTimeFormatter.ISO_LOCAL_DATE))
+ .addStringifier(Money.class, money ->
+ money.getAmount().toPlainString())
+ .build();
+
+// Use in assertions
+assertBean(args().setBeanConverter(converter),
+ order, "date,total", "2023-12-01,99.99");
+```
+
+## Extending the Framework
+
+### Custom Stringifiers
+
+Define how specific types should be converted to strings:
+
+```java
+// Date formatting
+Stringifier<LocalDateTime> dateStringifier = (conv, dt) ->
+ dt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
+
+// Complex object formatting
+Stringifier<Order> orderStringifier = (conv, order) ->
+ "Order#" + order.getId() + "[" + order.getStatus() + "]";
+
+// Registration
+var converter = BasicBeanConverter.builder()
+ .defaultSettings()
+ .addStringifier(LocalDateTime.class, dateStringifier)
+ .addStringifier(Order.class, orderStringifier)
+ .build();
+```
+
+### Custom Property Extractors
+
+Define custom property access logic:
+
+```java
+// Database entity extractor
+PropertyExtractor entityExtractor = new PropertyExtractor() {
+ @Override
+ public boolean canExtract(BeanConverter conv, Object obj, String prop) {
+ return obj instanceof DatabaseEntity;
+ }
+
+ @Override
+ public Object extract(BeanConverter conv, Object obj, String prop) {
+ DatabaseEntity entity = (DatabaseEntity) obj;
+ switch (prop) {
+ case "id": return entity.getPrimaryKey();
+ case "displayName": return entity.computeDisplayName();
+ default: return entity.getAttribute(prop);
+ }
+ }
+};
+
+// Registration
+var converter = BasicBeanConverter.builder()
+ .defaultSettings()
+ .addPropertyExtractor(entityExtractor)
+ .build();
+```
+
+## Migration Examples
+
+### Before and After Comparisons
+
+**Complex Object Testing:**
+
+```java
+// Before: Traditional JUnit
+@Test
+void testOrderTraditional() {
+ assertEquals(12345L, order.getId());
+ assertEquals("John Doe", order.getCustomer().getName());
+ assertEquals("[email protected]", order.getCustomer().getEmail());
+ assertEquals("123 Main St", order.getShipping().getAddress().getStreet());
+ assertEquals("Springfield", order.getShipping().getAddress().getCity());
+ assertEquals(3, order.getItems().size());
+ assertEquals("Laptop", order.getItems().get(0).getName());
+ assertEquals(new BigDecimal("999.99"), order.getItems().get(0).getPrice());
+ assertEquals(OrderStatus.PENDING, order.getStatus());
+}
+
+// After: Bean-Centric Testing
+@Test
+void testOrderBCT() {
+ assertBean(order,
+
"id,customer{name,email},shipping{address{street,city}},items{size,0{name,price}},status",
+ "12345,{John Doe,[email protected]},{{123 Main
St,Springfield}},{3,{Laptop,999.99}},PENDING");
+}
+```
+
+**Collection Testing:**
+
+```java
+// Before: Traditional JUnit
+@Test
+void testUsersTraditional() {
+ assertEquals(3, users.size());
+ assertEquals("Alice", users.get(0).getName());
+ assertEquals(25, users.get(0).getAge());
+ assertEquals("Bob", users.get(1).getName());
+ assertEquals(30, users.get(1).getAge());
+ assertEquals("Charlie", users.get(2).getName());
+ assertEquals(35, users.get(2).getAge());
+}
+
+// After: Bean-Centric Testing
+@Test
+void testUsersBCT() {
+ assertBeans(users, "name,age",
+ "Alice,25",
+ "Bob,30",
+ "Charlie,35");
+}
+```
+
+**Configuration Testing:**
+
+```java
+// Before: Traditional JUnit
+@Test
+void testConfigTraditional() {
+ assertEquals("localhost", config.getDatabase().getHost());
+ assertEquals(5432, config.getDatabase().getPort());
+ assertEquals("myapp", config.getDatabase().getSchema());
+ assertEquals(30000, config.getTimeout());
+ assertEquals(3, config.getRetries());
+ assertTrue(config.isLoggingEnabled());
+}
+
+// After: Bean-Centric Testing
+@Test
+void testConfigBCT() {
+ assertBean(config,
+ "database{host,port,schema},timeout,retries,loggingEnabled",
+ "{localhost,5432,myapp},30000,3,true");
+}
+```
+
+## **Key Takeaways**
+
+The Bean-Centric Testing Framework transforms verbose, error-prone test code
into concise, readable assertions. By leveraging intelligent object
introspection and flexible property access patterns, BCT enables developers to
write more maintainable tests while improving test coverage and readability.
+
+**Benefits:**
+- **Reduced Code Volume**: 70-80% less test code
+- **Improved Readability**: Clear, intention-revealing assertions
+- **Better Maintainability**: Changes to object structure require minimal test
updates
+- **Enhanced Error Messages**: Precise failure reporting with property paths
+- **Flexible Extension**: Custom converters for domain-specific needs
+
+Start with simple `assertBean` calls and gradually adopt more advanced
features as your testing needs evolve. The framework grows with your project
complexity while maintaining simplicity at its core.
diff --git a/juneau-docs/docs/topics/07.01.00.JuneauRestCommonBasics.md
b/juneau-docs/docs/topics/08.01.00.JuneauRestCommonBasics.md
similarity index 100%
rename from juneau-docs/docs/topics/07.01.00.JuneauRestCommonBasics.md
rename to juneau-docs/docs/topics/08.01.00.JuneauRestCommonBasics.md
diff --git a/juneau-docs/docs/topics/07.02.00.HelperClasses.md
b/juneau-docs/docs/topics/08.02.00.HelperClasses.md
similarity index 100%
rename from juneau-docs/docs/topics/07.02.00.HelperClasses.md
rename to juneau-docs/docs/topics/08.02.00.HelperClasses.md
diff --git a/juneau-docs/docs/topics/07.03.00.Annotations.md
b/juneau-docs/docs/topics/08.03.00.Annotations.md
similarity index 100%
rename from juneau-docs/docs/topics/07.03.00.Annotations.md
rename to juneau-docs/docs/topics/08.03.00.Annotations.md
diff --git a/juneau-docs/docs/topics/07.04.00.HttpHeaders.md
b/juneau-docs/docs/topics/08.04.00.HttpHeaders.md
similarity index 100%
rename from juneau-docs/docs/topics/07.04.00.HttpHeaders.md
rename to juneau-docs/docs/topics/08.04.00.HttpHeaders.md
diff --git a/juneau-docs/docs/topics/07.05.00.HttpParts.md
b/juneau-docs/docs/topics/08.05.00.HttpParts.md
similarity index 100%
rename from juneau-docs/docs/topics/07.05.00.HttpParts.md
rename to juneau-docs/docs/topics/08.05.00.HttpParts.md
diff --git a/juneau-docs/docs/topics/07.06.00.HttpEntitiesAndResources.md
b/juneau-docs/docs/topics/08.06.00.HttpEntitiesAndResources.md
similarity index 100%
rename from juneau-docs/docs/topics/07.06.00.HttpEntitiesAndResources.md
rename to juneau-docs/docs/topics/08.06.00.HttpEntitiesAndResources.md
diff --git a/juneau-docs/docs/topics/07.07.00.HttpResponses.md
b/juneau-docs/docs/topics/08.07.00.HttpResponses.md
similarity index 100%
rename from juneau-docs/docs/topics/07.07.00.HttpResponses.md
rename to juneau-docs/docs/topics/08.07.00.HttpResponses.md
diff --git a/juneau-docs/docs/topics/07.08.00.RemoteProxyInterfaces.md
b/juneau-docs/docs/topics/08.08.00.RemoteProxyInterfaces.md
similarity index 100%
rename from juneau-docs/docs/topics/07.08.00.RemoteProxyInterfaces.md
rename to juneau-docs/docs/topics/08.08.00.RemoteProxyInterfaces.md
diff --git a/juneau-docs/docs/topics/08.01.00.JuneauRestServerBasics.md
b/juneau-docs/docs/topics/09.01.00.JuneauRestServerBasics.md
similarity index 100%
rename from juneau-docs/docs/topics/08.01.00.JuneauRestServerBasics.md
rename to juneau-docs/docs/topics/09.01.00.JuneauRestServerBasics.md
diff --git a/juneau-docs/docs/topics/08.02.00.RestServerOverview.md
b/juneau-docs/docs/topics/09.02.00.RestServerOverview.md
similarity index 100%
rename from juneau-docs/docs/topics/08.02.00.RestServerOverview.md
rename to juneau-docs/docs/topics/09.02.00.RestServerOverview.md
diff --git a/juneau-docs/docs/topics/08.03.01.RestAnnotatedClassBasics.md
b/juneau-docs/docs/topics/09.03.01.RestAnnotatedClassBasics.md
similarity index 100%
rename from juneau-docs/docs/topics/08.03.01.RestAnnotatedClassBasics.md
rename to juneau-docs/docs/topics/09.03.01.RestAnnotatedClassBasics.md
diff --git a/juneau-docs/docs/topics/08.03.02.PredefinedClasses.md
b/juneau-docs/docs/topics/09.03.02.PredefinedClasses.md
similarity index 100%
rename from juneau-docs/docs/topics/08.03.02.PredefinedClasses.md
rename to juneau-docs/docs/topics/09.03.02.PredefinedClasses.md
diff --git a/juneau-docs/docs/topics/08.03.03.ChildResources.md
b/juneau-docs/docs/topics/09.03.03.ChildResources.md
similarity index 100%
rename from juneau-docs/docs/topics/08.03.03.ChildResources.md
rename to juneau-docs/docs/topics/09.03.03.ChildResources.md
diff --git a/juneau-docs/docs/topics/08.03.04.PathVariables.md
b/juneau-docs/docs/topics/09.03.04.PathVariables.md
similarity index 100%
rename from juneau-docs/docs/topics/08.03.04.PathVariables.md
rename to juneau-docs/docs/topics/09.03.04.PathVariables.md
diff --git a/juneau-docs/docs/topics/08.03.05.Deployment.md
b/juneau-docs/docs/topics/09.03.05.Deployment.md
similarity index 100%
rename from juneau-docs/docs/topics/08.03.05.Deployment.md
rename to juneau-docs/docs/topics/09.03.05.Deployment.md
diff --git a/juneau-docs/docs/topics/08.03.06.LifecycleHooks.md
b/juneau-docs/docs/topics/09.03.06.LifecycleHooks.md
similarity index 100%
rename from juneau-docs/docs/topics/08.03.06.LifecycleHooks.md
rename to juneau-docs/docs/topics/09.03.06.LifecycleHooks.md
diff --git a/juneau-docs/docs/topics/08.04.01.RestOpAnnotatedMethodBasics.md
b/juneau-docs/docs/topics/09.04.01.RestOpAnnotatedMethodBasics.md
similarity index 100%
rename from juneau-docs/docs/topics/08.04.01.RestOpAnnotatedMethodBasics.md
rename to juneau-docs/docs/topics/09.04.01.RestOpAnnotatedMethodBasics.md
diff --git a/juneau-docs/docs/topics/08.04.02.InferredHttpMethodsAndPaths.md
b/juneau-docs/docs/topics/09.04.02.InferredHttpMethodsAndPaths.md
similarity index 100%
rename from juneau-docs/docs/topics/08.04.02.InferredHttpMethodsAndPaths.md
rename to juneau-docs/docs/topics/09.04.02.InferredHttpMethodsAndPaths.md
diff --git a/juneau-docs/docs/topics/08.04.03.JavaMethodParameters.md
b/juneau-docs/docs/topics/09.04.03.JavaMethodParameters.md
similarity index 100%
rename from juneau-docs/docs/topics/08.04.03.JavaMethodParameters.md
rename to juneau-docs/docs/topics/09.04.03.JavaMethodParameters.md
diff --git a/juneau-docs/docs/topics/08.04.04.JavaMethodReturnTypes.md
b/juneau-docs/docs/topics/09.04.04.JavaMethodReturnTypes.md
similarity index 100%
rename from juneau-docs/docs/topics/08.04.04.JavaMethodReturnTypes.md
rename to juneau-docs/docs/topics/09.04.04.JavaMethodReturnTypes.md
diff --git a/juneau-docs/docs/topics/08.04.05.JavaMethodThrowableTypes.md
b/juneau-docs/docs/topics/09.04.05.JavaMethodThrowableTypes.md
similarity index 100%
rename from juneau-docs/docs/topics/08.04.05.JavaMethodThrowableTypes.md
rename to juneau-docs/docs/topics/09.04.05.JavaMethodThrowableTypes.md
diff --git a/juneau-docs/docs/topics/08.04.06.PathPatterns.md
b/juneau-docs/docs/topics/09.04.06.PathPatterns.md
similarity index 100%
rename from juneau-docs/docs/topics/08.04.06.PathPatterns.md
rename to juneau-docs/docs/topics/09.04.06.PathPatterns.md
diff --git a/juneau-docs/docs/topics/08.04.07.Matchers.md
b/juneau-docs/docs/topics/09.04.07.Matchers.md
similarity index 100%
rename from juneau-docs/docs/topics/08.04.07.Matchers.md
rename to juneau-docs/docs/topics/09.04.07.Matchers.md
diff --git a/juneau-docs/docs/topics/08.04.08.OverloadingHttpMethods.md
b/juneau-docs/docs/topics/09.04.08.OverloadingHttpMethods.md
similarity index 100%
rename from juneau-docs/docs/topics/08.04.08.OverloadingHttpMethods.md
rename to juneau-docs/docs/topics/09.04.08.OverloadingHttpMethods.md
diff --git a/juneau-docs/docs/topics/08.04.09.AdditionalInformation.md
b/juneau-docs/docs/topics/09.04.09.AdditionalInformation.md
similarity index 100%
rename from juneau-docs/docs/topics/08.04.09.AdditionalInformation.md
rename to juneau-docs/docs/topics/09.04.09.AdditionalInformation.md
diff --git a/juneau-docs/docs/topics/08.05.01.HttpPartBasics.md
b/juneau-docs/docs/topics/09.05.01.HttpPartBasics.md
similarity index 100%
rename from juneau-docs/docs/topics/08.05.01.HttpPartBasics.md
rename to juneau-docs/docs/topics/09.05.01.HttpPartBasics.md
diff --git a/juneau-docs/docs/topics/08.05.02.PartMarshallers.md
b/juneau-docs/docs/topics/09.05.02.PartMarshallers.md
similarity index 100%
rename from juneau-docs/docs/topics/08.05.02.PartMarshallers.md
rename to juneau-docs/docs/topics/09.05.02.PartMarshallers.md
diff --git a/juneau-docs/docs/topics/08.05.03.HttpPartAnnotations.md
b/juneau-docs/docs/topics/09.05.03.HttpPartAnnotations.md
similarity index 100%
rename from juneau-docs/docs/topics/08.05.03.HttpPartAnnotations.md
rename to juneau-docs/docs/topics/09.05.03.HttpPartAnnotations.md
diff --git a/juneau-docs/docs/topics/08.05.04.DefaultParts.md
b/juneau-docs/docs/topics/09.05.04.DefaultParts.md
similarity index 100%
rename from juneau-docs/docs/topics/08.05.04.DefaultParts.md
rename to juneau-docs/docs/topics/09.05.04.DefaultParts.md
diff --git a/juneau-docs/docs/topics/08.05.05.RequestBeans.md
b/juneau-docs/docs/topics/09.05.05.RequestBeans.md
similarity index 100%
rename from juneau-docs/docs/topics/08.05.05.RequestBeans.md
rename to juneau-docs/docs/topics/09.05.05.RequestBeans.md
diff --git a/juneau-docs/docs/topics/08.05.06.ResponseBeans.md
b/juneau-docs/docs/topics/09.05.06.ResponseBeans.md
similarity index 100%
rename from juneau-docs/docs/topics/08.05.06.ResponseBeans.md
rename to juneau-docs/docs/topics/09.05.06.ResponseBeans.md
diff --git a/juneau-docs/docs/topics/08.05.07.HttpPartApis.md
b/juneau-docs/docs/topics/09.05.07.HttpPartApis.md
similarity index 100%
rename from juneau-docs/docs/topics/08.05.07.HttpPartApis.md
rename to juneau-docs/docs/topics/09.05.07.HttpPartApis.md
diff --git a/juneau-docs/docs/topics/08.06.00.Marshalling.md
b/juneau-docs/docs/topics/09.06.00.Marshalling.md
similarity index 100%
rename from juneau-docs/docs/topics/08.06.00.Marshalling.md
rename to juneau-docs/docs/topics/09.06.00.Marshalling.md
diff --git a/juneau-docs/docs/topics/08.07.00.HandlingFormPosts.md
b/juneau-docs/docs/topics/09.07.00.HandlingFormPosts.md
similarity index 100%
rename from juneau-docs/docs/topics/08.07.00.HandlingFormPosts.md
rename to juneau-docs/docs/topics/09.07.00.HandlingFormPosts.md
diff --git a/juneau-docs/docs/topics/08.08.00.Guards.md
b/juneau-docs/docs/topics/09.08.00.Guards.md
similarity index 100%
rename from juneau-docs/docs/topics/08.08.00.Guards.md
rename to juneau-docs/docs/topics/09.08.00.Guards.md
diff --git a/juneau-docs/docs/topics/08.09.00.Converters.md
b/juneau-docs/docs/topics/09.09.00.Converters.md
similarity index 100%
rename from juneau-docs/docs/topics/08.09.00.Converters.md
rename to juneau-docs/docs/topics/09.09.00.Converters.md
diff --git a/juneau-docs/docs/topics/08.10.00.LocalizedMessages.md
b/juneau-docs/docs/topics/09.10.00.LocalizedMessages.md
similarity index 100%
rename from juneau-docs/docs/topics/08.10.00.LocalizedMessages.md
rename to juneau-docs/docs/topics/09.10.00.LocalizedMessages.md
diff --git a/juneau-docs/docs/topics/08.11.00.Encoders.md
b/juneau-docs/docs/topics/09.11.00.Encoders.md
similarity index 100%
rename from juneau-docs/docs/topics/08.11.00.Encoders.md
rename to juneau-docs/docs/topics/09.11.00.Encoders.md
diff --git a/juneau-docs/docs/topics/08.12.00.ConfigurationFiles.md
b/juneau-docs/docs/topics/09.12.00.ConfigurationFiles.md
similarity index 100%
rename from juneau-docs/docs/topics/08.12.00.ConfigurationFiles.md
rename to juneau-docs/docs/topics/09.12.00.ConfigurationFiles.md
diff --git a/juneau-docs/docs/topics/08.13.00.SvlVariables.md
b/juneau-docs/docs/topics/09.13.00.SvlVariables.md
similarity index 100%
rename from juneau-docs/docs/topics/08.13.00.SvlVariables.md
rename to juneau-docs/docs/topics/09.13.00.SvlVariables.md
diff --git a/juneau-docs/docs/topics/08.14.00.StaticFiles.md
b/juneau-docs/docs/topics/09.14.00.StaticFiles.md
similarity index 100%
rename from juneau-docs/docs/topics/08.14.00.StaticFiles.md
rename to juneau-docs/docs/topics/09.14.00.StaticFiles.md
diff --git a/juneau-docs/docs/topics/08.15.00.ClientVersioning.md
b/juneau-docs/docs/topics/09.15.00.ClientVersioning.md
similarity index 100%
rename from juneau-docs/docs/topics/08.15.00.ClientVersioning.md
rename to juneau-docs/docs/topics/09.15.00.ClientVersioning.md
diff --git a/juneau-docs/docs/topics/08.16.01.SwaggerBasics.md
b/juneau-docs/docs/topics/09.16.01.SwaggerBasics.md
similarity index 100%
rename from juneau-docs/docs/topics/08.16.01.SwaggerBasics.md
rename to juneau-docs/docs/topics/09.16.01.SwaggerBasics.md
diff --git a/juneau-docs/docs/topics/08.16.02.BasicRestServletSwagger.md
b/juneau-docs/docs/topics/09.16.02.BasicRestServletSwagger.md
similarity index 100%
rename from juneau-docs/docs/topics/08.16.02.BasicRestServletSwagger.md
rename to juneau-docs/docs/topics/09.16.02.BasicRestServletSwagger.md
diff --git a/juneau-docs/docs/topics/08.16.03.BasicSwaggerInfo.md
b/juneau-docs/docs/topics/09.16.03.BasicSwaggerInfo.md
similarity index 100%
rename from juneau-docs/docs/topics/08.16.03.BasicSwaggerInfo.md
rename to juneau-docs/docs/topics/09.16.03.BasicSwaggerInfo.md
diff --git a/juneau-docs/docs/topics/08.16.04.SwaggerTags.md
b/juneau-docs/docs/topics/09.16.04.SwaggerTags.md
similarity index 100%
rename from juneau-docs/docs/topics/08.16.04.SwaggerTags.md
rename to juneau-docs/docs/topics/09.16.04.SwaggerTags.md
diff --git a/juneau-docs/docs/topics/08.16.05.SwaggerOperations.md
b/juneau-docs/docs/topics/09.16.05.SwaggerOperations.md
similarity index 100%
rename from juneau-docs/docs/topics/08.16.05.SwaggerOperations.md
rename to juneau-docs/docs/topics/09.16.05.SwaggerOperations.md
diff --git a/juneau-docs/docs/topics/08.16.06.SwaggerParameters.md
b/juneau-docs/docs/topics/09.16.06.SwaggerParameters.md
similarity index 100%
rename from juneau-docs/docs/topics/08.16.06.SwaggerParameters.md
rename to juneau-docs/docs/topics/09.16.06.SwaggerParameters.md
diff --git a/juneau-docs/docs/topics/08.16.07.SwaggerResponses.md
b/juneau-docs/docs/topics/09.16.07.SwaggerResponses.md
similarity index 100%
rename from juneau-docs/docs/topics/08.16.07.SwaggerResponses.md
rename to juneau-docs/docs/topics/09.16.07.SwaggerResponses.md
diff --git a/juneau-docs/docs/topics/08.16.08.SwaggerModels.md
b/juneau-docs/docs/topics/09.16.08.SwaggerModels.md
similarity index 100%
rename from juneau-docs/docs/topics/08.16.08.SwaggerModels.md
rename to juneau-docs/docs/topics/09.16.08.SwaggerModels.md
diff --git a/juneau-docs/docs/topics/08.16.09.SwaggerStylesheet.md
b/juneau-docs/docs/topics/09.16.09.SwaggerStylesheet.md
similarity index 100%
rename from juneau-docs/docs/topics/08.16.09.SwaggerStylesheet.md
rename to juneau-docs/docs/topics/09.16.09.SwaggerStylesheet.md
diff --git a/juneau-docs/docs/topics/08.17.00.ExecutionStatistics.md
b/juneau-docs/docs/topics/09.17.00.ExecutionStatistics.md
similarity index 100%
rename from juneau-docs/docs/topics/08.17.00.ExecutionStatistics.md
rename to juneau-docs/docs/topics/09.17.00.ExecutionStatistics.md
diff --git a/juneau-docs/docs/topics/08.18.01.HtmlDocConfigAnnotationBasics.md
b/juneau-docs/docs/topics/09.18.01.HtmlDocConfigAnnotationBasics.md
similarity index 100%
rename from juneau-docs/docs/topics/08.18.01.HtmlDocConfigAnnotationBasics.md
rename to juneau-docs/docs/topics/09.18.01.HtmlDocConfigAnnotationBasics.md
diff --git a/juneau-docs/docs/topics/08.18.02.HtmlUIvsDI.md
b/juneau-docs/docs/topics/09.18.02.HtmlUIvsDI.md
similarity index 100%
rename from juneau-docs/docs/topics/08.18.02.HtmlUIvsDI.md
rename to juneau-docs/docs/topics/09.18.02.HtmlUIvsDI.md
diff --git a/juneau-docs/docs/topics/08.18.03.HtmlWidgets.md
b/juneau-docs/docs/topics/09.18.03.HtmlWidgets.md
similarity index 100%
rename from juneau-docs/docs/topics/08.18.03.HtmlWidgets.md
rename to juneau-docs/docs/topics/09.18.03.HtmlWidgets.md
diff --git a/juneau-docs/docs/topics/08.18.04.HtmlPredefinedWidgets.md
b/juneau-docs/docs/topics/09.18.04.HtmlPredefinedWidgets.md
similarity index 100%
rename from juneau-docs/docs/topics/08.18.04.HtmlPredefinedWidgets.md
rename to juneau-docs/docs/topics/09.18.04.HtmlPredefinedWidgets.md
diff --git a/juneau-docs/docs/topics/08.18.05.HtmlUiCustomization.md
b/juneau-docs/docs/topics/09.18.05.HtmlUiCustomization.md
similarity index 100%
rename from juneau-docs/docs/topics/08.18.05.HtmlUiCustomization.md
rename to juneau-docs/docs/topics/09.18.05.HtmlUiCustomization.md
diff --git a/juneau-docs/docs/topics/08.18.06.HtmlStylesheets.md
b/juneau-docs/docs/topics/09.18.06.HtmlStylesheets.md
similarity index 100%
rename from juneau-docs/docs/topics/08.18.06.HtmlStylesheets.md
rename to juneau-docs/docs/topics/09.18.06.HtmlStylesheets.md
diff --git a/juneau-docs/docs/topics/08.19.00.LoggingAndDebugging.md
b/juneau-docs/docs/topics/09.19.00.LoggingAndDebugging.md
similarity index 100%
rename from juneau-docs/docs/topics/08.19.00.LoggingAndDebugging.md
rename to juneau-docs/docs/topics/09.19.00.LoggingAndDebugging.md
diff --git a/juneau-docs/docs/topics/08.20.00.HttpStatusCodes.md
b/juneau-docs/docs/topics/09.20.00.HttpStatusCodes.md
similarity index 100%
rename from juneau-docs/docs/topics/08.20.00.HttpStatusCodes.md
rename to juneau-docs/docs/topics/09.20.00.HttpStatusCodes.md
diff --git a/juneau-docs/docs/topics/08.21.00.BuiltInParameters.md
b/juneau-docs/docs/topics/09.21.00.BuiltInParameters.md
similarity index 100%
rename from juneau-docs/docs/topics/08.21.00.BuiltInParameters.md
rename to juneau-docs/docs/topics/09.21.00.BuiltInParameters.md
diff --git a/juneau-docs/docs/topics/08.22.00.UsingWithOsgi.md
b/juneau-docs/docs/topics/09.22.00.UsingWithOsgi.md
similarity index 100%
rename from juneau-docs/docs/topics/08.22.00.UsingWithOsgi.md
rename to juneau-docs/docs/topics/09.22.00.UsingWithOsgi.md
diff --git a/juneau-docs/docs/topics/08.23.00.RestContext.md
b/juneau-docs/docs/topics/09.23.00.RestContext.md
similarity index 100%
rename from juneau-docs/docs/topics/08.23.00.RestContext.md
rename to juneau-docs/docs/topics/09.23.00.RestContext.md
diff --git a/juneau-docs/docs/topics/08.24.00.RestOpContext.md
b/juneau-docs/docs/topics/09.24.00.RestOpContext.md
similarity index 100%
rename from juneau-docs/docs/topics/08.24.00.RestOpContext.md
rename to juneau-docs/docs/topics/09.24.00.RestOpContext.md
diff --git a/juneau-docs/docs/topics/08.25.00.ResponseProcessors.md
b/juneau-docs/docs/topics/09.25.00.ResponseProcessors.md
similarity index 100%
rename from juneau-docs/docs/topics/08.25.00.ResponseProcessors.md
rename to juneau-docs/docs/topics/09.25.00.ResponseProcessors.md
diff --git a/juneau-docs/docs/topics/08.26.00.RestRpc.md
b/juneau-docs/docs/topics/09.26.00.RestRpc.md
similarity index 100%
rename from juneau-docs/docs/topics/08.26.00.RestRpc.md
rename to juneau-docs/docs/topics/09.26.00.RestRpc.md
diff --git a/juneau-docs/docs/topics/08.27.00.SerializingUris.md
b/juneau-docs/docs/topics/09.27.00.SerializingUris.md
similarity index 100%
rename from juneau-docs/docs/topics/08.27.00.SerializingUris.md
rename to juneau-docs/docs/topics/09.27.00.SerializingUris.md
diff --git a/juneau-docs/docs/topics/08.28.00.UtilityBeans.md
b/juneau-docs/docs/topics/09.28.00.UtilityBeans.md
similarity index 100%
rename from juneau-docs/docs/topics/08.28.00.UtilityBeans.md
rename to juneau-docs/docs/topics/09.28.00.UtilityBeans.md
diff --git a/juneau-docs/docs/topics/08.29.00.HtmlBeans.md
b/juneau-docs/docs/topics/09.29.00.HtmlBeans.md
similarity index 100%
rename from juneau-docs/docs/topics/08.29.00.HtmlBeans.md
rename to juneau-docs/docs/topics/09.29.00.HtmlBeans.md
diff --git a/juneau-docs/docs/topics/08.30.00.OtherNotes.md
b/juneau-docs/docs/topics/09.30.00.OtherNotes.md
similarity index 100%
rename from juneau-docs/docs/topics/08.30.00.OtherNotes.md
rename to juneau-docs/docs/topics/09.30.00.OtherNotes.md
diff --git a/juneau-docs/docs/topics/08.31.00.Log4j.md
b/juneau-docs/docs/topics/09.31.00.Log4j.md
similarity index 100%
rename from juneau-docs/docs/topics/08.31.00.Log4j.md
rename to juneau-docs/docs/topics/09.31.00.Log4j.md
diff --git
a/juneau-docs/docs/topics/09.01.00.JuneauRestServerSpringbootBasics.md
b/juneau-docs/docs/topics/10.01.00.JuneauRestServerSpringbootBasics.md
similarity index 100%
rename from juneau-docs/docs/topics/09.01.00.JuneauRestServerSpringbootBasics.md
rename to juneau-docs/docs/topics/10.01.00.JuneauRestServerSpringbootBasics.md
diff --git a/juneau-docs/docs/topics/09.02.00.SpringBootOverview.md
b/juneau-docs/docs/topics/10.02.00.SpringBootOverview.md
similarity index 100%
rename from juneau-docs/docs/topics/09.02.00.SpringBootOverview.md
rename to juneau-docs/docs/topics/10.02.00.SpringBootOverview.md
diff --git a/juneau-docs/docs/topics/10.01.00.JuneauRestClientBasics.md
b/juneau-docs/docs/topics/11.01.00.JuneauRestClientBasics.md
similarity index 100%
rename from juneau-docs/docs/topics/10.01.00.JuneauRestClientBasics.md
rename to juneau-docs/docs/topics/11.01.00.JuneauRestClientBasics.md
diff --git a/juneau-docs/docs/topics/10.02.00.PojoMarshalling.md
b/juneau-docs/docs/topics/11.02.00.PojoMarshalling.md
similarity index 100%
rename from juneau-docs/docs/topics/10.02.00.PojoMarshalling.md
rename to juneau-docs/docs/topics/11.02.00.PojoMarshalling.md
diff --git a/juneau-docs/docs/topics/10.03.00.RequestParts.md
b/juneau-docs/docs/topics/11.03.00.RequestParts.md
similarity index 100%
rename from juneau-docs/docs/topics/10.03.00.RequestParts.md
rename to juneau-docs/docs/topics/11.03.00.RequestParts.md
diff --git a/juneau-docs/docs/topics/10.04.00.RequestContent.md
b/juneau-docs/docs/topics/11.04.00.RequestContent.md
similarity index 100%
rename from juneau-docs/docs/topics/10.04.00.RequestContent.md
rename to juneau-docs/docs/topics/11.04.00.RequestContent.md
diff --git a/juneau-docs/docs/topics/10.05.00.ResponseStatus.md
b/juneau-docs/docs/topics/11.05.00.ResponseStatus.md
similarity index 100%
rename from juneau-docs/docs/topics/10.05.00.ResponseStatus.md
rename to juneau-docs/docs/topics/11.05.00.ResponseStatus.md
diff --git a/juneau-docs/docs/topics/10.06.00.ResponseHeaders.md
b/juneau-docs/docs/topics/11.06.00.ResponseHeaders.md
similarity index 100%
rename from juneau-docs/docs/topics/10.06.00.ResponseHeaders.md
rename to juneau-docs/docs/topics/11.06.00.ResponseHeaders.md
diff --git a/juneau-docs/docs/topics/10.07.00.ResponseContent.md
b/juneau-docs/docs/topics/11.07.00.ResponseContent.md
similarity index 100%
rename from juneau-docs/docs/topics/10.07.00.ResponseContent.md
rename to juneau-docs/docs/topics/11.07.00.ResponseContent.md
diff --git a/juneau-docs/docs/topics/10.08.00.CustomCallHandlers.md
b/juneau-docs/docs/topics/11.08.00.CustomCallHandlers.md
similarity index 100%
rename from juneau-docs/docs/topics/10.08.00.CustomCallHandlers.md
rename to juneau-docs/docs/topics/11.08.00.CustomCallHandlers.md
diff --git a/juneau-docs/docs/topics/10.09.00.Interceptors.md
b/juneau-docs/docs/topics/11.09.00.Interceptors.md
similarity index 100%
rename from juneau-docs/docs/topics/10.09.00.Interceptors.md
rename to juneau-docs/docs/topics/11.09.00.Interceptors.md
diff --git a/juneau-docs/docs/topics/10.10.01.RestProxyBasics.md
b/juneau-docs/docs/topics/11.10.01.RestProxyBasics.md
similarity index 100%
rename from juneau-docs/docs/topics/10.10.01.RestProxyBasics.md
rename to juneau-docs/docs/topics/11.10.01.RestProxyBasics.md
diff --git a/juneau-docs/docs/topics/10.10.02.Remote.md
b/juneau-docs/docs/topics/11.10.02.Remote.md
similarity index 100%
rename from juneau-docs/docs/topics/10.10.02.Remote.md
rename to juneau-docs/docs/topics/11.10.02.Remote.md
diff --git a/juneau-docs/docs/topics/10.10.03.RemoteMethod.md
b/juneau-docs/docs/topics/11.10.03.RemoteMethod.md
similarity index 100%
rename from juneau-docs/docs/topics/10.10.03.RemoteMethod.md
rename to juneau-docs/docs/topics/11.10.03.RemoteMethod.md
diff --git a/juneau-docs/docs/topics/10.10.04.Content.md
b/juneau-docs/docs/topics/11.10.04.Content.md
similarity index 100%
rename from juneau-docs/docs/topics/10.10.04.Content.md
rename to juneau-docs/docs/topics/11.10.04.Content.md
diff --git a/juneau-docs/docs/topics/10.10.05.FormData.md
b/juneau-docs/docs/topics/11.10.05.FormData.md
similarity index 100%
rename from juneau-docs/docs/topics/10.10.05.FormData.md
rename to juneau-docs/docs/topics/11.10.05.FormData.md
diff --git a/juneau-docs/docs/topics/10.10.06.Query.md
b/juneau-docs/docs/topics/11.10.06.Query.md
similarity index 100%
rename from juneau-docs/docs/topics/10.10.06.Query.md
rename to juneau-docs/docs/topics/11.10.06.Query.md
diff --git a/juneau-docs/docs/topics/10.10.07.Header.md
b/juneau-docs/docs/topics/11.10.07.Header.md
similarity index 100%
rename from juneau-docs/docs/topics/10.10.07.Header.md
rename to juneau-docs/docs/topics/11.10.07.Header.md
diff --git a/juneau-docs/docs/topics/10.10.08.Path.md
b/juneau-docs/docs/topics/11.10.08.Path.md
similarity index 100%
rename from juneau-docs/docs/topics/10.10.08.Path.md
rename to juneau-docs/docs/topics/11.10.08.Path.md
diff --git a/juneau-docs/docs/topics/10.10.09.Request.md
b/juneau-docs/docs/topics/11.10.09.Request.md
similarity index 100%
rename from juneau-docs/docs/topics/10.10.09.Request.md
rename to juneau-docs/docs/topics/11.10.09.Request.md
diff --git a/juneau-docs/docs/topics/10.10.10.Response.md
b/juneau-docs/docs/topics/11.10.10.Response.md
similarity index 100%
rename from juneau-docs/docs/topics/10.10.10.Response.md
rename to juneau-docs/docs/topics/11.10.10.Response.md
diff --git a/juneau-docs/docs/topics/10.10.11.DualPurposeInterfaces.md
b/juneau-docs/docs/topics/11.10.11.DualPurposeInterfaces.md
similarity index 100%
rename from juneau-docs/docs/topics/10.10.11.DualPurposeInterfaces.md
rename to juneau-docs/docs/topics/11.10.11.DualPurposeInterfaces.md
diff --git a/juneau-docs/docs/topics/10.11.00.LoggingAndDebugging.md
b/juneau-docs/docs/topics/11.11.00.LoggingAndDebugging.md
similarity index 100%
rename from juneau-docs/docs/topics/10.11.00.LoggingAndDebugging.md
rename to juneau-docs/docs/topics/11.11.00.LoggingAndDebugging.md
diff --git a/juneau-docs/docs/topics/10.12.00.CustomizingHttpClient.md
b/juneau-docs/docs/topics/11.12.00.CustomizingHttpClient.md
similarity index 100%
rename from juneau-docs/docs/topics/10.12.00.CustomizingHttpClient.md
rename to juneau-docs/docs/topics/11.12.00.CustomizingHttpClient.md
diff --git a/juneau-docs/docs/topics/10.13.00.ExtendingRestClient.md
b/juneau-docs/docs/topics/11.13.00.ExtendingRestClient.md
similarity index 100%
rename from juneau-docs/docs/topics/10.13.00.ExtendingRestClient.md
rename to juneau-docs/docs/topics/11.13.00.ExtendingRestClient.md
diff --git a/juneau-docs/docs/topics/10.14.01.AuthenticationBasics.md
b/juneau-docs/docs/topics/11.14.01.AuthenticationBasics.md
similarity index 100%
rename from juneau-docs/docs/topics/10.14.01.AuthenticationBasics.md
rename to juneau-docs/docs/topics/11.14.01.AuthenticationBasics.md
diff --git a/juneau-docs/docs/topics/10.14.02.AuthenticationBASIC.md
b/juneau-docs/docs/topics/11.14.02.AuthenticationBASIC.md
similarity index 100%
rename from juneau-docs/docs/topics/10.14.02.AuthenticationBASIC.md
rename to juneau-docs/docs/topics/11.14.02.AuthenticationBASIC.md
diff --git a/juneau-docs/docs/topics/10.14.03.AuthenticationForm.md
b/juneau-docs/docs/topics/11.14.03.AuthenticationForm.md
similarity index 100%
rename from juneau-docs/docs/topics/10.14.03.AuthenticationForm.md
rename to juneau-docs/docs/topics/11.14.03.AuthenticationForm.md
diff --git a/juneau-docs/docs/topics/10.14.04.AuthenticationOIDC.md
b/juneau-docs/docs/topics/11.14.04.AuthenticationOIDC.md
similarity index 100%
rename from juneau-docs/docs/topics/10.14.04.AuthenticationOIDC.md
rename to juneau-docs/docs/topics/11.14.04.AuthenticationOIDC.md
diff --git a/juneau-docs/docs/topics/11.01.00.JuneauRestMockBasics.md
b/juneau-docs/docs/topics/12.01.00.JuneauRestMockBasics.md
similarity index 100%
rename from juneau-docs/docs/topics/11.01.00.JuneauRestMockBasics.md
rename to juneau-docs/docs/topics/12.01.00.JuneauRestMockBasics.md
diff --git a/juneau-docs/docs/topics/11.02.00.MockRestClientOverview.md
b/juneau-docs/docs/topics/12.02.00.MockRestClientOverview.md
similarity index 100%
rename from juneau-docs/docs/topics/11.02.00.MockRestClientOverview.md
rename to juneau-docs/docs/topics/12.02.00.MockRestClientOverview.md
diff --git a/juneau-docs/docs/topics/12.01.00.JuneauMicroserviceCoreBasics.md
b/juneau-docs/docs/topics/13.01.00.JuneauMicroserviceCoreBasics.md
similarity index 100%
rename from juneau-docs/docs/topics/12.01.00.JuneauMicroserviceCoreBasics.md
rename to juneau-docs/docs/topics/13.01.00.JuneauMicroserviceCoreBasics.md
diff --git a/juneau-docs/docs/topics/12.02.00.MicroserviceCoreOverview.md
b/juneau-docs/docs/topics/13.02.00.MicroserviceCoreOverview.md
similarity index 100%
rename from juneau-docs/docs/topics/12.02.00.MicroserviceCoreOverview.md
rename to juneau-docs/docs/topics/13.02.00.MicroserviceCoreOverview.md
diff --git a/juneau-docs/docs/topics/13.03.00.LifecycleMethods.md
b/juneau-docs/docs/topics/13.03.00.LifecycleMethods.md
deleted file mode 100644
index 2e4221d32..000000000
--- a/juneau-docs/docs/topics/13.03.00.LifecycleMethods.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-title: "Lifecycle Methods"
-slug: MicroserviceJettyLifecycleMethods
----
-
-To review, the <a
href="/site/apidocs/org/apache/juneau/microservice/Microservice.html"
target="_blank">Microservice</a> class contains the
-following lifecycle methods:
-
-<tree>
-<node-0><java-class><a
href="/site/apidocs/org/apache/juneau/microservice/Microservice.html"
target="_blank">Microservice</a></java-class></node-0>
-<node-1><java-method><a
href="/site/apidocs/org/apache/juneau/microservice/Microservice.html#start()"
target="_blank">start()</a></java-method></node-1>
-<node-1><java-method><a
href="/site/apidocs/org/apache/juneau/microservice/Microservice.html#startConsole()"
target="_blank">startConsole()</a></java-method></node-1>
-<node-1><java-method><a
href="/site/apidocs/org/apache/juneau/microservice/Microservice.html#join()"
target="_blank">join()</a></java-method></node-1>
-<node-1><java-method><a
href="/site/apidocs/org/apache/juneau/microservice/Microservice.html#stop()"
target="_blank">stop()</a></java-method></node-1>
-<node-1><java-method><a
href="/site/apidocs/org/apache/juneau/microservice/Microservice.html#stopConsole()"
target="_blank">stopConsole()</a></java-method></node-1>
-<node-1><java-method><a
href="/site/apidocs/org/apache/juneau/microservice/Microservice.html#exit()"
target="_blank">exit()</a></java-method></node-1>
-<node-1><java-method><a
href="/site/apidocs/org/apache/juneau/microservice/Microservice.html#kill()"
target="_blank">kill()</a></java-method></node-1>
-</tree>
-
-The <a
href="/site/apidocs/org/apache/juneau/microservice/jetty/JettyMicroservice.html"
target="_blank">JettyMicroservice</a> class which extends
-from <a href="/site/apidocs/org/apache/juneau/microservice/Microservice.html"
target="_blank">Microservice</a> provides the following additional
-lifecycle methods:
-
-<tree>
-<node-0><java-class><a
href="/site/apidocs/org/apache/juneau/microservice/jetty/JettyMicroservice.html"
target="_blank">JettyMicroservice</a></java-class></node-0>
-<node-1><java-method><a
href="/site/apidocs/org/apache/juneau/microservice/jetty/JettyMicroservice.html#createServer()"
target="_blank">createServer()</a></java-method></node-1>
-<node-1><java-method><a
href="/site/apidocs/org/apache/juneau/microservice/jetty/JettyMicroservice.html#startServer()"
target="_blank">startServer()</a></java-method></node-1>
-<node-1><java-method><a
href="/site/apidocs/org/apache/juneau/microservice/jetty/JettyMicroservice.html#destroyServer()"
target="_blank">destroyServer()</a></java-method></node-1>
-</tree>
-
-The additional lifecycle methods are typically not called directly but are
exposed to allow subclasses to provide
-customized behavior for these events.
-For this reason, these methods are left as non-final so that they can be
overridden.
-A typical implementation of an app with lifecycle methods might look like the
following:
-
-```java
-public class App {
-
- private static final JettyMicroservice MICROSERVICE;
-
- public static void main(String[] args) {
- MICROSERVICE = JettyMicroservice
- .create() // Create builder.
- .args(args) // Pass in args.
- .servlets(RootResource.class) // A Juneau RestServlet class.
- .build() // Create microservice.
- .start() // Start microservice.
- .startConsole() // Start console.
- .join() // Join thread.
- ;
- }
-
- public static void restart() {
- MICROSERVICE.stop().start();
- }
-
- public static void exit() {
- MICROSERVICE.exit();
- }
-}
-```
-
-Similar to <a
href="/site/apidocs/org/apache/juneau/microservice/Microservice.html#getInstance()"
target="_blank">Microservice.getInstance()</a>,
-the <a
href="/site/apidocs/org/apache/juneau/microservice/jetty/JettyMicroservice.html#getInstance()"
target="_blank">JettyMicroservice.getInstance()</a> also allows easy access to
the microservice:
-
-```java
-public class App {
-
- public static void main(String[] args) {
- JettyMicroservice
- .create() // Create builder.
- .args(args) // Pass in args.
- .servlets(RootResource.class) // A Juneau RestServlet class.
- .build() // Create microservice.
- .start() // Start microservice.
- .startConsole() // Start console.
- .join() // Join thread.
- ;
- }
-
- public static void restart() {
- JettyMicroservice.getInstance().stop().start();
- }
-
- public static void exit() {
- JettyMicroservice.getInstance().exit();
- }
-}
-```
diff --git a/juneau-docs/docs/topics/12.04.00.Args.md
b/juneau-docs/docs/topics/13.04.00.Args.md
similarity index 100%
rename from juneau-docs/docs/topics/12.04.00.Args.md
rename to juneau-docs/docs/topics/13.04.00.Args.md
diff --git a/juneau-docs/docs/topics/12.05.00.Manifest.md
b/juneau-docs/docs/topics/13.05.00.Manifest.md
similarity index 100%
rename from juneau-docs/docs/topics/12.05.00.Manifest.md
rename to juneau-docs/docs/topics/13.05.00.Manifest.md
diff --git a/juneau-docs/docs/topics/13.06.00.Config.md
b/juneau-docs/docs/topics/13.06.00.Config.md
deleted file mode 100644
index 287a473a0..000000000
--- a/juneau-docs/docs/topics/13.06.00.Config.md
+++ /dev/null
@@ -1,184 +0,0 @@
----
-title: "Config"
-slug: MicroserviceJettyConfig
----
-
-In Config, we described how to associate a configuration file with your
microservice.
-In this section we describe how that configuration can be used to customize
the behavior or your REST resource classes.
-
-The most common usage for the configuration file is to reference values using
the <a href="/site/apidocs/org/apache/juneau/config/vars/ConfigVar.html"
target="_blank">$C</a> variable in annotations.
-For example, the <a
href="/site/apidocs/org/apache/juneau/rest/config/DefaultConfig.html"
target="_blank">DefaultConfig</a> interface that defines
-the annotations that control the look-and-feel of classes that extend from <a
href="/site/apidocs/org/apache/juneau/rest/servlet/BasicRestServlet.html"
target="_blank">BasicRestServlet</a> use several `$C` variables to externalize
values:
-
-```java
-@Rest(
- ...
- // These are static files that are served up by the servlet under the
specified sub-paths.
- // For example, "/servletPath/htdocs/javadoc.css" resolves to the file
"[servlet-package]/htdocs/javadoc.css"
- // By default, we define static files through the external configuration
file.
- staticFiles="$C{REST/staticFiles}"
-)
-// HTML-page specific settings
-@HtmlDocConfig(
-
- // Default page header contents.
- header={
- "$RS{title}", // Use @Rest(title)
- "$RS{operationSummary,description}", // Use either @RestOp(summary) or
@Rest(description)
- "$C{REST/header}" // Extra header HTML defined in external config
file.
- },
-
- // Default stylesheet to use for the page.
- // Can be overridden from external config file.
- // Default is DevOps look-and-feel (aka Depression look-and-feel).
- stylesheet="$C{REST/theme,servlet:/htdocs/themes/devops.css}",
-
- // Default contents to add to the section of the HTML page.
- // Use it to add a favicon link to the page.
- head={
- ""
- },
-
- // No default page footer contents.
- // Can be overridden from external config file.
- footer="$C{REST/footer}",
- ...
-)
-public interface BasicRestConfig {}
-```
-
-These values in turn are pulled from the external configuration file shown
below.
-Note that the configuration file can also contain `$C` variables.
-
-```ini
-#=======================================================================================================================
-# REST settings
-#=======================================================================================================================
-[REST]
-
-# Mappings to folders containing static files.
-# Can be in the working directory or in the classpath.
-
-staticFiles = htdocs:files/htdocs
-
-# Stylesheet to use for HTML views.
-
-theme = servlet:/htdocs/themes/devops.css
-
-headerIcon = servlet:/htdocs/images/juneau.png
-headerLink = http://juneau.apache.org
-footerIcon = servlet:/htdocs/images/asf.png
-footerLink = http://www.apache.org
-
-favicon = $C{REST/headerIcon}
-header =
-
-footer =
-```
-Configuration files can also be accessed programmatically.
-
-There are 3 primary ways of getting access to the config file:
-
-- <a
href="/site/apidocs/org/apache/juneau/microservice/Microservice.html#getConfig()"
target="_blank">Microservice.getConfig()</a> - Any initialization-time
variables can be used.
-- <a href="/site/apidocs/org/apache/juneau/rest/RestContext.html#getConfig()"
target="_blank">RestContext.getConfig()</a> - Any initialization-time variables
can be used.
-
-:::tip Example usage
-```ini
-#----------------------------------
-# Configuration for MyHelloResource
-#----------------------------------
-[MyHelloResource]
-greeting = Hello world!
-```
-
-```java
-#---------------------------------
-# Contents of MyHelloResource.java
-#---------------------------------
-@Rest(...)
-public class MyHelloResource extends BasicRestServlet {
- private String greeting;
-
- // Or access config file in servlet init method.
- @Override /* Servlet */
- public void init() {
- Config config = getContext().getConfig();
- this.greeting = config.getString("MyHelloResource/greeting");
- }
-}
-```
-:::
-
-Additional user-defined variables at the servlet level can be defined by
adding a
-<a href="/site/apidocs/org/apache/juneau/rest/annotation/RestInit.html"
target="_blank">RestInit</a> hook method
-and using the `RestContext.Builder.vars(Class...)` method.
-- <a href="/site/apidocs/org/apache/juneau/rest/RestRequest.html#getConfig()"
target="_blank">RestRequest.getConfig()</a>
-- An instance method to access it from inside a REST method.
-
-Any initialization-time or request-time variables can be used.
-
-:::tip Example usage
-```ini
-#----------------------------------
-# Configuration for MyHelloResource
-#----------------------------------
-[MyHelloResource]
-greeting = Hello $RP{person}! // $RP is RequestPathVar
-localizedGreeting = $L{HelloMessage,$RP{person}} // $L is LocalizationVar with
args
-```
-
-```java
-#---------------------------------
-# Contents of MyHelloResource.java
-#---------------------------------
-@Rest(
- path="/hello",
- messages="nls/Messages",
- ...
-)
-public class MyHelloResource extends BasicRestServlet {
-
- /** Standard hello message. */
- @RestGet("/{person}")
- public String sayHello(RestRequest req) {
- return req.getConfig().getString("MyHelloResource/greeting");
- }
-
- /** Hello message in users language. */
- @RestGet("/localized/{person}")
- public String sayLocalizedHello(RestRequest req) {
- return req.getConfig().getString("MyHelloResource/localizedGreeting");
- }
-}
-```
-
-```ini
-#---------------------------------------
-# Contents of nls/Messages_en.properties
-
-#---------------------------------------
-MyHelloResource.HelloMessage = Hello {0}!
-```
-:::
-
-Additional user-defined variables can be defined at this level by overriding
the oajr.RestContext.Builder.vars(Class...)
-method.
-That sayLocalizedHello() example might need some explanation since there's a
lot going on there.
-
-Here's what happens when an HTTP call is made to `GET /hello/localized/Bob`:
-
-- The HTTP call matches the /hello path on the MyHelloResource class.
-- The HTTP call matches the /localized/\{person\} path on the
sayLocalizedHello() method.
-- The request attribute person gets assigned the value "Bob".
-- The call to req.getConfig().getString("MyHelloResource/localizedGreeting")
finds the value `$L{HelloMessage,$RP{person}}`.
-- The arguments in the `$L{}` variable get resolved, resulting in
`$L{HelloMessage,Bob}`.
-- The `$L{}` variable gets resolved to the message "Hello {0}!" in the
localized properties file of the servlet based on the Accept-Language header on
the request.
-- The arguments get replaced in the message resulting in "Hello Bob!".
-- The resulting message "Hello Bob!" is returned as a POJO to be serialized to
whatever content type was specified on the Accept header on the request.
-
-This particular example is needlessly complex but it gives an idea of how
variables can be used recursively to produce
-sophisticated results
-
-:::info See Also
-[juneau-config](/docs/topics/JuneauConfigBasics)
-:::
\ No newline at end of file
diff --git a/juneau-docs/docs/topics/12.07.00.SystemProperties.md
b/juneau-docs/docs/topics/13.07.00.SystemProperties.md
similarity index 100%
rename from juneau-docs/docs/topics/12.07.00.SystemProperties.md
rename to juneau-docs/docs/topics/13.07.00.SystemProperties.md
diff --git a/juneau-docs/docs/topics/12.08.00.VarResolver.md
b/juneau-docs/docs/topics/13.08.00.VarResolver.md
similarity index 100%
rename from juneau-docs/docs/topics/12.08.00.VarResolver.md
rename to juneau-docs/docs/topics/13.08.00.VarResolver.md
diff --git a/juneau-docs/docs/topics/12.09.00.ConsoleCommands.md
b/juneau-docs/docs/topics/13.09.00.ConsoleCommands.md
similarity index 100%
rename from juneau-docs/docs/topics/12.09.00.ConsoleCommands.md
rename to juneau-docs/docs/topics/13.09.00.ConsoleCommands.md
diff --git a/juneau-docs/docs/topics/12.10.00.Listeners.md
b/juneau-docs/docs/topics/13.10.00.Listeners.md
similarity index 100%
rename from juneau-docs/docs/topics/12.10.00.Listeners.md
rename to juneau-docs/docs/topics/13.10.00.Listeners.md
diff --git a/juneau-docs/docs/topics/13.01.00.JuneauMicroserviceJettyBasics.md
b/juneau-docs/docs/topics/14.01.00.JuneauMicroserviceJettyBasics.md
similarity index 100%
rename from juneau-docs/docs/topics/13.01.00.JuneauMicroserviceJettyBasics.md
rename to juneau-docs/docs/topics/14.01.00.JuneauMicroserviceJettyBasics.md
diff --git a/juneau-docs/docs/topics/13.02.00.MicroserviceJettyOverview.md
b/juneau-docs/docs/topics/14.02.00.MicroserviceJettyOverview.md
similarity index 100%
rename from juneau-docs/docs/topics/13.02.00.MicroserviceJettyOverview.md
rename to juneau-docs/docs/topics/14.02.00.MicroserviceJettyOverview.md
diff --git a/juneau-docs/docs/topics/12.03.00.LifecycleMethods.md
b/juneau-docs/docs/topics/14.03.00.LifecycleMethods.md
similarity index 100%
rename from juneau-docs/docs/topics/12.03.00.LifecycleMethods.md
rename to juneau-docs/docs/topics/14.03.00.LifecycleMethods.md
diff --git a/juneau-docs/docs/topics/13.04.00.ResourceClasses.md
b/juneau-docs/docs/topics/14.04.00.ResourceClasses.md
similarity index 100%
rename from juneau-docs/docs/topics/13.04.00.ResourceClasses.md
rename to juneau-docs/docs/topics/14.04.00.ResourceClasses.md
diff --git a/juneau-docs/docs/topics/13.05.00.PredefinedResourceClasses.md
b/juneau-docs/docs/topics/14.05.00.PredefinedResourceClasses.md
similarity index 100%
rename from juneau-docs/docs/topics/13.05.00.PredefinedResourceClasses.md
rename to juneau-docs/docs/topics/14.05.00.PredefinedResourceClasses.md
diff --git a/juneau-docs/docs/topics/12.06.00.Config.md
b/juneau-docs/docs/topics/14.06.00.Config.md
similarity index 100%
rename from juneau-docs/docs/topics/12.06.00.Config.md
rename to juneau-docs/docs/topics/14.06.00.Config.md
diff --git a/juneau-docs/docs/topics/13.07.00.JettyXml.md
b/juneau-docs/docs/topics/14.07.00.JettyXml.md
similarity index 100%
rename from juneau-docs/docs/topics/13.07.00.JettyXml.md
rename to juneau-docs/docs/topics/14.07.00.JettyXml.md
diff --git a/juneau-docs/docs/topics/13.08.00.UiCustomization.md
b/juneau-docs/docs/topics/14.08.00.UiCustomization.md
similarity index 100%
rename from juneau-docs/docs/topics/13.08.00.UiCustomization.md
rename to juneau-docs/docs/topics/14.08.00.UiCustomization.md
diff --git a/juneau-docs/docs/topics/13.09.00.Extending.md
b/juneau-docs/docs/topics/14.09.00.Extending.md
similarity index 100%
rename from juneau-docs/docs/topics/13.09.00.Extending.md
rename to juneau-docs/docs/topics/14.09.00.Extending.md
diff --git a/juneau-docs/docs/topics/14.01.00.MyJettyMicroserviceBasics.md
b/juneau-docs/docs/topics/15.01.00.MyJettyMicroserviceBasics.md
similarity index 100%
rename from juneau-docs/docs/topics/14.01.00.MyJettyMicroserviceBasics.md
rename to juneau-docs/docs/topics/15.01.00.MyJettyMicroserviceBasics.md
diff --git a/juneau-docs/docs/topics/14.02.00.MyJettyMicroserviceInstalling.md
b/juneau-docs/docs/topics/15.02.00.MyJettyMicroserviceInstalling.md
similarity index 100%
rename from juneau-docs/docs/topics/14.02.00.MyJettyMicroserviceInstalling.md
rename to juneau-docs/docs/topics/15.02.00.MyJettyMicroserviceInstalling.md
diff --git a/juneau-docs/docs/topics/14.03.00.MyJettyMicroserviceRunning.md
b/juneau-docs/docs/topics/15.03.00.MyJettyMicroserviceRunning.md
similarity index 100%
rename from juneau-docs/docs/topics/14.03.00.MyJettyMicroserviceRunning.md
rename to juneau-docs/docs/topics/15.03.00.MyJettyMicroserviceRunning.md
diff --git a/juneau-docs/docs/topics/14.04.00.MyJettyMicroserviceBuilding.md
b/juneau-docs/docs/topics/15.04.00.MyJettyMicroserviceBuilding.md
similarity index 100%
rename from juneau-docs/docs/topics/14.04.00.MyJettyMicroserviceBuilding.md
rename to juneau-docs/docs/topics/15.04.00.MyJettyMicroserviceBuilding.md
diff --git a/juneau-docs/docs/topics/15.01.00.MySpringBootMicroserviceBasics.md
b/juneau-docs/docs/topics/16.01.00.MySpringBootMicroserviceBasics.md
similarity index 100%
rename from juneau-docs/docs/topics/15.01.00.MySpringBootMicroserviceBasics.md
rename to juneau-docs/docs/topics/16.01.00.MySpringBootMicroserviceBasics.md
diff --git
a/juneau-docs/docs/topics/15.02.00.MySpringBootMicroserviceInstalling.md
b/juneau-docs/docs/topics/16.02.00.MySpringBootMicroserviceInstalling.md
similarity index 100%
rename from
juneau-docs/docs/topics/15.02.00.MySpringBootMicroserviceInstalling.md
rename to juneau-docs/docs/topics/16.02.00.MySpringBootMicroserviceInstalling.md
diff --git
a/juneau-docs/docs/topics/15.03.00.MySpringBootMicroserviceRunning.md
b/juneau-docs/docs/topics/16.03.00.MySpringBootMicroserviceRunning.md
similarity index 100%
rename from juneau-docs/docs/topics/15.03.00.MySpringBootMicroserviceRunning.md
rename to juneau-docs/docs/topics/16.03.00.MySpringBootMicroserviceRunning.md
diff --git
a/juneau-docs/docs/topics/15.04.00.MySpringBootMicroserviceBuilding.md
b/juneau-docs/docs/topics/16.04.00.MySpringBootMicroserviceBuilding.md
similarity index 100%
rename from juneau-docs/docs/topics/15.04.00.MySpringBootMicroserviceBuilding.md
rename to juneau-docs/docs/topics/16.04.00.MySpringBootMicroserviceBuilding.md
diff --git a/juneau-docs/docs/topics/16.01.00.JuneauPetstoreBasics.md
b/juneau-docs/docs/topics/17.01.00.JuneauPetstoreBasics.md
similarity index 100%
rename from juneau-docs/docs/topics/16.01.00.JuneauPetstoreBasics.md
rename to juneau-docs/docs/topics/17.01.00.JuneauPetstoreBasics.md
diff --git a/juneau-docs/docs/topics/16.02.00.JuneauPetstoreRunning.md
b/juneau-docs/docs/topics/17.02.00.JuneauPetstoreRunning.md
similarity index 100%
rename from juneau-docs/docs/topics/16.02.00.JuneauPetstoreRunning.md
rename to juneau-docs/docs/topics/17.02.00.JuneauPetstoreRunning.md
diff --git a/juneau-docs/docs/topics/16.03.00.JuneauPetstoreApi.md
b/juneau-docs/docs/topics/17.03.00.JuneauPetstoreApi.md
similarity index 100%
rename from juneau-docs/docs/topics/16.03.00.JuneauPetstoreApi.md
rename to juneau-docs/docs/topics/17.03.00.JuneauPetstoreApi.md
diff --git a/juneau-docs/docs/topics/16.04.00.JuneauPetstoreClient.md
b/juneau-docs/docs/topics/17.04.00.JuneauPetstoreClient.md
similarity index 100%
rename from juneau-docs/docs/topics/16.04.00.JuneauPetstoreClient.md
rename to juneau-docs/docs/topics/17.04.00.JuneauPetstoreClient.md
diff --git a/juneau-docs/docs/topics/16.05.00.JuneauPetstoreServer.md
b/juneau-docs/docs/topics/17.05.00.JuneauPetstoreServer.md
similarity index 100%
rename from juneau-docs/docs/topics/16.05.00.JuneauPetstoreServer.md
rename to juneau-docs/docs/topics/17.05.00.JuneauPetstoreServer.md
diff --git a/juneau-docs/docs/topics/17.01.00.JuneauExamplesCore.md
b/juneau-docs/docs/topics/18.01.00.JuneauExamplesCore.md
similarity index 100%
rename from juneau-docs/docs/topics/17.01.00.JuneauExamplesCore.md
rename to juneau-docs/docs/topics/18.01.00.JuneauExamplesCore.md
diff --git a/juneau-docs/docs/topics/17.02.00.JuneauExamplesRest.md
b/juneau-docs/docs/topics/18.02.00.JuneauExamplesRest.md
similarity index 100%
rename from juneau-docs/docs/topics/17.02.00.JuneauExamplesRest.md
rename to juneau-docs/docs/topics/18.02.00.JuneauExamplesRest.md
diff --git a/juneau-docs/docs/topics/17.03.00.JuneauExamplesRestJetty.md
b/juneau-docs/docs/topics/18.03.00.JuneauExamplesRestJetty.md
similarity index 100%
rename from juneau-docs/docs/topics/17.03.00.JuneauExamplesRestJetty.md
rename to juneau-docs/docs/topics/18.03.00.JuneauExamplesRestJetty.md
diff --git a/juneau-docs/docs/topics/17.04.00.JuneauExamplesRestSpringboot.md
b/juneau-docs/docs/topics/18.04.00.JuneauExamplesRestSpringboot.md
similarity index 100%
rename from juneau-docs/docs/topics/17.04.00.JuneauExamplesRestSpringboot.md
rename to juneau-docs/docs/topics/18.04.00.JuneauExamplesRestSpringboot.md
diff --git a/juneau-docs/docs/topics/18.01.00.SecurityBasics.md
b/juneau-docs/docs/topics/19.01.00.SecurityBasics.md
similarity index 100%
rename from juneau-docs/docs/topics/18.01.00.SecurityBasics.md
rename to juneau-docs/docs/topics/19.01.00.SecurityBasics.md
diff --git a/juneau-docs/docs/topics/18.02.00.MarshallingSecurity.md
b/juneau-docs/docs/topics/19.02.00.MarshallingSecurity.md
similarity index 100%
rename from juneau-docs/docs/topics/18.02.00.MarshallingSecurity.md
rename to juneau-docs/docs/topics/19.02.00.MarshallingSecurity.md
diff --git a/juneau-docs/docs/topics/18.03.00.SvlSecurity.md
b/juneau-docs/docs/topics/19.03.00.SvlSecurity.md
similarity index 100%
rename from juneau-docs/docs/topics/18.03.00.SvlSecurity.md
rename to juneau-docs/docs/topics/19.03.00.SvlSecurity.md
diff --git a/juneau-docs/docs/topics/18.04.00.RestSecurity.md
b/juneau-docs/docs/topics/19.04.00.RestSecurity.md
similarity index 100%
rename from juneau-docs/docs/topics/18.04.00.RestSecurity.md
rename to juneau-docs/docs/topics/19.04.00.RestSecurity.md
diff --git a/juneau-docs/docs/topics/19.01.00.V9.0-migration-guide.md
b/juneau-docs/docs/topics/20.01.00.V9.0-migration-guide.md
similarity index 100%
rename from juneau-docs/docs/topics/19.01.00.V9.0-migration-guide.md
rename to juneau-docs/docs/topics/20.01.00.V9.0-migration-guide.md
diff --git a/juneau-docs/sidebars.ts b/juneau-docs/sidebars.ts
index 30814411d..974887619 100644
--- a/juneau-docs/sidebars.ts
+++ b/juneau-docs/sidebars.ts
@@ -838,576 +838,588 @@ const sidebars: SidebarsConfig = {
},
{
type: 'category',
- label: '7. juneau-rest-common',
+ label: '7. juneau-bct',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/07.01.00.JuneauRestCommonBasics',
- label: '7.1. juneau-rest-common Basics',
+ id: 'topics/07.01.00.JuneauBctBasics',
+ label: '7.1. juneau-bct Basics',
+ },
+ ],
+ },
+ {
+ type: 'category',
+ label: '8. juneau-rest-common',
+ collapsed: true,
+ items: [
+ {
+ type: 'doc',
+ id: 'topics/08.01.00.JuneauRestCommonBasics',
+ label: '8.1. juneau-rest-common Basics',
},
{
type: 'doc',
- id: 'topics/07.02.00.HelperClasses',
- label: '7.2. Helper Classes',
+ id: 'topics/08.02.00.HelperClasses',
+ label: '8.2. Helper Classes',
},
{
type: 'doc',
- id: 'topics/07.03.00.Annotations',
- label: '7.3. Annotations',
+ id: 'topics/08.03.00.Annotations',
+ label: '8.3. Annotations',
},
{
type: 'doc',
- id: 'topics/07.04.00.HttpHeaders',
- label: '7.4. HTTP Headers',
+ id: 'topics/08.04.00.HttpHeaders',
+ label: '8.4. HTTP Headers',
},
{
type: 'doc',
- id: 'topics/07.05.00.HttpParts',
- label: '7.5. HTTP Parts',
+ id: 'topics/08.05.00.HttpParts',
+ label: '9.5. HTTP Parts',
},
{
type: 'doc',
- id: 'topics/07.06.00.HttpEntitiesAndResources',
- label: '7.6. HTTP Entities and Resources',
+ id: 'topics/08.06.00.HttpEntitiesAndResources',
+ label: '8.6. HTTP Entities and Resources',
},
{
type: 'doc',
- id: 'topics/07.07.00.HttpResponses',
- label: '7.7. HTTP Responses',
+ id: 'topics/08.07.00.HttpResponses',
+ label: '8.7. HTTP Responses',
},
{
type: 'doc',
- id: 'topics/07.08.00.RemoteProxyInterfaces',
- label: '7.8. Remote Proxy Interfaces',
+ id: 'topics/08.08.00.RemoteProxyInterfaces',
+ label: '8.8. Remote Proxy Interfaces',
},
],
},
{
type: 'category',
- label: '8. juneau-rest-server',
+ label: '9. juneau-rest-server',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/08.01.00.JuneauRestServerBasics',
- label: '8.1. juneau-rest-server Basics',
+ id: 'topics/09.01.00.JuneauRestServerBasics',
+ label: '9.1. juneau-rest-server Basics',
},
{
type: 'doc',
- id: 'topics/08.02.00.RestServerOverview',
- label: '8.2. REST Server Overview',
+ id: 'topics/09.02.00.RestServerOverview',
+ label: '9.2. REST Server Overview',
},
{
type: 'category',
- label: '8.3. @Rest-Annotated Classes',
+ label: '9.3. @Rest-Annotated Classes',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/08.03.01.RestAnnotatedClassBasics',
- label: '8.3.1. @Rest-Annotated Class Basics',
+ id: 'topics/09.03.01.RestAnnotatedClassBasics',
+ label: '9.3.1. @Rest-Annotated Class Basics',
},
{
type: 'doc',
- id: 'topics/08.03.02.PredefinedClasses',
- label: '8.3.2. Predefined Classes',
+ id: 'topics/09.03.02.PredefinedClasses',
+ label: '9.3.2. Predefined Classes',
},
{
type: 'doc',
- id: 'topics/08.03.03.ChildResources',
- label: '8.3.3. Child Resources',
+ id: 'topics/09.03.03.ChildResources',
+ label: '9.3.3. Child Resources',
},
{
type: 'doc',
- id: 'topics/08.03.04.PathVariables',
- label: '8.3.4. Path Variables',
+ id: 'topics/09.03.04.PathVariables',
+ label: '9.3.4. Path Variables',
},
{
type: 'doc',
- id: 'topics/08.03.05.Deployment',
- label: '8.3.5. Deployment',
+ id: 'topics/09.03.05.Deployment',
+ label: '9.3.5. Deployment',
},
{
type: 'doc',
- id: 'topics/08.03.06.LifecycleHooks',
- label: '8.3.6. Lifecycle Hooks',
+ id: 'topics/09.03.06.LifecycleHooks',
+ label: '9.3.6. Lifecycle Hooks',
},
],
},
{
type: 'category',
- label: '8.4. @RestOp-Annotated Methods',
+ label: '9.4. @RestOp-Annotated Methods',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/08.04.01.RestOpAnnotatedMethodBasics',
- label: '8.4.1. @RestOp-Annotated Method Basics',
+ id: 'topics/09.04.01.RestOpAnnotatedMethodBasics',
+ label: '9.4.1. @RestOp-Annotated Method Basics',
},
{
type: 'doc',
- id: 'topics/08.04.02.InferredHttpMethodsAndPaths',
- label: '8.4.2. Inferred HTTP Methods and Paths',
+ id: 'topics/09.04.02.InferredHttpMethodsAndPaths',
+ label: '9.4.2. Inferred HTTP Methods and Paths',
},
{
type: 'doc',
- id: 'topics/08.04.03.JavaMethodParameters',
- label: '8.4.3. Java Method Parameters',
+ id: 'topics/09.04.03.JavaMethodParameters',
+ label: '9.4.3. Java Method Parameters',
},
{
type: 'doc',
- id: 'topics/08.04.04.JavaMethodReturnTypes',
- label: '8.4.4. Java Method Return Types',
+ id: 'topics/09.04.04.JavaMethodReturnTypes',
+ label: '9.4.4. Java Method Return Types',
},
{
type: 'doc',
- id: 'topics/08.04.05.JavaMethodThrowableTypes',
- label: '8.4.5. Java Method Throwable Types',
+ id: 'topics/09.04.05.JavaMethodThrowableTypes',
+ label: '9.4.5. Java Method Throwable Types',
},
{
type: 'doc',
- id: 'topics/08.04.06.PathPatterns',
- label: '8.4.6. Path Patterns',
+ id: 'topics/09.04.06.PathPatterns',
+ label: '9.4.6. Path Patterns',
},
{
type: 'doc',
- id: 'topics/08.04.07.Matchers',
- label: '8.4.7. Matchers',
+ id: 'topics/09.04.07.Matchers',
+ label: '9.4.7. Matchers',
},
{
type: 'doc',
- id: 'topics/08.04.08.OverloadingHttpMethods',
- label: '8.4.8. Overloading HTTP Methods',
+ id: 'topics/09.04.08.OverloadingHttpMethods',
+ label: '9.4.8. Overloading HTTP Methods',
},
{
type: 'doc',
- id: 'topics/08.04.09.AdditionalInformation',
- label: '8.4.9. Additional Information',
+ id: 'topics/09.04.09.AdditionalInformation',
+ label: '9.4.9. Additional Information',
},
],
},
{
type: 'category',
- label: '8.5. HTTP Parts',
+ label: '9.5. HTTP Parts',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/08.05.01.HttpPartBasics',
- label: '8.5.1. HTTP Part Basics',
+ id: 'topics/09.05.01.HttpPartBasics',
+ label: '9.5.1. HTTP Part Basics',
},
{
type: 'doc',
- id: 'topics/08.05.02.PartMarshallers',
- label: '8.5.2. Part Marshallers',
+ id: 'topics/09.05.02.PartMarshallers',
+ label: '9.5.2. Part Marshallers',
},
{
type: 'doc',
- id: 'topics/08.05.03.HttpPartAnnotations',
- label: '8.5.3. HTTP Part Annotations',
+ id: 'topics/09.05.03.HttpPartAnnotations',
+ label: '9.5.3. HTTP Part Annotations',
},
{
type: 'doc',
- id: 'topics/08.05.04.DefaultParts',
- label: '8.5.4. Default Parts',
+ id: 'topics/09.05.04.DefaultParts',
+ label: '9.5.4. Default Parts',
},
{
type: 'doc',
- id: 'topics/08.05.05.RequestBeans',
- label: '8.5.5. Request Beans',
+ id: 'topics/09.05.05.RequestBeans',
+ label: '9.5.5. Request Beans',
},
{
type: 'doc',
- id: 'topics/08.05.06.ResponseBeans',
- label: '8.5.6. Response Beans',
+ id: 'topics/09.05.06.ResponseBeans',
+ label: '9.5.6. Response Beans',
},
{
type: 'doc',
- id: 'topics/08.05.07.HttpPartApis',
- label: '8.5.7. HTTP Part APIs',
+ id: 'topics/09.05.07.HttpPartApis',
+ label: '9.5.7. HTTP Part APIs',
},
],
},
{
type: 'doc',
- id: 'topics/08.06.00.Marshalling',
- label: '8.6. Marshalling',
+ id: 'topics/09.06.00.Marshalling',
+ label: '9.6. Marshalling',
},
{
type: 'doc',
- id: 'topics/08.07.00.HandlingFormPosts',
- label: '8.7. Handling Form Posts',
+ id: 'topics/09.07.00.HandlingFormPosts',
+ label: '9.7. Handling Form Posts',
},
{
type: 'doc',
- id: 'topics/08.08.00.Guards',
- label: '8.8. Guards',
+ id: 'topics/09.08.00.Guards',
+ label: '9.8. Guards',
},
{
type: 'doc',
- id: 'topics/08.09.00.Converters',
- label: '8.9. Converters',
+ id: 'topics/09.09.00.Converters',
+ label: '9.9. Converters',
},
{
type: 'doc',
- id: 'topics/08.10.00.LocalizedMessages',
- label: '8.10. Localized Messages',
+ id: 'topics/09.10.00.LocalizedMessages',
+ label: '9.10. Localized Messages',
},
{
type: 'doc',
- id: 'topics/08.11.00.Encoders',
- label: '8.11. Encoders',
+ id: 'topics/09.11.00.Encoders',
+ label: '9.11. Encoders',
},
{
type: 'doc',
- id: 'topics/08.12.00.ConfigurationFiles',
- label: '8.12. Configuration Files',
+ id: 'topics/09.12.00.ConfigurationFiles',
+ label: '9.12. Configuration Files',
},
{
type: 'doc',
- id: 'topics/08.13.00.SvlVariables',
- label: '8.13. SVL Variables',
+ id: 'topics/09.13.00.SvlVariables',
+ label: '9.13. SVL Variables',
},
{
type: 'doc',
- id: 'topics/08.14.00.StaticFiles',
- label: '8.14. Static Files',
+ id: 'topics/09.14.00.StaticFiles',
+ label: '9.14. Static Files',
},
{
type: 'doc',
- id: 'topics/08.15.00.ClientVersioning',
- label: '8.15. Client Versioning',
+ id: 'topics/09.15.00.ClientVersioning',
+ label: '9.15. Client Versioning',
},
{
type: 'category',
- label: '8.16. Swagger',
+ label: '9.16. Swagger',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/08.16.01.SwaggerBasics',
- label: '8.16.1. Swagger Basics',
+ id: 'topics/09.16.01.SwaggerBasics',
+ label: '9.16.1. Swagger Basics',
},
{
type: 'doc',
- id: 'topics/08.16.02.BasicRestServletSwagger',
- label: '8.16.2. Basic REST Servlet Swagger',
+ id: 'topics/09.16.02.BasicRestServletSwagger',
+ label: '9.16.2. Basic REST Servlet Swagger',
},
{
type: 'doc',
- id: 'topics/08.16.03.BasicSwaggerInfo',
- label: '8.16.3. Basic Swagger Info',
+ id: 'topics/09.16.03.BasicSwaggerInfo',
+ label: '9.16.3. Basic Swagger Info',
},
{
type: 'doc',
- id: 'topics/08.16.04.SwaggerTags',
- label: '8.16.4. Swagger Tags',
+ id: 'topics/09.16.04.SwaggerTags',
+ label: '9.16.4. Swagger Tags',
},
{
type: 'doc',
- id: 'topics/08.16.05.SwaggerOperations',
- label: '8.16.5. Swagger Operations',
+ id: 'topics/09.16.05.SwaggerOperations',
+ label: '9.16.5. Swagger Operations',
},
{
type: 'doc',
- id: 'topics/08.16.06.SwaggerParameters',
- label: '8.16.6. Swagger Parameters',
+ id: 'topics/09.16.06.SwaggerParameters',
+ label: '9.16.6. Swagger Parameters',
},
{
type: 'doc',
- id: 'topics/08.16.07.SwaggerResponses',
- label: '8.16.7. Swagger Responses',
+ id: 'topics/09.16.07.SwaggerResponses',
+ label: '9.16.7. Swagger Responses',
},
{
type: 'doc',
- id: 'topics/08.16.08.SwaggerModels',
- label: '8.16.8. Swagger Models',
+ id: 'topics/09.16.08.SwaggerModels',
+ label: '9.16.8. Swagger Models',
},
{
type: 'doc',
- id: 'topics/08.16.09.SwaggerStylesheet',
- label: '8.16.9. Swagger Stylesheet',
+ id: 'topics/09.16.09.SwaggerStylesheet',
+ label: '9.16.9. Swagger Stylesheet',
},
],
},
{
type: 'doc',
- id: 'topics/08.17.00.ExecutionStatistics',
- label: '8.17. REST method execution statistics',
+ id: 'topics/09.17.00.ExecutionStatistics',
+ label: '9.17. REST method execution statistics',
},
{
type: 'category',
- label: '8.18. @HtmlDocConfig Annotation',
+ label: '9.18. @HtmlDocConfig Annotation',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/08.18.01.HtmlDocConfigAnnotationBasics',
- label: '8.18.1. @HtmlDocConfig Annotation Basics',
+ id: 'topics/09.18.01.HtmlDocConfigAnnotationBasics',
+ label: '9.18.1. @HtmlDocConfig Annotation Basics',
},
{
type: 'doc',
- id: 'topics/08.18.02.HtmlUIvsDI',
- label: '8.18.2. HTML UI vs DI',
+ id: 'topics/09.18.02.HtmlUIvsDI',
+ label: '9.18.2. HTML UI vs DI',
},
{
type: 'doc',
- id: 'topics/08.18.03.HtmlWidgets',
- label: '8.18.3. HTML Widgets',
+ id: 'topics/09.18.03.HtmlWidgets',
+ label: '9.18.3. HTML Widgets',
},
{
type: 'doc',
- id: 'topics/08.18.04.HtmlPredefinedWidgets',
- label: '8.18.4. HTML Predefined Widgets',
+ id: 'topics/09.18.04.HtmlPredefinedWidgets',
+ label: '9.18.4. HTML Predefined Widgets',
},
{
type: 'doc',
- id: 'topics/08.18.05.HtmlUiCustomization',
- label: '8.18.5. HTML UI Customization',
+ id: 'topics/09.18.05.HtmlUiCustomization',
+ label: '9.18.5. HTML UI Customization',
},
{
type: 'doc',
- id: 'topics/08.18.06.HtmlStylesheets',
- label: '8.18.6. HTML Stylesheets',
+ id: 'topics/09.18.06.HtmlStylesheets',
+ label: '9.18.6. HTML Stylesheets',
},
],
},
{
type: 'doc',
- id: 'topics/08.19.00.LoggingAndDebugging',
- label: '8.19. Logging and Debugging',
+ id: 'topics/09.19.00.LoggingAndDebugging',
+ label: '9.19. Logging and Debugging',
},
{
type: 'doc',
- id: 'topics/08.20.00.HttpStatusCodes',
- label: '8.20. HTTP Status Codes',
+ id: 'topics/09.20.00.HttpStatusCodes',
+ label: '9.20. HTTP Status Codes',
},
{
type: 'doc',
- id: 'topics/08.21.00.BuiltInParameters',
- label: '8.21. Built-In Parameters',
+ id: 'topics/09.21.00.BuiltInParameters',
+ label: '9.21. Built-In Parameters',
},
{
type: 'doc',
- id: 'topics/08.22.00.UsingWithOsgi',
- label: '8.22. Using with OSGi',
+ id: 'topics/09.22.00.UsingWithOsgi',
+ label: '9.22. Using with OSGi',
},
{
type: 'doc',
- id: 'topics/08.23.00.RestContext',
- label: '8.23. REST Context',
+ id: 'topics/09.23.00.RestContext',
+ label: '9.23. REST Context',
},
{
type: 'doc',
- id: 'topics/08.24.00.RestOpContext',
- label: '8.24. RestOp Context',
+ id: 'topics/09.24.00.RestOpContext',
+ label: '9.24. RestOp Context',
},
{
type: 'doc',
- id: 'topics/08.25.00.ResponseProcessors',
- label: '8.25. Response Processors',
+ id: 'topics/09.25.00.ResponseProcessors',
+ label: '9.25. Response Processors',
},
{
type: 'doc',
- id: 'topics/08.26.00.RestRpc',
- label: '8.26. REST RPC',
+ id: 'topics/09.26.00.RestRpc',
+ label: '9.26. REST RPC',
},
{
type: 'doc',
- id: 'topics/08.27.00.SerializingUris',
- label: '8.27. Serializing URIs',
+ id: 'topics/09.27.00.SerializingUris',
+ label: '9.27. Serializing URIs',
},
{
type: 'doc',
- id: 'topics/08.28.00.UtilityBeans',
- label: '8.28. Utility Beans',
+ id: 'topics/09.28.00.UtilityBeans',
+ label: '9.28. Utility Beans',
},
{
type: 'doc',
- id: 'topics/08.29.00.HtmlBeans',
- label: '8.29. HTML Beans',
+ id: 'topics/09.29.00.HtmlBeans',
+ label: '9.29. HTML Beans',
},
{
type: 'doc',
- id: 'topics/08.30.00.OtherNotes',
- label: '8.30. Other Notes',
+ id: 'topics/09.30.00.OtherNotes',
+ label: '9.30. Other Notes',
},
{
type: 'doc',
- id: 'topics/08.31.00.Log4j',
- label: '8.31. Log4J',
+ id: 'topics/09.31.00.Log4j',
+ label: '9.31. Log4J',
},
],
},
{
type: 'category',
- label: '9. juneau-rest-server-springboot',
+ label: '10. juneau-rest-server-springboot',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/09.01.00.JuneauRestServerSpringbootBasics',
- label: '9.1. juneau-rest-server-springboot Basics',
+ id: 'topics/10.01.00.JuneauRestServerSpringbootBasics',
+ label: '10.1. juneau-rest-server-springboot Basics',
},
{
type: 'doc',
- id: 'topics/09.02.00.SpringBootOverview',
- label: '9.2. Spring Boot Overview',
+ id: 'topics/10.02.00.SpringBootOverview',
+ label: '10.2. Spring Boot Overview',
},
],
},
{
type: 'category',
- label: '10. juneau-rest-client',
+ label: '11. juneau-rest-client',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/10.01.00.JuneauRestClientBasics',
- label: '10.1. juneau-rest-client Basics',
+ id: 'topics/11.01.00.JuneauRestClientBasics',
+ label: '11.1. juneau-rest-client Basics',
},
{
type: 'doc',
- id: 'topics/10.02.00.PojoMarshalling',
- label: '10.2. POJO Marshalling',
+ id: 'topics/11.02.00.PojoMarshalling',
+ label: '11.2. POJO Marshalling',
},
{
type: 'doc',
- id: 'topics/10.03.00.RequestParts',
- label: '10.3. Request Parts',
+ id: 'topics/11.03.00.RequestParts',
+ label: '11.3. Request Parts',
},
{
type: 'doc',
- id: 'topics/10.04.00.RequestContent',
- label: '10.4. Request Content',
+ id: 'topics/11.04.00.RequestContent',
+ label: '11.4. Request Content',
},
{
type: 'doc',
- id: 'topics/10.05.00.ResponseStatus',
- label: '10.5. Response Status',
+ id: 'topics/11.05.00.ResponseStatus',
+ label: '11.5. Response Status',
},
{
type: 'doc',
- id: 'topics/10.06.00.ResponseHeaders',
- label: '10.6. Response Headers',
+ id: 'topics/11.06.00.ResponseHeaders',
+ label: '11.6. Response Headers',
},
{
type: 'doc',
- id: 'topics/10.07.00.ResponseContent',
- label: '10.7. Response Content',
+ id: 'topics/11.07.00.ResponseContent',
+ label: '11.7. Response Content',
},
{
type: 'doc',
- id: 'topics/10.08.00.CustomCallHandlers',
- label: '10.8. Custom Call Handlers',
+ id: 'topics/11.08.00.CustomCallHandlers',
+ label: '11.8. Custom Call Handlers',
},
{
type: 'doc',
- id: 'topics/10.09.00.Interceptors',
- label: '10.9. Interceptors',
+ id: 'topics/11.09.00.Interceptors',
+ label: '11.9. Interceptors',
},
{
type: 'category',
- label: '10.10. REST Proxies',
+ label: '11.10. REST Proxies',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/10.10.01.RestProxyBasics',
- label: '10.10.1. REST Proxy Basics',
+ id: 'topics/11.10.01.RestProxyBasics',
+ label: '11.10.1. REST Proxy Basics',
},
{
type: 'doc',
- id: 'topics/10.10.02.Remote',
- label: '10.10.2. @Remote',
+ id: 'topics/11.10.02.Remote',
+ label: '11.10.2. @Remote',
},
{
type: 'doc',
- id: 'topics/10.10.03.RemoteMethod',
- label: '10.10.3. @RemoteMethod',
+ id: 'topics/11.10.03.RemoteMethod',
+ label: '11.10.3. @RemoteMethod',
},
{
type: 'doc',
- id: 'topics/10.10.04.Content',
- label: '10.10.4. @Content',
+ id: 'topics/11.10.04.Content',
+ label: '11.10.4. @Content',
},
{
type: 'doc',
- id: 'topics/10.10.05.FormData',
- label: '10.10.5. @FormData',
+ id: 'topics/11.10.05.FormData',
+ label: '11.10.5. @FormData',
},
{
type: 'doc',
- id: 'topics/10.10.06.Query',
- label: '10.10.6. @Query',
+ id: 'topics/11.10.06.Query',
+ label: '11.10.6. @Query',
},
{
type: 'doc',
- id: 'topics/10.10.07.Header',
- label: '10.10.7. @Header',
+ id: 'topics/11.10.07.Header',
+ label: '11.10.7. @Header',
},
{
type: 'doc',
- id: 'topics/10.10.08.Path',
- label: '10.10.8. @Path',
+ id: 'topics/11.10.08.Path',
+ label: '11.10.8. @Path',
},
{
type: 'doc',
- id: 'topics/10.10.09.Request',
- label: '10.10.9. @Request',
+ id: 'topics/11.10.09.Request',
+ label: '11.10.9. @Request',
},
{
type: 'doc',
- id: 'topics/10.10.10.Response',
- label: '10.10.10. @Response',
+ id: 'topics/11.10.10.Response',
+ label: '11.10.10. @Response',
},
{
type: 'doc',
- id: 'topics/10.10.11.DualPurposeInterfaces',
- label: '10.10.11. Dual-Purpose Interfaces',
+ id: 'topics/11.10.11.DualPurposeInterfaces',
+ label: '11.10.11. Dual-Purpose Interfaces',
},
],
},
{
type: 'doc',
- id: 'topics/10.11.00.LoggingAndDebugging',
- label: '10.11. Logging and Debugging',
+ id: 'topics/11.11.00.LoggingAndDebugging',
+ label: '11.11. Logging and Debugging',
},
{
type: 'doc',
- id: 'topics/10.12.00.CustomizingHttpClient',
- label: '10.12. Customizing HTTP Client',
+ id: 'topics/11.12.00.CustomizingHttpClient',
+ label: '11.12. Customizing HTTP Client',
},
{
type: 'doc',
- id: 'topics/10.13.00.ExtendingRestClient',
- label: '10.13. Extending REST Client',
+ id: 'topics/11.13.00.ExtendingRestClient',
+ label: '11.13. Extending REST Client',
},
{
type: 'category',
- label: '10.14. Authentication',
+ label: '11.14. Authentication',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/10.14.01.AuthenticationBasics',
- label: '10.14.1. Authentication Basics',
+ id: 'topics/11.14.01.AuthenticationBasics',
+ label: '11.14.1. Authentication Basics',
},
{
type: 'doc',
- id: 'topics/10.14.02.AuthenticationBASIC',
- label: '10.14.2. BASIC Authentication',
+ id: 'topics/11.14.02.AuthenticationBASIC',
+ label: '11.14.2. BASIC Authentication',
},
{
type: 'doc',
- id: 'topics/10.14.03.AuthenticationForm',
- label: '10.14.3. Form-Based Authentication',
+ id: 'topics/11.14.03.AuthenticationForm',
+ label: '11.14.3. Form-Based Authentication',
},
{
type: 'doc',
- id: 'topics/10.14.04.AuthenticationOIDC',
- label: '10.14.4. OIDC Authentication',
+ id: 'topics/11.14.04.AuthenticationOIDC',
+ label: '11.14.4. OIDC Authentication',
},
],
},
@@ -1415,274 +1427,274 @@ const sidebars: SidebarsConfig = {
},
{
type: 'category',
- label: '11. juneau-rest-mock',
+ label: '12. juneau-rest-mock',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/11.01.00.JuneauRestMockBasics',
- label: '11.1. juneau-rest-mock Basics',
+ id: 'topics/12.01.00.JuneauRestMockBasics',
+ label: '12.1. juneau-rest-mock Basics',
},
{
type: 'doc',
- id: 'topics/11.02.00.MockRestClientOverview',
- label: '11.2. Mock REST Client Overview',
+ id: 'topics/12.02.00.MockRestClientOverview',
+ label: '12.2. Mock REST Client Overview',
},
],
},
{
type: 'category',
- label: '12. juneau-microservice-core',
+ label: '13. juneau-microservice-core',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/12.01.00.JuneauMicroserviceCoreBasics',
- label: '12.1. juneau-microservice-core Basics',
+ id: 'topics/13.01.00.JuneauMicroserviceCoreBasics',
+ label: '13.1. juneau-microservice-core Basics',
},
{
type: 'doc',
- id: 'topics/12.02.00.MicroserviceCoreOverview',
- label: '12.2. Microservice Core Overview',
+ id: 'topics/13.02.00.MicroserviceCoreOverview',
+ label: '13.2. Microservice Core Overview',
},
{
type: 'doc',
- id: 'topics/12.03.00.LifecycleMethods',
- label: '12.3. Lifecycle Methods',
+ id: 'topics/14.03.00.LifecycleMethods',
+ label: '14.3. Lifecycle Methods',
},
{
type: 'doc',
- id: 'topics/12.04.00.Args',
- label: '12.4. Args',
+ id: 'topics/13.04.00.Args',
+ label: '13.4. Args',
},
{
type: 'doc',
- id: 'topics/12.05.00.Manifest',
- label: '12.5. Manifest',
+ id: 'topics/13.05.00.Manifest',
+ label: '13.5. Manifest',
},
{
type: 'doc',
- id: 'topics/12.06.00.Config',
- label: '12.6. Config',
+ id: 'topics/14.06.00.Config',
+ label: '14.6. Config',
},
{
type: 'doc',
- id: 'topics/12.07.00.SystemProperties',
- label: '12.7. System Properties',
+ id: 'topics/13.07.00.SystemProperties',
+ label: '13.7. System Properties',
},
{
type: 'doc',
- id: 'topics/12.08.00.VarResolver',
- label: '12.8. Var Resolver',
+ id: 'topics/13.08.00.VarResolver',
+ label: '13.8. Var Resolver',
},
{
type: 'doc',
- id: 'topics/12.09.00.ConsoleCommands',
- label: '12.9. Console Commands',
+ id: 'topics/13.09.00.ConsoleCommands',
+ label: '13.9. Console Commands',
},
{
type: 'doc',
- id: 'topics/12.10.00.Listeners',
- label: '12.10. Listeners',
+ id: 'topics/13.10.00.Listeners',
+ label: '13.10. Listeners',
},
],
},
{
type: 'category',
- label: '13. juneau-microservice-jetty',
+ label: '14. juneau-microservice-jetty',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/13.01.00.JuneauMicroserviceJettyBasics',
- label: '13.1. juneau-microservice-jetty Basics',
+ id: 'topics/14.01.00.JuneauMicroserviceJettyBasics',
+ label: '14.1. juneau-microservice-jetty Basics',
},
{
type: 'doc',
- id: 'topics/13.02.00.MicroserviceJettyOverview',
- label: '13.2. Microservice Jetty Overview',
+ id: 'topics/14.02.00.MicroserviceJettyOverview',
+ label: '14.2. Microservice Jetty Overview',
},
{
type: 'doc',
- id: 'topics/13.03.00.LifecycleMethods',
- label: '13.3. Lifecycle Methods',
+ id: 'topics/14.03.00.LifecycleMethods',
+ label: '14.3. Lifecycle Methods',
},
{
type: 'doc',
- id: 'topics/13.04.00.ResourceClasses',
- label: '13.4. Resource Classes',
+ id: 'topics/14.04.00.ResourceClasses',
+ label: '14.4. Resource Classes',
},
{
type: 'doc',
- id: 'topics/13.05.00.PredefinedResourceClasses',
- label: '13.5. Predefined Resource Classes',
+ id: 'topics/14.05.00.PredefinedResourceClasses',
+ label: '14.5. Predefined Resource Classes',
},
{
type: 'doc',
- id: 'topics/13.06.00.Config',
- label: '13.6. Config',
+ id: 'topics/14.06.00.Config',
+ label: '14.6. Config',
},
{
type: 'doc',
- id: 'topics/13.07.00.JettyXml',
- label: '13.7. Jetty XML',
+ id: 'topics/14.07.00.JettyXml',
+ label: '14.7. Jetty XML',
},
{
type: 'doc',
- id: 'topics/13.08.00.UiCustomization',
- label: '13.8. UI Customization',
+ id: 'topics/14.08.00.UiCustomization',
+ label: '14.8. UI Customization',
},
{
type: 'doc',
- id: 'topics/13.09.00.Extending',
- label: '13.9. Extending',
+ id: 'topics/14.09.00.Extending',
+ label: '14.9. Extending',
},
],
},
{
type: 'category',
- label: '14. My Jetty Microservice',
+ label: '15. My Jetty Microservice',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/14.01.00.MyJettyMicroserviceBasics',
- label: '14.1. My Jetty Microservice Basics',
+ id: 'topics/15.01.00.MyJettyMicroserviceBasics',
+ label: '15.1. My Jetty Microservice Basics',
},
{
type: 'doc',
- id: 'topics/14.02.00.MyJettyMicroserviceInstalling',
- label: '14.2. Installing',
+ id: 'topics/15.02.00.MyJettyMicroserviceInstalling',
+ label: '16.2. Installing',
},
{
type: 'doc',
- id: 'topics/14.03.00.MyJettyMicroserviceRunning',
- label: '14.3. Running',
+ id: 'topics/15.03.00.MyJettyMicroserviceRunning',
+ label: '16.3. Running',
},
{
type: 'doc',
- id: 'topics/14.04.00.MyJettyMicroserviceBuilding',
- label: '14.4. Building',
+ id: 'topics/15.04.00.MyJettyMicroserviceBuilding',
+ label: '16.4. Building',
},
],
},
{
type: 'category',
- label: '15. My SpringBoot Microservice',
+ label: '16. My SpringBoot Microservice',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/15.01.00.MySpringBootMicroserviceBasics',
- label: '15.1. My SpringBoot Microservice Basics',
+ id: 'topics/16.01.00.MySpringBootMicroserviceBasics',
+ label: '16.1. My SpringBoot Microservice Basics',
},
{
type: 'doc',
- id: 'topics/15.02.00.MySpringBootMicroserviceInstalling',
- label: '15.2. Installing',
+ id: 'topics/16.02.00.MySpringBootMicroserviceInstalling',
+ label: '16.2. Installing',
},
{
type: 'doc',
- id: 'topics/15.03.00.MySpringBootMicroserviceRunning',
- label: '15.3. Running',
+ id: 'topics/16.03.00.MySpringBootMicroserviceRunning',
+ label: '16.3. Running',
},
{
type: 'doc',
- id: 'topics/15.04.00.MySpringBootMicroserviceBuilding',
- label: '15.4. Building',
+ id: 'topics/16.04.00.MySpringBootMicroserviceBuilding',
+ label: '16.4. Building',
},
],
},
{
type: 'category',
- label: '16. juneau-petstore',
+ label: '17. juneau-petstore',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/16.01.00.JuneauPetstoreBasics',
- label: '16.1. juneau-petstore Basics',
+ id: 'topics/17.01.00.JuneauPetstoreBasics',
+ label: '17.1. juneau-petstore Basics',
},
{
type: 'doc',
- id: 'topics/16.02.00.JuneauPetstoreRunning',
- label: '16.2. Running the App',
+ id: 'topics/17.02.00.JuneauPetstoreRunning',
+ label: '17.2. Running the App',
},
{
type: 'doc',
- id: 'topics/16.03.00.JuneauPetstoreApi',
- label: '16.3. juneau-petstore-api',
+ id: 'topics/17.03.00.JuneauPetstoreApi',
+ label: '17.3. juneau-petstore-api',
},
{
type: 'doc',
- id: 'topics/16.04.00.JuneauPetstoreClient',
- label: '16.4. juneau-petstore-client',
+ id: 'topics/17.04.00.JuneauPetstoreClient',
+ label: '17.4. juneau-petstore-client',
},
{
type: 'doc',
- id: 'topics/16.05.00.JuneauPetstoreServer',
- label: '16.5. juneau-petstore-server',
+ id: 'topics/17.05.00.JuneauPetstoreServer',
+ label: '17.5. juneau-petstore-server',
},
],
},
{
type: 'category',
- label: '17. juneau-examples',
+ label: '18. juneau-examples',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/17.01.00.JuneauExamplesCore',
- label: '17.1. juneau-examples-core',
+ id: 'topics/18.01.00.JuneauExamplesCore',
+ label: '18.1. juneau-examples-core',
},
{
type: 'doc',
- id: 'topics/17.02.00.JuneauExamplesRest',
- label: '17.2. juneau-examples-rest',
+ id: 'topics/18.02.00.JuneauExamplesRest',
+ label: '18.2. juneau-examples-rest',
},
{
type: 'doc',
- id: 'topics/17.03.00.JuneauExamplesRestJetty',
- label: '17.3. juneau-examples-rest-jetty',
+ id: 'topics/18.03.00.JuneauExamplesRestJetty',
+ label: '18.3. juneau-examples-rest-jetty',
},
{
type: 'doc',
- id: 'topics/17.04.00.JuneauExamplesRestSpringboot',
- label: '17.4. juneau-examples-rest-springboot',
+ id: 'topics/18.04.00.JuneauExamplesRestSpringboot',
+ label: '18.4. juneau-examples-rest-springboot',
},
],
},
{
type: 'category',
- label: '18. Security',
+ label: '19. Security',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/18.01.00.SecurityBasics',
- label: '18.1. Security Basics',
+ id: 'topics/19.01.00.SecurityBasics',
+ label: '19.1. Security Basics',
},
{
type: 'doc',
- id: 'topics/18.02.00.MarshallingSecurity',
- label: '18.2. Marshalling Security',
+ id: 'topics/19.02.00.MarshallingSecurity',
+ label: '19.2. Marshalling Security',
},
{
type: 'doc',
- id: 'topics/18.03.00.SvlSecurity',
- label: '18.3. SVL Security',
+ id: 'topics/19.03.00.SvlSecurity',
+ label: '19.3. SVL Security',
},
{
type: 'doc',
- id: 'topics/18.04.00.RestSecurity',
- label: '18.4. REST Security',
+ id: 'topics/19.04.00.RestSecurity',
+ label: '19.4. REST Security',
},
],
},
{
type: 'doc',
- id: 'topics/19.01.00.V9.0-migration-guide',
- label: '19. V9.0 Migration Guide',
+ id: 'topics/20.01.00.V9.0-migration-guide',
+ label: '20. V9.0 Migration Guide',
},
],
},