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 2eeff90cb Update docs.
2eeff90cb is described below
commit 2eeff90cb5346dd09eb34dd9342887bd36bd1c65
Author: James Bognar <[email protected]>
AuthorDate: Sun Sep 28 09:46:34 2025 -0400
Update docs.
---
README.md | 24 +-
juneau-docs/PROJECT_CONTEXT.md | 218 ++++++++++
.../topics/01.01.00.JuneauEcosystemOverview.md | 16 +-
.../docs/topics/02.01.00.JuneauMarshallBasics.md | 2 +-
.../topics/03.01.00.Module-juneau-marshall-rdf.md | 2 +-
.../docs/topics/04.01.00.JuneauDtoBasics.md | 2 +-
.../docs/topics/05.01.00.JuneauConfigBasics.md | 2 +-
.../docs/topics/06.01.00.JuneauAssertionBasics.md | 2 +-
.../docs/topics/07.01.00.JuneauRestCommonBasics.md | 2 +-
.../docs/topics/08.01.00.JuneauRestServerBasics.md | 2 +-
.../docs/topics/08.16.07.SwaggerResponses.md | 2 +-
.../docs/topics/08.18.05.HtmlUiCustomization.md | 2 +-
juneau-docs/docs/topics/08.23.00.RestContext.md | 2 +-
.../09.01.00.JuneauRestServerSpringbootBasics.md | 2 +-
.../docs/topics/10.01.00.JuneauRestClientBasics.md | 2 +-
.../docs/topics/11.01.00.JuneauRestMockBasics.md | 2 +-
.../12.01.00.JuneauMicroserviceCoreBasics.md | 2 +-
.../13.01.00.JuneauMicroserviceJettyBasics.md | 2 +-
.../docs/topics/16.01.00.JuneauPetstoreBasics.md | 12 +-
.../docs/topics/16.02.00.JuneauPetstoreRunning.md | 2 +-
.../docs/topics/16.03.00.JuneauPetstoreApi.md | 281 ++++++------
.../docs/topics/16.04.00.JuneauPetstoreClient.md | 24 +-
.../docs/topics/16.05.00.JuneauPetstoreServer.md | 28 +-
.../docs/topics/17.01.00.JuneauExamplesCore.md | 166 ++++++++
.../docs/topics/17.02.00.JuneauExamplesRest.md | 261 ++++++++++++
.../topics/17.03.00.JuneauExamplesRestJetty.md | 317 ++++++++++++++
.../17.04.00.JuneauExamplesRestSpringboot.md | 472 +++++++++++++++++++++
...ecurityBasics.md => 18.01.00.SecurityBasics.md} | 0
...Security.md => 18.02.00.MarshallingSecurity.md} | 0
...3.00.SvlSecurity.md => 18.03.00.SvlSecurity.md} | 0
...00.RestSecurity.md => 18.04.00.RestSecurity.md} | 0
...n-guide.md => 19.01.00.V9.0-migration-guide.md} | 0
juneau-docs/docs/topics/TODO.md | 56 ---
juneau-docs/sidebars.ts | 48 ++-
juneau-docs/src/css/custom.css | 12 +-
35 files changed, 1704 insertions(+), 263 deletions(-)
diff --git a/README.md b/README.md
index 5523168ea..087585ea9 100644
--- a/README.md
+++ b/README.md
@@ -32,14 +32,32 @@
### π Documentation
* **[π Javadocs](https://juneau.staged.apache.org/site/apidocs/)** - Complete
API documentation
-* **[π User Guide](https://juneau.staged.apache.org/docs/)** - Comprehensive
framework documentation
-* **[π§ Examples](https://juneau.staged.apache.org/docs/examples/)** - Code
examples and tutorials
+* **[π User
Guide](https://juneau.staged.apache.org/docs/topics/JuneauEcosystemOverview)**
- Comprehensive framework documentation
+* **[π§
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/dependencies.html)** -
Project dependency analysis
+* **[π¦
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.
+## Common Use Cases
+
+Apache Juneauβ’ excels in the following scenarios:
+
+* **Marshalling Java beans to a variety of languages using zero dependencies**
- Serialize POJOs to JSON, XML, HTML, URL-Encoding, UON, OpenAPI, PlainText,
CSV, SOAP, MessagePack, and RDF formats with minimal setup
+* **Creation of self-documenting Bean-based REST APIs for SpringBoot and Jetty
applications** - Build REST services with automatic Swagger documentation,
content negotiation, and POJO-based request/response handling
+* **Creation of Java interface proxies on top of existing REST APIs** -
Generate type-safe client proxies that make REST calls feel like local method
invocations
+* **Powerful INI-based configuration files** - Manage application
configuration with support for POJOs, arrays, collections, binary data, and
real-time file watching
+* **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
+* **Content negotiation and HTTP/2 support** - Handle multiple content types
automatically with modern HTTP features
+
## Description
Apache Juneauβ’ is a single cohesive Java ecosystem consisting of the following
parts:
diff --git a/juneau-docs/PROJECT_CONTEXT.md b/juneau-docs/PROJECT_CONTEXT.md
new file mode 100644
index 000000000..6bd63103e
--- /dev/null
+++ b/juneau-docs/PROJECT_CONTEXT.md
@@ -0,0 +1,218 @@
+# Apache Juneau Documentation Project Context
+
+## Project Overview
+
+This is the Docusaurus-based documentation site for Apache Juneau, a Java
ecosystem for marshalling POJOs to various content types and creating
annotation-based REST APIs. The documentation is hosted at
https://juneau.staged.apache.org/ and is built from this repository.
+
+## Current Project State
+
+### Documentation Structure
+- **Main Documentation**: Located in `/docs/topics/` with numbered files
(e.g., `01.01.00.JuneauEcosystemOverview.md`)
+- **Release Notes**: Located in `/docs/release-notes/`
+- **Sidebar Configuration**: Defined in `sidebars.ts` with hierarchical
structure
+- **Static Assets**: Maven site files copied to `/static/site/` including
Javadocs
+
+### Recent Major Changes Completed
+
+#### 1. Documentation Reorganization (December 2024)
+- **Created new "17. juneau-examples" section** to group all example projects
+- **Moved examples from juneau-petstore section** to dedicated examples section
+- **Renumbered existing sections**: Security (17β18), V9.0 Migration Guide
(18β19)
+- **Split "Microservice Examples"** into two specific pages:
+ - `17.03.00.JuneauExamplesRestJetty.md` - Jetty-based microservices
+ - `17.04.00.JuneauExamplesRestSpringboot.md` - Spring Boot microservices
+
+#### 2. Example Documentation Created
+- **`17.01.00.JuneauExamplesCore.md`** - Core serialization examples (JSON,
XML, RDF)
+- **`17.02.00.JuneauExamplesRest.md`** - REST API examples and patterns
+- **`17.03.00.JuneauExamplesRestJetty.md`** - Standalone Jetty microservice
examples
+- **`17.04.00.JuneauExamplesRestSpringboot.md`** - Spring Boot integrated
examples
+
+#### 3. Link Fixes and Improvements
+- **Fixed all broken Javadoc links** - Comprehensive link validation and repair
+- **Converted API_DOCS links** to HTML hyperlinks with `target="_blank"`
+- **Fixed package links** to point to correct Javadoc locations
+- **Updated external links** to point to correct Oracle/Jakarta documentation
+- **Fixed Builder class links** to use dot notation (e.g.,
`Class.Builder.html`)
+- **Inferred parameter types** for method signatures in Javadoc links
+
+#### 4. README and Navigation Updates
+- **Updated main README** to point to staged Apache site
(https://juneau.staged.apache.org/)
+- **Added SonarCloud badges** for code quality metrics
+- **Enhanced Examples section** with child bullets linking to specific example
docs
+- **Fixed dependencies link** to point to correct Maven site file
(`dependency-info.html`)
+
+#### 5. SonarCloud Integration
+- **Added SonarCloud workflow** (`.github/workflows/sonarcloud.yml`)
+- **Updated POM files** with SonarCloud Maven plugin
+- **Created SonarCloud configuration** (`sonar-project.properties`)
+- **Enhanced security page** with SonarCloud badges and analysis links
+- **Created setup guide** (`SONARCLOUD_SETUP.md`)
+
+## Technical Configuration
+
+### Docusaurus Setup
+- **Version**: Latest Docusaurus 3.x
+- **Configuration**: `docusaurus.config.ts` with custom plugins
+- **Build Process**: Maven site generation + Docusaurus build
+- **Static Files**: Maven site copied to `/static/site/` for Javadocs and
reports
+
+### Maven Integration
+- **Site Generation**: `create-mvn-site.sh` script generates Maven site
+- **Javadoc Integration**: Javadocs served from `/site/apidocs/`
+- **Test Reports**: Surefire reports at `/site/surefire.html`
+- **Dependencies**: Dependency info at `/site/dependency-info.html`
+
+### Link Management
+- **Javadoc Links**: All point to `/site/apidocs/` with full method signatures
+- **Javadoc Link Format**: Use HTML anchor tags (`<a href="/site/apidocs/..."
target="_blank">`) instead of markdown links for Javadoc URLs, as Docusaurus
doesn't handle markdown links to static files correctly
+- **External Links**: Java standard library β Oracle docs, Jakarta β Jakarta
docs
+- **Internal Documentation Links**: When creating links to other docs, use the
slug names and their final location (e.g.,
`/docs/topics/JuneauRestServerSpringbootBasics`) instead of relative file paths
+- **GitHub Links**: PetStore project links use `master` branch
+- **Hyperlink Formatting**: When creating hyperlinks, remove inline code
blocks (backticks) from the link text
+
+### Code Formatting
+- **Indentation**: All code blocks in documentation use 4-space indentation
(not tabs)
+
+### Java Tree Rendering
+- **Java Trees**: Special tree-like structures for rendering Java elements
(packages, classes, methods, etc.) in documentation
+- **Structure**: Uses `<tree>` container with `<node-X>` elements for
hierarchy levels
+- **Element Types**:
+ - **`java-X` tags**: Normal nodes in a tree (e.g., `<java-abstract-class>`,
`<java-interface>`)
+ - **`javac-X` tags**: Condensed into a single line of a tree (e.g.,
`<javac-class>`, `<javac-method>`)
+ - **`java-project` tags**: Project/module references with folder icon (π)
+ - **`java-doc` tags**: Documentation links with book icon (π)
+- **Styling**: Special element names are defined in `custom.css`
+- **Example**: See lines 35-46 of `08.03.02.PredefinedClasses.md` for
inheritance tree structure
+- **Usage**: When user says "create a java tree", they're referring to this
specific rendering system
+
+## File Naming Conventions
+
+### Documentation Files
+- **Format**: `XX.YY.00.TopicName.md` where XX.YY is section.subsection
+- **Slugs**: Use `TopicName` format (e.g., `JuneauEcosystemOverview`)
+- **Front Matter**: Include `title` and `slug` fields
+
+### Current Section Structure
+```
+1. Juneau Ecosystem (01.XX.00.*)
+2. juneau-marshall (02.XX.00.*)
+3. juneau-marshall-rdf (03.XX.00.*)
+4. juneau-dto (04.XX.00.*)
+5. juneau-config (05.XX.00.*)
+6. juneau-assertions (06.XX.00.*)
+7. juneau-rest-common (07.XX.00.*)
+8. juneau-rest-server (08.XX.00.*)
+9. juneau-rest-server-springboot (09.XX.00.*)
+10. juneau-rest-client (10.XX.00.*)
+11. juneau-rest-mock (11.XX.00.*)
+12. juneau-microservice-core (12.XX.00.*)
+13. juneau-microservice-jetty (13.XX.00.*)
+14. My Jetty Microservice (14.XX.00.*)
+15. My SpringBoot Microservice (15.XX.00.*)
+16. juneau-petstore (16.XX.00.*)
+17. juneau-examples (17.XX.00.*) β NEW
+18. Security (18.XX.00.*) β RENUMBERED
+19. V9.0 Migration Guide (19.XX.00.*) β RENUMBERED
+```
+
+## Key URLs and Links
+
+### Production Sites
+- **Documentation**: https://juneau.staged.apache.org/
+- **Javadocs**: https://juneau.staged.apache.org/site/apidocs/
+- **PetStore Project**: https://github.com/apache/juneau-petstore (master
branch)
+
+### External Documentation
+- **Oracle Java 17**: https://docs.oracle.com/en/java/javase/17/docs/api/
+- **Jakarta Servlet 6.0**:
https://jakarta.ee/specifications/servlet/6.0/apidocs/
+- **Apache HttpClient**: https://hc.apache.org/httpcomponents-client-4.5.x/
+- **SonarCloud**: https://sonarcloud.io/project/overview?id=apache_juneau
+
+## Development Workflow
+
+### Local Development
+1. **Start Server**: `./start-server.sh` (runs Docusaurus dev server)
+2. **Generate Maven Site**: `./create-mvn-site.sh` (updates Javadocs and
reports)
+3. **Build**: `npm run build` (creates production build)
+
+### Link Validation
+- **Static Check**: Use built HTML files for comprehensive link validation
+- **Dev Check**: Use running server for dynamic content validation
+- **Javadoc Validation**: Check against generated Javadoc files in
`/static/site/apidocs/`
+
+## Common Tasks and Patterns
+
+### Adding New Documentation
+1. Create numbered file in `/docs/topics/`
+2. Add entry to `sidebars.ts` with proper numbering
+3. Update any cross-references
+4. Test links and navigation
+
+### Fixing Broken Links
+1. Identify link type (Javadoc, external, internal)
+2. Check against valid URL lists (e.g., `focused-apidocs-urls.txt`)
+3. Apply appropriate fix (parameter inference, external link conversion, etc.)
+4. Validate fix works in browser
+
+### Updating Examples
+1. Update source code in respective modules
+2. Update corresponding documentation in section 17
+3. Update README links if needed
+4. Test example functionality
+
+## Known Issues and Limitations
+
+### Link Validation
+- Static link checkers may report false positives for dynamic content
+- Some Javadoc links require parameter type inference
+- External links may change over time
+
+### Build Process
+- Maven site generation required before Javadoc links work
+- Docusaurus dev server caches static files (restart needed after Maven site
updates)
+- Some Maven site reports may show zero values (known configuration issues)
+
+### Documentation Gaps
+- Some advanced topics may need additional examples
+- Migration guides may need updates for newer versions
+- Some API documentation may be incomplete
+
+## Maintenance Notes
+
+### Regular Tasks
+- **Link Validation**: Check for broken links after major updates
+- **External Link Updates**: Verify Oracle/Jakarta links still work
+- **Example Testing**: Ensure examples still work with current Juneau version
+- **SonarCloud Monitoring**: Check quality gate status regularly
+
+## Chat Session Rules
+
+### Context Persistence
+- **"Persist this rule to the context"**: When the user says this phrase,
immediately add the rule they just stated to this PROJECT_CONTEXT.md file under
an appropriate section
+- **Rule Updates**: Always update this file when new rules, patterns, or
procedures are established
+- **Context Maintenance**: Keep this file current with project changes and
established workflows
+- **Cross-Session Consistency**: This helps maintain consistency across chat
sessions and ensures that important rules and procedures are properly
documented and preserved
+
+### Version Updates
+- Update version numbers in documentation
+- Update external link versions (Java, Jakarta, etc.)
+- Test all examples with new version
+- Update migration guides if needed
+
+## Contact and Resources
+
+### Project Information
+- **Apache Juneau**: https://juneau.apache.org/
+- **GitHub Repository**: https://github.com/apache/juneau
+- **Mailing List**: [email protected]
+- **Wiki**: https://github.com/apache/juneau/wiki
+
+### Documentation Team
+- **Primary Maintainer**: James Bognar
+- **Documentation Site**: https://juneau.staged.apache.org/
+- **Issue Tracking**: GitHub Issues in main repository
+
+---
+
+*This file should be updated whenever significant changes are made to the
documentation structure, build process, or project configuration.*
diff --git a/juneau-docs/docs/topics/01.01.00.JuneauEcosystemOverview.md
b/juneau-docs/docs/topics/01.01.00.JuneauEcosystemOverview.md
index 5b98370e6..1e155509d 100644
--- a/juneau-docs/docs/topics/01.01.00.JuneauEcosystemOverview.md
+++ b/juneau-docs/docs/topics/01.01.00.JuneauEcosystemOverview.md
@@ -8,6 +8,20 @@ slug: JuneauEcosystemOverview
Apache Juneauβ’ is a single cohesive Java ecosystem for marshalling Java
objects to a wide variety of language types and
creating annotation-based REST end-to-end server and client APIs.
+#### Common Use Cases
+
+Juneau excels in the following scenarios:
+
+* **Marshalling Java beans to a variety of languages using zero dependencies**
- Serialize POJOs to JSON, XML, HTML, URL-Encoding, UON, OpenAPI, PlainText,
CSV, SOAP, MessagePack, and RDF formats with minimal setup
+* **Creation of self-documenting Bean-based REST APIs for SpringBoot and Jetty
applications** - Build REST services with automatic Swagger documentation,
content negotiation, and POJO-based request/response handling
+* **Creation of Java interface proxies on top of existing REST APIs** -
Generate type-safe client proxies that make REST calls feel like local method
invocations
+* **Powerful INI-based configuration files** - Manage application
configuration with support for POJOs, arrays, collections, binary data, and
real-time file watching
+* **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
+* **Content negotiation and HTTP/2 support** - Handle multiple content types
automatically with modern HTTP features
+
The Juneau ecosystem consists of the following parts:
| Category | Maven Artifacts | Description | Prerequisites |
@@ -35,7 +49,7 @@ The easiest way to pull in the library is through the
following maven dependency
<dependency>
<groupId>org.apache.juneau</groupId>
<artifactId>juneau-all</artifactId>
- <version>0.0.0</version>
+ <version>${juneau.version}</version>
</dependency>
```
diff --git a/juneau-docs/docs/topics/02.01.00.JuneauMarshallBasics.md
b/juneau-docs/docs/topics/02.01.00.JuneauMarshallBasics.md
index c68f6469b..4ecb516fd 100644
--- a/juneau-docs/docs/topics/02.01.00.JuneauMarshallBasics.md
+++ b/juneau-docs/docs/topics/02.01.00.JuneauMarshallBasics.md
@@ -9,7 +9,7 @@ slug: JuneauMarshallBasics
<dependency>
<groupId>org.apache.juneau</groupId>
<artifactId>juneau-marshall</artifactId>
- <version>0.0.0</version>
+ <version>${juneau.version}</version>
</dependency>
```
diff --git a/juneau-docs/docs/topics/03.01.00.Module-juneau-marshall-rdf.md
b/juneau-docs/docs/topics/03.01.00.Module-juneau-marshall-rdf.md
index 4f39059fc..9be09932f 100644
--- a/juneau-docs/docs/topics/03.01.00.Module-juneau-marshall-rdf.md
+++ b/juneau-docs/docs/topics/03.01.00.Module-juneau-marshall-rdf.md
@@ -9,7 +9,7 @@ slug: Module-juneau-marshall-rdf
<dependency>
<groupId>org.apache.juneau</groupId>
<artifactId>juneau-marshall-rdf</artifactId>
- <version>0.0.0</version>
+ <version>${juneau.version}</version>
</dependency>
```
diff --git a/juneau-docs/docs/topics/04.01.00.JuneauDtoBasics.md
b/juneau-docs/docs/topics/04.01.00.JuneauDtoBasics.md
index d54d519f7..7e856db0f 100644
--- a/juneau-docs/docs/topics/04.01.00.JuneauDtoBasics.md
+++ b/juneau-docs/docs/topics/04.01.00.JuneauDtoBasics.md
@@ -9,7 +9,7 @@ slug: JuneauDtoBasics
<dependency>
<groupId>org.apache.juneau</groupId>
<artifactId>juneau-dto</artifactId>
- <version>0.0.0</version>
+ <version>${juneau.version}</version>
</dependency>
```
diff --git a/juneau-docs/docs/topics/05.01.00.JuneauConfigBasics.md
b/juneau-docs/docs/topics/05.01.00.JuneauConfigBasics.md
index 9c7004e62..16f8c386b 100644
--- a/juneau-docs/docs/topics/05.01.00.JuneauConfigBasics.md
+++ b/juneau-docs/docs/topics/05.01.00.JuneauConfigBasics.md
@@ -9,7 +9,7 @@ slug: JuneauConfigBasics
<dependency>
<groupId>org.apache.juneau</groupId>
<artifactId>juneau-config</artifactId>
- <version>0.0.0</version>
+ <version>${juneau.version}</version>
</dependency>
```
diff --git a/juneau-docs/docs/topics/06.01.00.JuneauAssertionBasics.md
b/juneau-docs/docs/topics/06.01.00.JuneauAssertionBasics.md
index fbed32060..5c63eadfd 100644
--- a/juneau-docs/docs/topics/06.01.00.JuneauAssertionBasics.md
+++ b/juneau-docs/docs/topics/06.01.00.JuneauAssertionBasics.md
@@ -9,7 +9,7 @@ slug: JuneauAssertionBasics
<dependency>
<groupId>org.apache.juneau</groupId>
<artifactId>juneau-assertions</artifactId>
- <version>0.0.0</version>
+ <version>${juneau.version}</version>
</dependency>
```
diff --git a/juneau-docs/docs/topics/07.01.00.JuneauRestCommonBasics.md
b/juneau-docs/docs/topics/07.01.00.JuneauRestCommonBasics.md
index 5b1d374b2..273caf05b 100644
--- a/juneau-docs/docs/topics/07.01.00.JuneauRestCommonBasics.md
+++ b/juneau-docs/docs/topics/07.01.00.JuneauRestCommonBasics.md
@@ -9,7 +9,7 @@ slug: JuneauRestCommonBasics
<dependency>
<groupId>org.apache.juneau</groupId>
<artifactId>juneau-rest-common</artifactId>
- <version>0.0.0</version>
+ <version>${juneau.version}</version>
</dependency>
```
diff --git a/juneau-docs/docs/topics/08.01.00.JuneauRestServerBasics.md
b/juneau-docs/docs/topics/08.01.00.JuneauRestServerBasics.md
index 6cd6ff37c..15239bc7b 100644
--- a/juneau-docs/docs/topics/08.01.00.JuneauRestServerBasics.md
+++ b/juneau-docs/docs/topics/08.01.00.JuneauRestServerBasics.md
@@ -9,7 +9,7 @@ slug: JuneauRestServerBasics
<dependency>
<groupId>org.apache.juneau</groupId>
<artifactId>juneau-rest-server</artifactId>
- <version>0.0.0</version>
+ <version>${juneau.version}</version>
</dependency>
```
diff --git a/juneau-docs/docs/topics/08.16.07.SwaggerResponses.md
b/juneau-docs/docs/topics/08.16.07.SwaggerResponses.md
index cc308b54a..7361374bb 100644
--- a/juneau-docs/docs/topics/08.16.07.SwaggerResponses.md
+++ b/juneau-docs/docs/topics/08.16.07.SwaggerResponses.md
@@ -35,5 +35,5 @@ Like input parameters, the Swagger for responses can be
define in multiple locat
</tree>
:::info See Also
-[TODO-Response Beans](..)
+[Response Beans](/docs/topics/ResponseBeans)
:::
\ No newline at end of file
diff --git a/juneau-docs/docs/topics/08.18.05.HtmlUiCustomization.md
b/juneau-docs/docs/topics/08.18.05.HtmlUiCustomization.md
index 28f3b8c3c..705969ad8 100644
--- a/juneau-docs/docs/topics/08.18.05.HtmlUiCustomization.md
+++ b/juneau-docs/docs/topics/08.18.05.HtmlUiCustomization.md
@@ -114,5 +114,5 @@ arbitrary HTML, and allows you either hardcode your
interface inside annotations
from other places such as external config files.
:::info See Also
-[TODO-UI Customization](..)
+[UI Customization](/docs/topics/UiCustomization)
:::
\ No newline at end of file
diff --git a/juneau-docs/docs/topics/08.23.00.RestContext.md
b/juneau-docs/docs/topics/08.23.00.RestContext.md
index 87996b44a..708fe3424 100644
--- a/juneau-docs/docs/topics/08.23.00.RestContext.md
+++ b/juneau-docs/docs/topics/08.23.00.RestContext.md
@@ -56,7 +56,7 @@ For more complex configurations, access to sub-builders is
provided via the foll
:::note
The builders or built objects above can also be defined as injected beans
defined in a Spring Configuration if you wish
to do all your app configuration Spring-style.
-This is described in detail in the [TODO-juneau-rest-server-springboot](..)
documentation.
+This is described in detail in the
[juneau-rest-server-springboot](/docs/topics/JuneauRestServerSpringbootBasics)
documentation.
:::
The programmatic equivalent to the annotated lifecycle methods are below:
diff --git
a/juneau-docs/docs/topics/09.01.00.JuneauRestServerSpringbootBasics.md
b/juneau-docs/docs/topics/09.01.00.JuneauRestServerSpringbootBasics.md
index 63957522a..fc3f0d840 100644
--- a/juneau-docs/docs/topics/09.01.00.JuneauRestServerSpringbootBasics.md
+++ b/juneau-docs/docs/topics/09.01.00.JuneauRestServerSpringbootBasics.md
@@ -9,7 +9,7 @@ slug: JuneauRestServerSpringbootBasics
<dependency>
<groupId>org.apache.juneau</groupId>
<artifactId>juneau-rest-server-springboot</artifactId>
- <version>0.0.0</version>
+ <version>${juneau.version}</version>
</dependency>
```
diff --git a/juneau-docs/docs/topics/10.01.00.JuneauRestClientBasics.md
b/juneau-docs/docs/topics/10.01.00.JuneauRestClientBasics.md
index 7894961fa..fc6c86b3d 100644
--- a/juneau-docs/docs/topics/10.01.00.JuneauRestClientBasics.md
+++ b/juneau-docs/docs/topics/10.01.00.JuneauRestClientBasics.md
@@ -9,7 +9,7 @@ slug: JuneauRestClientBasics
<dependency>
<groupId>org.apache.juneau</groupId>
<artifactId>juneau-rest-client</artifactId>
- <version>0.0.0</version>
+ <version>${juneau.version}</version>
</dependency>
```
diff --git a/juneau-docs/docs/topics/11.01.00.JuneauRestMockBasics.md
b/juneau-docs/docs/topics/11.01.00.JuneauRestMockBasics.md
index e0258333d..a62f8b280 100644
--- a/juneau-docs/docs/topics/11.01.00.JuneauRestMockBasics.md
+++ b/juneau-docs/docs/topics/11.01.00.JuneauRestMockBasics.md
@@ -9,7 +9,7 @@ slug: JuneauRestMockBasics
<dependency>
<groupId>org.apache.juneau</groupId>
<artifactId>juneau-rest-mock</artifactId>
- <version>0.0.0</version>
+ <version>${juneau.version}</version>
</dependency>
```
diff --git a/juneau-docs/docs/topics/12.01.00.JuneauMicroserviceCoreBasics.md
b/juneau-docs/docs/topics/12.01.00.JuneauMicroserviceCoreBasics.md
index 3f8f7273b..f75e2b595 100644
--- a/juneau-docs/docs/topics/12.01.00.JuneauMicroserviceCoreBasics.md
+++ b/juneau-docs/docs/topics/12.01.00.JuneauMicroserviceCoreBasics.md
@@ -9,7 +9,7 @@ slug: JuneauMicroserviceCoreBasics
<dependency>
<groupId>org.apache.juneau</groupId>
<artifactId>juneau-microservice-core</artifactId>
- <version>0.0.0</version>
+ <version>${juneau.version}</version>
</dependency>
```
diff --git a/juneau-docs/docs/topics/13.01.00.JuneauMicroserviceJettyBasics.md
b/juneau-docs/docs/topics/13.01.00.JuneauMicroserviceJettyBasics.md
index 680ebba6f..2a543b347 100644
--- a/juneau-docs/docs/topics/13.01.00.JuneauMicroserviceJettyBasics.md
+++ b/juneau-docs/docs/topics/13.01.00.JuneauMicroserviceJettyBasics.md
@@ -9,7 +9,7 @@ slug: JuneauMicroserviceJettyBasics
<dependency>
<groupId>org.apache.juneau</groupId>
<artifactId>juneau-microservice-jetty</artifactId>
- <version>0.0.0</version>
+ <version>${juneau.version}</version>
</dependency>
```
diff --git a/juneau-docs/docs/topics/16.01.00.JuneauPetstoreBasics.md
b/juneau-docs/docs/topics/16.01.00.JuneauPetstoreBasics.md
index ed588373a..0d3b8556e 100644
--- a/juneau-docs/docs/topics/16.01.00.JuneauPetstoreBasics.md
+++ b/juneau-docs/docs/topics/16.01.00.JuneauPetstoreBasics.md
@@ -3,7 +3,7 @@ title: "juneau-petstore Basics"
slug: JuneauPetstoreBasics
---
-The `PetStore` application is an functional application meant to demonstrate
using Juneau with Spring Boot to create an
+The
[PetStore](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-api/src/main/java/org/apache/juneau/petstore/PetStore.java)
application is an functional application meant to demonstrate using Juneau
with Spring Boot to create an
end-to-end client/server REST API.
What makes Juneau unique is the ability to create Java interfaces that behave
just like RPC but using REST as the
@@ -14,10 +14,12 @@ dependencies.
The server-side need only provide the ability to host a servlet.
-Visit the GitHub project hosting the application.
+Visit the [GitHub project](https://github.com/apache/juneau-petstore) hosting
the application.
The project is broken down into the following subprojects:
-- `juneau-petstore-api` - Contains the Java interface and DTOs for the
petstore application.
-- `juneau-petstore-server` - Contains the server-side Java implementation of
the petstore Java interface as a REST resource.
-- `juneau-petstore-client` - Contains the client-side Java proxy of the
petstore Java interface.
\ No newline at end of file
+<tree>
+<node-0><java-project><a
href="https://github.com/apache/juneau-petstore/tree/master/juneau-petstore-api"
target="_blank">juneau-petstore-api</a></java-project> - Contains the Java
interface and DTOs for the petstore application.</node-0>
+<node-0><java-project><a
href="https://github.com/apache/juneau-petstore/tree/master/juneau-petstore-server"
target="_blank">juneau-petstore-server</a></java-project> - Contains the
server-side Java implementation of the petstore Java interface as a REST
resource.</node-0>
+<node-0><java-project><a
href="https://github.com/apache/juneau-petstore/tree/master/juneau-petstore-client"
target="_blank">juneau-petstore-client</a></java-project> - Contains the
client-side Java proxy of the petstore Java interface.</node-0>
+</tree>
\ No newline at end of file
diff --git a/juneau-docs/docs/topics/16.02.00.JuneauPetstoreRunning.md
b/juneau-docs/docs/topics/16.02.00.JuneauPetstoreRunning.md
index e47f93e5c..6254d4823 100644
--- a/juneau-docs/docs/topics/16.02.00.JuneauPetstoreRunning.md
+++ b/juneau-docs/docs/topics/16.02.00.JuneauPetstoreRunning.md
@@ -3,7 +3,7 @@ title: "Running the Pet Store App"
slug: JuneauPetstoreRunning
---
-The Pet Store app is a Spring Boot application that can be started up by
running the `App` class.
+The Pet Store app is a Spring Boot application that can be started up by
running the
[App](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/server/App.java)
class.
This starts the application on port 5000.
diff --git a/juneau-docs/docs/topics/16.03.00.JuneauPetstoreApi.md
b/juneau-docs/docs/topics/16.03.00.JuneauPetstoreApi.md
index b6b8d0a31..ee2a4d503 100644
--- a/juneau-docs/docs/topics/16.03.00.JuneauPetstoreApi.md
+++ b/juneau-docs/docs/topics/16.03.00.JuneauPetstoreApi.md
@@ -3,143 +3,142 @@ title: "juneau-petstore-api"
slug: JuneauPetstoreApi
---
-The `juneau-petstore-api` module contains the Java interface of our
application and the DTOs that go along with it.
+The
[juneau-petstore-api](https://github.com/apache/juneau-petstore/tree/master/juneau-petstore-api)
module contains the Java interface of our application and the DTOs that go
along with it.
These classes are meant to be shared between the server and client side code.
-The `PetStore` class is our primary class for defining our application.
+The
[PetStore](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-api/src/main/java/org/apache/juneau/petstore/PetStore.java)
class is our primary class for defining our application.
It's a standard Java interface with annotations used to describe how the
methods map to REST calls.
-#### PetStore.java
+####
[PetStore.java](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-api/src/main/java/org/apache/juneau/petstore/PetStore.java)
```java
@Remote(path="/petstore")
public interface PetStore {
-
//------------------------------------------------------------------------------------------------------------------
- // Pets
-
//------------------------------------------------------------------------------------------------------------------
-
- /**
- * Returns all pets in the database.
- *
- * @return All pets in the database.
- * @throws NotAcceptable Unsupported `Accept` header specified.
- */
- @RemoteGet("/pet")
- public Collection<Pet> getPets() throws NotAcceptable;
-
- /**
- * Returns a pet from the database.
- *
- * @param petId The ID of the pet to retrieve.
- * @return The pet.
- * @throws IdNotFound Pet was not found.
- * @throws NotAcceptable Unsupported `Accept` header specified.
- */
- @RemoteGet("/pet/{petId}")
- public Pet getPet(
- @Path(
- name="petId",
- schema=@Schema(description="ID of pet to return")
- ) long petId
- ) throws IdNotFound, NotAcceptable;
-
- /**
- * Adds a pet to the database.
- *
- * @param pet The pet data to add to the database.
- * @return Ok if successful.
- * @throws IdConflict ID already in use.
- * @throws NotAcceptable Unsupported `Accept` header specified.
- * @throws UnsupportedMediaType Unsupported `Content-Type` header
specified.
- */
- @RemotePost("/pet")
- public long createPet(
- @Content(
- schema=@Schema(description="Pet object to add to the
store")
- ) CreatePet pet
- ) throws IdConflict, NotAcceptable, UnsupportedMediaType;
-
- /**
- * Updates a pet in the database.
- *
- * @param pet The pet data to add to the database.
- * @return Ok if successful.
- * @throws IdNotFound ID not found.
- * @throws NotAcceptable Unsupported `Accept` header specified.
- * @throws UnsupportedMediaType Unsupported `Content-Type` header
specified.
- */
- @RemotePut("/pet/{petId}")
- public Ok updatePet(
- @Content(
- schema=@Schema(description="Pet object that needs to be
added to the store")
- ) UpdatePet pet
- ) throws IdNotFound, NotAcceptable, UnsupportedMediaType;
-
- /**
- * Find all pets with the matching statuses.
- *
- * @param status The statuses to match against.
- * @return The pets that match the specified statuses.
- * @throws NotAcceptable Unsupported `Accept` header specified.
- */
- @RemoteGet("/pet/findByStatus")
- public Collection<Pet> findPetsByStatus(
- @Query(
- name="status",
- schema=@Schema(
- description="Status values that need to be
considered for filter.",
- required=true,
- type="array",
- collectionFormat="csv",
- items=@Items(
- type="string",
- _enum="AVAILABLE,PENDING,SOLD",
- _default="AVAILABLE"
- )
- )
- ) PetStatus[] status
- ) throws NotAcceptable;
-
- /**
- * Deletes the specified pet.
- *
- * @param apiKey Security key.
- * @param petId ID of pet to delete.
- * @return Ok if successful.
- * @throws IdNotFound Pet not found.
- * @throws NotAcceptable Unsupported `Accept` header specified.
- */
- @RemoteDelete("/pet/{petId}")
- public Ok deletePet(
- @Header(
- name="api_key",
- schema=@Schema(
- description="Security API key",
- required=true
- )
- ) String apiKey,
- @Path(
- name="petId",
- schema=@Schema(description="Pet id to delete")
- ) long petId
- ) throws IdNotFound, NotAcceptable;
-
- /**
- * Deletes all pets in the database.
- *
- * @return Ok if successful.
- */
- @RemoteDelete("/pet")
- public Ok deleteAllPets();
-
-
//------------------------------------------------------------------------------------------------------------------
- // Orders
-
//------------------------------------------------------------------------------------------------------------------
-
- // ... (additional order methods would go here)
+
//------------------------------------------------------------------------------------------------------------------
+ // Pets
+
//------------------------------------------------------------------------------------------------------------------
+
+ /**
+ * Returns all pets in the database.
+ *
+ * @return All pets in the database.
+ * @throws NotAcceptable Unsupported `Accept` header specified.
+ */
+ @RemoteGet("/pet")
+ public Collection<Pet> getPets() throws NotAcceptable;
+
+ /**
+ * Returns a pet from the database.
+ *
+ * @param petId The ID of the pet to retrieve.
+ * @return The pet.
+ * @throws IdNotFound Pet was not found.
+ * @throws NotAcceptable Unsupported `Accept` header specified.
+ */
+ @RemoteGet("/pet/{petId}")
+ public Pet getPet(
+ name="petId",
+ schema=@Schema(description="ID of pet to return")
+ ) long petId
+ ) throws IdNotFound, NotAcceptable;
+
+ /**
+ * Adds a pet to the database.
+ *
+ * @param pet The pet data to add to the database.
+ * @return Ok if successful.
+ * @throws IdConflict ID already in use.
+ * @throws NotAcceptable Unsupported `Accept` header specified.
+ * @throws UnsupportedMediaType Unsupported `Content-Type` header
specified.
+ */
+ @RemotePost("/pet")
+ public long createPet(
+ @Content(
+ schema=@Schema(description="Pet object to add to the store")
+ ) CreatePet pet
+ ) throws IdConflict, NotAcceptable, UnsupportedMediaType;
+
+ /**
+ * Updates a pet in the database.
+ *
+ * @param pet The pet data to add to the database.
+ * @return Ok if successful.
+ * @throws IdNotFound ID not found.
+ * @throws NotAcceptable Unsupported `Accept` header specified.
+ * @throws UnsupportedMediaType Unsupported `Content-Type` header
specified.
+ */
+ @RemotePut("/pet/{petId}")
+ public Ok updatePet(
+ @Content(
+ schema=@Schema(description="Pet object that needs to be added to
the store")
+ ) UpdatePet pet
+ ) throws IdNotFound, NotAcceptable, UnsupportedMediaType;
+
+ /**
+ * Find all pets with the matching statuses.
+ *
+ * @param status The statuses to match against.
+ * @return The pets that match the specified statuses.
+ * @throws NotAcceptable Unsupported `Accept` header specified.
+ */
+ @RemoteGet("/pet/findByStatus")
+ public Collection<Pet> findPetsByStatus(
+ @Query(
+ name="status",
+ schema=@Schema(
+ description="Status values that need to be considered for
filter.",
+ required=true,
+ type="array",
+ collectionFormat="csv",
+ items=@Items(
+ type="string",
+ _enum="AVAILABLE,PENDING,SOLD",
+ _default="AVAILABLE"
+ )
+ )
+ ) PetStatus[] status
+ ) throws NotAcceptable;
+
+ /**
+ * Deletes the specified pet.
+ *
+ * @param apiKey Security key.
+ * @param petId ID of pet to delete.
+ * @return Ok if successful.
+ * @throws IdNotFound Pet not found.
+ * @throws NotAcceptable Unsupported `Accept` header specified.
+ */
+ @RemoteDelete("/pet/{petId}")
+ public Ok deletePet(
+ @Header(
+ name="api_key",
+ schema=@Schema(
+ description="Security API key",
+ required=true
+ )
+ ) String apiKey,
+ @Path(
+ name="petId",
+ schema=@Schema(description="Pet id to delete")
+ ) long petId
+ ) throws IdNotFound, NotAcceptable;
+
+ /**
+ * Deletes all pets in the database.
+ *
+ * @return Ok if successful.
+ */
+ @RemoteDelete("/pet")
+ public Ok deleteAllPets();
+
+
//------------------------------------------------------------------------------------------------------------------
+ // Orders
+
//------------------------------------------------------------------------------------------------------------------
+
+ // ... (additional order methods would go here)
}
```
@@ -160,36 +159,36 @@ Both sets of annotations are provided by pulling in the
Juneau dependency below:
</dependency>
```
-The `Pet` class is a DTO that gets serialized over the REST connection.
+The
[Pet](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-api/src/main/java/org/apache/juneau/petstore/dto/Pet.java)
class is a DTO that gets serialized over the REST connection.
It is also annotated with JPA annotations so that they can easily be stored in
a JPA datastore on the server side.
-#### Pet.java
+####
[Pet.java](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-api/src/main/java/org/apache/juneau/petstore/dto/Pet.java)
```java
@Bean(typeName="Pet", properties="id,species,name,tags,price,status")
@Entity(name="PetstorePet")
public class Pet {
- @Column @Id @GeneratedValue
- @Schema(description="Unique identifier for this pet.")
- @Html(link="servlet:/pet/{id}")
- private long id;
+ @Column @Id @GeneratedValue
+ @Schema(description="Unique identifier for this pet.")
+ @Html(link="servlet:/pet/{id}")
+ private long id;
- @Column(length=50)
- @Schema(description="Pet name.", minLength=3, maxLength=50)
- private String name;
+ @Column(length=50)
+ Schema(description="Pet name.", minLength=3, maxLength=50)
+ private String name;
- @Column
- @Schema(description="Price of pet.", maximum="999.99")
- @Html(render=PriceRender.class)
- private float price;
+ @Column
+ @Schema(description="Price of pet.", maximum="999.99")
+ @Html(render=PriceRender.class)
+ private float price;
- // ... (additional fields and methods would go here)
+ // ... (additional fields and methods would go here)
}
```
-The annotations here are a combination of Juneau annotations for controlling
marshalling (<a href="/site/apidocs/org/apache/juneau/annotation/Bean.html"
target="_blank">@Bean</a>, <a
href="/site/apidocs/org/apache/juneau/html/annotation/Html.html"
target="_blank">@Html</a>) and
+The annotations here are a combination of Juneau annotations for controlling
marshalling (`@Bean`, `@Html`) and
documentation/validation (`@Schema`), and JPA annotations for database
persistence (`@Entity`, `@Column`).
Most applications may choose to have separate classes for DTOs and JPA beans
since you typically are not going to want
diff --git a/juneau-docs/docs/topics/16.04.00.JuneauPetstoreClient.md
b/juneau-docs/docs/topics/16.04.00.JuneauPetstoreClient.md
index 259d621a1..6e1955133 100644
--- a/juneau-docs/docs/topics/16.04.00.JuneauPetstoreClient.md
+++ b/juneau-docs/docs/topics/16.04.00.JuneauPetstoreClient.md
@@ -3,28 +3,28 @@ title: "juneau-petstore-client"
slug: JuneauPetstoreClient
---
-The `juneau-petstore-client` module contains a single `Main` class used to
instantiate the proxy against our remote REST
+The
[juneau-petstore-client](https://github.com/apache/juneau-petstore/tree/master/juneau-petstore-client)
module contains a single
[Main](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-client/src/main/java/org/apache/juneau/petstore/client/Main.java)
class used to instantiate the proxy against our remote REST
interface using the Java interface described above.
-#### Main.java
+####
[Main.java](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-client/src/main/java/org/apache/juneau/petstore/client/Main.java)
```java
public class Main {
- public static void main(String[] args) {
+ public static void main(String[] args) {
- // Create a RestClient with JSON serialization support.
- RestClient restClient = RestClient.create().json5().build();
+ // Create a RestClient with JSON serialization support.
+ RestClient restClient = RestClient.create().json5().build();
- // Instantiate our proxy.
- PetStore petStore = restClient.getRemote(PetStore.class,
"http://localhost:5000");
+ // Instantiate our proxy.
+ PetStore petStore = restClient.getRemote(PetStore.class,
"http://localhost:5000");
- // Print out the pets in the store.
- Collection<Pet> pets = petStore.getPets();
+ // Print out the pets in the store.
+ Collection<Pet> pets = petStore.getPets();
- // Pretty-print them to STDOUT.
- Json5.DEFAULT_READABLE.println(pets);
- }
+ // Pretty-print them to STDOUT.
+ Json5.DEFAULT_READABLE.println(pets);
+ }
}
```
diff --git a/juneau-docs/docs/topics/16.05.00.JuneauPetstoreServer.md
b/juneau-docs/docs/topics/16.05.00.JuneauPetstoreServer.md
index 82b218dfb..230721f21 100644
--- a/juneau-docs/docs/topics/16.05.00.JuneauPetstoreServer.md
+++ b/juneau-docs/docs/topics/16.05.00.JuneauPetstoreServer.md
@@ -3,12 +3,12 @@ title: "juneau-petstore-server"
slug: JuneauPetstoreServer
---
-The `juneau-petstore-server` module contains all of the guts of the
application.
+The
[juneau-petstore-server](https://github.com/apache/juneau-petstore/tree/master/juneau-petstore-server)
module contains all of the guts of the application.
It's a standard Spring Boot application with Juneau integration support.
-For brevity, the app and configuration classes are combined into the following:
+For brevity, the app and configuration classes are combined into the following
[App](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/server/App.java)
class:
-#### App.java
+####
[App.java](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/server/App.java)
```java
@SpringBootApplication
@@ -58,11 +58,11 @@ public class App {
Notice how cleanly Juneau servlets fit into Spring Boot.
No special initializers are required to integrate Juneau with Spring Boot.
-The `RootResources` class is the top-level entry point into the REST API.
+The
[RootResources](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/rest/RootResources.java)
class is the top-level entry point into the REST API.
It allows us to group child resources.
-In our case though we only have one child resource...`PetStoreResource`:
+In our case though we only have one child
resource...[PetStoreResource](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/rest/PetStoreResource.java):
-#### RootResources.java
+####
[RootResources.java](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/rest/RootResources.java)
```java
@Rest(
@@ -100,13 +100,13 @@ public class RootResources extends
BasicSpringRestServletGroup {
```
By extending from `BasicSpringRestServletGroup`, the root servlet hooks into
the injection framework of Spring
-to resolve spring beans such as the child resource `PetStoreResource`.
+to resolve spring beans such as the child resource
[PetStoreResource](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/rest/PetStoreResource.java).
This page renders as follows: `http://localhost:5000`
-The `PetStoreResource` class is the REST implementation of our `PetStore`
interface.
+The
[PetStoreResource](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/rest/PetStoreResource.java)
class is the REST implementation of our
[PetStore](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-api/src/main/java/org/apache/juneau/petstore/PetStore.java)
interface.
-#### PetStoreResource.java
+####
[PetStoreResource.java](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/rest/PetStoreResource.java)
```java
@Rest(
@@ -223,9 +223,9 @@ public class PetStoreResource extends BasicRestObject
implements PetStore {
Clicking the `petstore` link on the root page takes you to our PetStore
resource: `http://localhost:5000/petstore`
-The methods defined in our `PetStore` interface are implemented like so:
+The methods defined in our
[PetStore](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-api/src/main/java/org/apache/juneau/petstore/PetStore.java)
interface are implemented like so:
-#### PetStoreResource.java
+####
[PetStoreResource.java](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-server/src/main/java/org/apache/juneau/petstore/rest/PetStoreResource.java)
```java
@Override /* PetStore */
@@ -274,7 +274,7 @@ public long createPet(CreatePet pet) throws IdConflict,
NotAcceptable, Unsupport
...
```
-After running the `Main` method in the client code to populate the database,
the page renders as follows: `http://localhost:5000/petstore/pet`
+After running the `main` method in the client code to populate the database,
the page renders as follows: `http://localhost:5000/petstore/pet`
The OPTIONS menu items takes you to the auto-generated Swagger UI for the
application: `http://localhost:10000/petstore/pet?method=OPTIONS`
@@ -289,9 +289,9 @@ Auto-generated examples are available for all supported
languages:
For example, application/json5:
Examples can be derived in a number of ways.
-In our case, we've defined a static method on our Pet class annotated with
@Example:
+In our case, we've defined a static method on our Pet class annotated with
`@Example`:
-#### Pet.java
+####
[Pet.java](https://github.com/apache/juneau-petstore/blob/master/juneau-petstore-api/src/main/java/org/apache/juneau/petstore/dto/Pet.java)
```java
@Example
diff --git a/juneau-docs/docs/topics/17.01.00.JuneauExamplesCore.md
b/juneau-docs/docs/topics/17.01.00.JuneauExamplesCore.md
new file mode 100644
index 000000000..c5de34d6f
--- /dev/null
+++ b/juneau-docs/docs/topics/17.01.00.JuneauExamplesCore.md
@@ -0,0 +1,166 @@
+---
+slug: JuneauExamplesCore
+---
+
+# juneau-examples-core
+
+The
[juneau-examples-core](https://github.com/apache/juneau/tree/master/juneau-examples/juneau-examples-core)
module provides practical examples demonstrating how to use Apache Juneau's
core marshalling capabilities for serialization and deserialization of Plain
Old Java Objects (POJOs).
+
+## Overview
+
+This module focuses on the fundamental serialization and deserialization
features of Juneau Core, showing developers how to:
+
+- Convert POJOs to various content types (JSON, XML, RDF)
+- Parse content back into POJOs
+- Configure serializers and parsers with different properties
+- Handle complex object structures
+
+## Getting Started
+
+To use the examples in this module, add the following dependency to your
project:
+
+```xml
+<dependency>
+ <groupId>org.apache.juneau</groupId>
+ <artifactId>juneau-core</artifactId>
+ <version>${juneau.version}</version>
+</dependency>
+```
+
+## Example Categories
+
+### JSON Examples
+
+Juneau provides comprehensive JSON support out of the box, allowing you to
read and write JSON structures into POJOs with minimal configuration.
+
+####
[JsonSimpleExample.java](https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/json/JsonSimpleExample.java)
+Demonstrates basic usage of <a
href="/site/apidocs/org/apache/juneau/json/JsonSerializer.html"
target="_blank">JsonSerializer</a> and <a
href="/site/apidocs/org/apache/juneau/json/JsonParser.html"
target="_blank">JsonParser</a> to convert POJOs to JSON strings and back to
POJOs.
+
+**Key Features:**
+- Simple POJO serialization to JSON
+- JSON parsing back to POJOs
+- Automatic type inference
+- Null handling
+
+####
[JsonConfigurationExample.java](https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/json/JsonConfigurationExample.java)
+Shows how to create <a
href="/site/apidocs/org/apache/juneau/json/JsonParser.html"
target="_blank">JsonParser</a> and <a
href="/site/apidocs/org/apache/juneau/json/JsonSerializer.html"
target="_blank">JsonSerializer</a> instances with custom configuration
properties.
+
+**Key Features:**
+- Custom serializer/parser configuration
+- Property customization
+- Formatting options
+- Validation settings
+
+### XML Examples
+
+Juneau's XML support enables seamless conversion between POJOs and XML
structures.
+
+####
[XmlComplexExample.java](https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/xml/XmlComplexExample.java)
+Demonstrates how to use <a
href="/site/apidocs/org/apache/juneau/xml/XmlSerializer.html"
target="_blank">XmlSerializer</a> and <a
href="/site/apidocs/org/apache/juneau/xml/XmlParser.html"
target="_blank">XmlParser</a> to handle complex POJOs with nested objects and
collections.
+
+**Key Features:**
+- Complex object serialization to XML
+- Nested object handling
+- Collection serialization
+- XML namespace support
+
+### RDF Examples
+
+For RDF support, Juneau integrates with Apache Jena to provide RDF
serialization capabilities.
+
+#### Prerequisites
+Add Apache Jena to your classpath:
+
+```xml
+<dependency>
+ <groupId>org.apache.jena</groupId>
+ <artifactId>jena-core</artifactId>
+ <version>${jena.version}</version> <!-- Juneau is tested against 2.7.1 -->
+</dependency>
+```
+
+#### RDF Support
+RDF serialization support is available through the `juneau-marshall-rdf`
module. While there isn't a dedicated example file, RDF functionality can be
demonstrated using the existing serializers with RDF-specific configurations.
+
+**Key Features:**
+- POJO to RDF conversion
+- Multiple RDF formats (RDF/XML, N3, NTriple, Turtle)
+- RDF vocabulary mapping
+- Semantic web integration
+
+:::note RDF Examples
+RDF examples are integrated into the core serialization examples rather than
having separate dedicated example files.
+:::
+
+## Running the Examples
+
+All examples in this module are designed to be run as standalone Java
applications. Each example class contains a `main` method that demonstrates the
specific functionality.
+
+### Example Structure
+
+```java
+public class ExampleClass {
+ public static void main(String[] args) {
+ // Example implementation
+ // Demonstrates specific Juneau functionality
+ }
+}
+```
+
+### Common Patterns
+
+The examples follow these common patterns:
+
+1. **Create POJOs** - Define simple or complex Java objects
+2. **Configure Serializers/Parsers** - Set up Juneau components with desired
properties
+3. **Serialize** - Convert POJOs to target format (JSON, XML, RDF)
+4. **Parse** - Convert formatted strings back to POJOs
+5. **Validate** - Ensure data integrity throughout the process
+
+## Best Practices
+
+### Performance Considerations
+- Reuse serializer/parser instances when possible
+- Configure appropriate buffer sizes for large objects
+- Use streaming for very large datasets
+
+### Error Handling
+- Always handle serialization/parsing exceptions
+- Validate input data before processing
+- Use appropriate logging for debugging
+
+### Configuration
+- Start with default configurations
+- Customize only when necessary
+- Document custom configurations
+
+## Integration with Other Modules
+
+The examples in this module serve as the foundation for more complex scenarios
found in:
+
+<tree>
+<node-0><java-project><a
href="https://github.com/apache/juneau/tree/master/juneau-examples/juneau-examples-rest"
target="_blank">juneau-examples-rest</a></java-project> - REST API examples
using these core concepts</node-0>
+<node-0><java-project><a href="https://github.com/apache/juneau-petstore"
target="_blank">juneau-petstore</a></java-project> - Complete application
demonstrating end-to-end usage</node-0>
+<node-0><java-project><a
href="https://github.com/apache/juneau/tree/master/juneau-microservice"
target="_blank">juneau-microservice</a></java-project> - Microservice examples
building on core serialization</node-0>
+</tree>
+
+## Related Documentation
+
+<tree>
+<node-0><java-doc><a href="/docs/topics/JuneauMarshallBasics"
target="_blank">Juneau Marshall Basics</a></java-doc> - Core marshalling
concepts</node-0>
+<node-0><java-doc><a href="/docs/topics/JuneauEcosystemOverview"
target="_blank">Juneau Ecosystem Overview</a></java-doc> - Overall framework
architecture</node-0>
+<node-0><java-doc><a href="/docs/topics/JuneauExamplesRest"
target="_blank">juneau-examples-rest</a></java-doc> - REST-specific
examples</node-0>
+</tree>
+
+## Source Code
+
+The complete source code for all examples is available in the
[juneau-examples-core](https://github.com/apache/juneau/tree/master/juneau-examples/juneau-examples-core)
module of the Apache Juneau project.
+
+## Contributing
+
+To contribute new examples or improve existing ones:
+
+1. Follow the established patterns in existing examples
+2. Include comprehensive comments and documentation
+3. Test examples with various data scenarios
+4. Update this documentation when adding new examples
diff --git a/juneau-docs/docs/topics/17.02.00.JuneauExamplesRest.md
b/juneau-docs/docs/topics/17.02.00.JuneauExamplesRest.md
new file mode 100644
index 000000000..c60a7824e
--- /dev/null
+++ b/juneau-docs/docs/topics/17.02.00.JuneauExamplesRest.md
@@ -0,0 +1,261 @@
+---
+slug: JuneauExamplesRest
+---
+
+# juneau-examples-rest
+
+The
[juneau-examples-rest](https://github.com/apache/juneau/tree/master/juneau-examples/juneau-examples-rest)
module provides comprehensive examples demonstrating how to build REST APIs
using Apache Juneau's REST server capabilities.
+
+## Overview
+
+This module showcases practical examples of building REST services with
Juneau, including:
+
+- REST resource implementation
+- HTTP method handling
+- Request/response serialization
+- Error handling and validation
+- Integration with various data sources
+
+## Getting Started
+
+To use the examples in this module, add the following dependencies to your
project:
+
+```xml
+<dependency>
+ <groupId>org.apache.juneau</groupId>
+ <artifactId>juneau-rest-server</artifactId>
+ <version>${juneau.version}</version>
+</dependency>
+<dependency>
+ <groupId>org.apache.juneau</groupId>
+ <artifactId>juneau-rest-client</artifactId>
+ <version>${juneau.version}</version>
+</dependency>
+```
+
+## Example Resources
+
+###
[HelloWorldResource.java](https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java)
+A simple REST resource demonstrating basic HTTP method handling and response
serialization.
+
+**Features:**
+- GET method implementation
+- JSON response serialization
+- Simple POJO return types
+- Basic error handling
+
+###
[RequestEchoResource.java](https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java)
+Shows how to handle incoming requests and echo back request information.
+
+**Features:**
+- Request object inspection
+- Header and parameter access
+- Request body parsing
+- Response customization
+
+###
[PhotosResource.java](https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java)
+Demonstrates file handling and binary data management in REST APIs.
+
+**Features:**
+- File upload handling
+- Binary data processing
+- Image metadata extraction
+- File serving capabilities
+
+### DTO Examples
+
+####
[AtomFeedResource.java](https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/AtomFeedResource.java)
+Shows how to create and serve Atom feeds using Juneau's DTO capabilities.
+
+**Features:**
+- Atom feed generation
+- RSS/Atom standard compliance
+- Dynamic content updates
+- Feed metadata management
+
+####
[JsonSchemaResource.java](https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/JsonSchemaResource.java)
+Demonstrates JSON Schema generation for API documentation and validation.
+
+**Features:**
+- Automatic schema generation
+- API documentation
+- Request/response validation
+- Schema customization
+
+### Command Pattern Examples
+
+####
[EchoCommand.java](https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/command/EchoCommand.java)
+Illustrates the command pattern implementation for REST operations.
+
+**Features:**
+- Command object design
+- Parameter validation
+- Result processing
+- Error handling
+
+## Advanced Features
+
+### AdminGuard
+Demonstrates security and access control in REST APIs.
+
+**Features:**
+- Authentication checking
+- Authorization validation
+- Security context handling
+- Access control patterns
+
+###
[UtilityBeansResource.java](https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/UtilityBeansResource.java)
+Shows how to create utility resources for common operations.
+
+**Features:**
+- Utility method exposure
+- Common operation patterns
+- Reusable functionality
+- Service composition
+
+###
[HtmlBeansResource.java](https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HtmlBeansResource.java)
+Demonstrates HTML generation and web interface creation.
+
+**Features:**
+- HTML response generation
+- Template-based rendering
+- Web interface creation
+- Form handling
+
+## Project Structure
+
+The examples are organized in a clear package structure:
+
+```
+org.apache.juneau.examples.rest/
+βββ HelloWorldResource.java
+βββ RequestEchoResource.java
+βββ PhotosResource.java
+βββ AdminGuard.java
+βββ UtilityBeansResource.java
+βββ HtmlBeansResource.java
+βββ command/
+β βββ EchoCommand.java
+βββ dto/
+ βββ AtomFeedResource.java
+ βββ JsonSchemaResource.java
+ βββ DtoExamples.java
+```
+
+## Configuration Examples
+
+### Basic REST Configuration
+```java
+@Rest(
+ path="/api",
+ serializers={JsonSerializer.class, XmlSerializer.class},
+ parsers={JsonParser.class, XmlParser.class}
+)
+public class MyResource {
+ // Resource implementation
+}
+```
+
+### Advanced Configuration
+```java
+@Rest(
+ path="/api/v1",
+ serializers={JsonSerializer.class, XmlSerializer.class,
HtmlSerializer.class},
+ parsers={JsonParser.class, XmlParser.class, HtmlParser.class},
+ config={
+ @RestConfig(name="REST_allowMethodParam", value="true"),
+ @RestConfig(name="REST_allowHeaderParam", value="true")
+ }
+)
+public class AdvancedResource {
+ // Advanced resource implementation
+}
+```
+
+## Testing the Examples
+
+### Running Individual Examples
+Each resource can be tested independently by deploying it to a servlet
container or using the embedded Jetty server.
+
+### Integration Testing
+The module includes integration tests that demonstrate:
+- End-to-end request/response cycles
+- Error scenario handling
+- Performance characteristics
+- Cross-browser compatibility
+
+## Best Practices Demonstrated
+
+### Resource Design
+- Single responsibility principle
+- Clear method naming
+- Consistent error handling
+- Proper HTTP status codes
+
+### Data Handling
+- Input validation
+- Output formatting
+- Error serialization
+- Content type negotiation
+
+### Security
+- Authentication patterns
+- Authorization checks
+- Input sanitization
+- Output filtering
+
+## Integration with Other Modules
+
+These REST examples integrate with:
+
+<tree>
+<node-0><java-project><a
href="https://github.com/apache/juneau/tree/master/juneau-examples/juneau-examples-core"
target="_blank">juneau-examples-core</a></java-project> - Uses core
serialization examples</node-0>
+<node-0><java-project><a href="https://github.com/apache/juneau-petstore"
target="_blank">juneau-petstore</a></java-project> - Provides foundation for
complete application</node-0>
+<node-0><java-project><a
href="https://github.com/apache/juneau/tree/master/juneau-microservice"
target="_blank">juneau-microservice</a></java-project> - Demonstrates
microservice patterns</node-0>
+</tree>
+
+## Deployment Options
+
+### Servlet Container
+Deploy to any Servlet 3.1+ container:
+- Tomcat
+- Jetty
+- WildFly
+- WebLogic
+
+### Spring Boot Integration
+Use with Spring Boot for rapid development:
+```java
+@SpringBootApplication
+public class Application {
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+}
+```
+
+### Embedded Server
+Run as standalone application with embedded server.
+
+## Related Documentation
+
+<tree>
+<node-0><java-doc><a href="/docs/topics/JuneauRestServerBasics"
target="_blank">Juneau REST Server Basics</a></java-doc> - Core REST server
concepts</node-0>
+<node-0><java-doc><a href="/docs/topics/JuneauRestClientBasics"
target="_blank">Juneau REST Client Basics</a></java-doc> - REST client
usage</node-0>
+<node-0><java-doc><a href="/docs/topics/JuneauExamplesCore"
target="_blank">juneau-examples-core</a></java-doc> - Core serialization
examples</node-0>
+<node-0><java-doc><a href="/docs/topics/JuneauPetstoreBasics"
target="_blank">juneau-petstore</a></java-doc> - Complete application
example</node-0>
+</tree>
+
+## Source Code
+
+The complete source code for all REST examples is available in the
[juneau-examples-rest](https://github.com/apache/juneau/tree/master/juneau-examples/juneau-examples-rest)
module of the Apache Juneau project.
+
+## Contributing
+
+To contribute new REST examples:
+
+1. Follow RESTful design principles
+2. Include comprehensive error handling
+3. Provide clear documentation
+4. Test with various HTTP clients
+5. Update this documentation when adding new examples
diff --git a/juneau-docs/docs/topics/17.03.00.JuneauExamplesRestJetty.md
b/juneau-docs/docs/topics/17.03.00.JuneauExamplesRestJetty.md
new file mode 100644
index 000000000..1e7db2e68
--- /dev/null
+++ b/juneau-docs/docs/topics/17.03.00.JuneauExamplesRestJetty.md
@@ -0,0 +1,317 @@
+---
+slug: JuneauExamplesRestJetty
+---
+
+# juneau-examples-rest-jetty
+
+The
[juneau-examples-rest-jetty](https://github.com/apache/juneau/tree/master/juneau-examples/juneau-examples-rest-jetty)
module demonstrates how to deploy Juneau REST servers using embedded Jetty
server for standalone microservice applications.
+
+## Overview
+
+This example shows how to create a lightweight, self-contained REST
microservice using Apache Juneau's Jetty integration. It's perfect for
scenarios where you need a standalone application that can be easily deployed
and run without external dependencies.
+
+## Getting Started
+
+### Prerequisites
+- Java 17+
+- Maven 3.6+
+
+### Dependencies
+
+Add the following dependencies to your project:
+
+```xml
+<dependency>
+ <groupId>org.apache.juneau</groupId>
+ <artifactId>juneau-microservice-jetty</artifactId>
+ <version>${juneau.version}</version>
+</dependency>
+<dependency>
+ <groupId>org.apache.juneau</groupId>
+ <artifactId>juneau-examples-rest</artifactId>
+ <version>${juneau.version}</version>
+</dependency>
+```
+
+## Example Implementation
+
+### Main Application Class
+
+The example demonstrates a simple REST microservice using the
[App](https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest-jetty/src/main/java/org/apache/juneau/examples/rest/jetty/App.java)
class:
+
+```java
+package org.apache.juneau.examples.rest.jetty;
+
+import org.apache.juneau.examples.rest.RootResources;
+import org.apache.juneau.microservice.jetty.*;
+
+public class App {
+ public static void main(String[] args) throws Exception {
+ JettyMicroservice
+ .create()
+ .args(args)
+ .servlet(RootResources.class)
+ .build()
+ .start()
+ .startConsole()
+ .join();
+ }
+}
+```
+
+### Key Features
+
+- **Embedded Jetty Server** - No external servlet container required
+- **Standalone Application** - Can be run as a simple JAR file
+- **Configuration Support** - Uses `examples.cfg` configuration file
+- **Console Interface** - Built-in management console
+- **Resource Integration** - Seamlessly integrates with juneau-examples-rest
resources
+
+## Configuration
+
+### Configuration File
+
+The application looks for an `examples.cfg` file in the home directory. This
file can contain various configuration options:
+
+```properties
+# Server configuration
+server.port=8080
+server.host=localhost
+
+# Logging configuration
+logging.level=INFO
+logging.file=microservice.log
+
+# REST configuration
+rest.path=/api
+rest.serializers=JsonSerializer,XmlSerializer
+rest.parsers=JsonParser,XmlParser
+```
+
+### Command Line Arguments
+
+The application accepts standard command line arguments:
+
+```bash
+java -jar juneau-examples-rest-jetty.jar --port=8080 --host=0.0.0.0
+```
+
+## Running the Example
+
+### Development Mode
+
+```bash
+# Clone the repository
+git clone https://github.com/apache/juneau.git
+cd juneau
+
+# Build the project
+mvn clean package
+
+# Run the Jetty example
+java -jar
juneau-examples/juneau-examples-rest-jetty/target/juneau-examples-rest-jetty-${version}.jar
+```
+
+### Production Deployment
+
+```bash
+# Run with custom configuration
+java -jar juneau-examples-rest-jetty.jar --config=/path/to/config.cfg
+
+# Run with specific port
+java -jar juneau-examples-rest-jetty.jar --port=9090
+
+# Run with console disabled
+java -jar juneau-examples-rest-jetty.jar --no-console
+```
+
+## Available Endpoints
+
+Once running, the application provides access to all the REST examples from
the
[juneau-examples-rest](https://github.com/apache/juneau/tree/master/juneau-examples/juneau-examples-rest)
module:
+
+- **Root Resources** - `GET /api/`
+- **Hello World** - `GET /api/helloWorld`
+- **Request Echo** - `GET /api/requestEcho`
+- **Photos** - `GET /api/photos`
+- **DTO Examples** - Various DTO demonstration endpoints
+
+## Architecture
+
+### JettyMicroservice Class
+
+The
[App](https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest-jetty/src/main/java/org/apache/juneau/examples/rest/jetty/App.java)
class provides:
+
+- **Embedded Jetty Server** - Lightweight HTTP server
+- **REST Servlet Integration** - Automatic servlet registration
+- **Configuration Management** - File and command-line configuration
+- **Console Interface** - Built-in management and monitoring
+- **Graceful Shutdown** - Proper resource cleanup
+
+### Resource Integration
+
+The example integrates with the
[juneau-examples-rest](https://github.com/apache/juneau/tree/master/juneau-examples/juneau-examples-rest)
module, providing:
+
+- **Pre-built REST Resources** - Ready-to-use example endpoints
+- **DTO Examples** - Various data transfer object demonstrations
+- **Command Patterns** - Example command implementations
+- **Utility Resources** - Common utility endpoints
+
+## Development Patterns
+
+### Custom Microservice
+
+You can extend the
[App](https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest-jetty/src/main/java/org/apache/juneau/examples/rest/jetty/App.java)
class for custom behavior:
+
+```java
+public class CustomApp extends JettyMicroservice {
+
+ @Override
+ protected void configure() {
+ // Custom configuration
+ setPort(9090);
+ setHost("0.0.0.0");
+ addServlet(CustomResource.class);
+ }
+
+ public static void main(String[] args) throws Exception {
+ new CustomApp().start().join();
+ }
+}
+```
+
+### Multiple Servlets
+
+Register multiple REST servlets:
+
+```java
+JettyMicroservice
+ .create()
+ .servlet(RootResources.class, "/api/*")
+ .servlet(AdminResources.class, "/admin/*")
+ .servlet(PublicResources.class, "/public/*")
+ .build()
+ .start();
+```
+
+## Testing
+
+### Integration Tests
+
+The module includes integration tests in
[juneau-examples-rest-jetty-ftest](https://github.com/apache/juneau/tree/master/juneau-examples/juneau-examples-rest-jetty-ftest):
+
+- **Root Content Tests** - Verify root endpoint responses
+- **Resource Tests** - Test individual REST resources
+- **End-to-End Tests** - Complete request/response cycle testing
+
+### Running Tests
+
+```bash
+# Run integration tests
+mvn test -pl juneau-examples/juneau-examples-rest-jetty-ftest
+
+# Run with specific test
+mvn test -pl juneau-examples/juneau-examples-rest-jetty-ftest
-Dtest=RootResourcesTest
+```
+
+## Deployment Options
+
+### JAR Deployment
+
+```bash
+# Create executable JAR
+mvn clean package
+
+# Run standalone
+java -jar target/juneau-examples-rest-jetty-${version}.jar
+```
+
+### Docker Deployment
+
+```dockerfile
+FROM openjdk:17-jre-slim
+COPY target/juneau-examples-rest-jetty.jar app.jar
+EXPOSE 8080
+ENTRYPOINT ["java", "-jar", "/app.jar"]
+```
+
+### System Service
+
+Create a systemd service file:
+
+```ini
+[Unit]
+Description=Juneau REST Jetty Example
+After=network.target
+
+[Service]
+Type=simple
+User=juneau
+ExecStart=/usr/bin/java -jar /opt/juneau/juneau-examples-rest-jetty.jar
+Restart=always
+
+[Install]
+WantedBy=multi-user.target
+```
+
+## Monitoring and Management
+
+### Built-in Console
+
+The application includes a management console accessible at `/console`:
+
+- **Server Status** - Current server state and metrics
+- **Configuration** - View and modify configuration
+- **Logs** - Real-time log viewing
+- **Health Checks** - Application health status
+
+### Health Endpoints
+
+Standard health check endpoints:
+
+- `GET /health` - Basic health status
+- `GET /health/detailed` - Detailed health information
+- `GET /metrics` - Application metrics
+
+## Best Practices
+
+### Configuration Management
+- Use environment-specific configuration files
+- Implement configuration validation
+- Support hot configuration reloading
+
+### Error Handling
+- Implement comprehensive error handling
+- Provide meaningful error messages
+- Log errors appropriately
+
+### Performance
+- Configure appropriate thread pools
+- Monitor memory usage
+- Implement request timeouts
+
+### Security
+- Implement authentication and authorization
+- Use HTTPS in production
+- Validate all inputs
+
+## Related Documentation
+
+<tree>
+<node-0><java-doc><a href="/docs/topics/JuneauExamplesRest"
target="_blank">juneau-examples-rest</a></java-doc> - REST API examples</node-0>
+<node-0><java-doc><a href="/docs/topics/JuneauExamplesRestSpringboot"
target="_blank">juneau-examples-rest-springboot</a></java-doc> - Spring Boot
examples</node-0>
+<node-0><java-doc><a href="/docs/topics/JuneauMicroserviceCore"
target="_blank">Juneau Microservice Core</a></java-doc> - Core microservice
components</node-0>
+<node-0><java-doc><a href="/docs/topics/JuneauRestServerBasics"
target="_blank">Juneau REST Server Basics</a></java-doc> - REST server
fundamentals</node-0>
+</tree>
+
+## Source Code
+
+The complete source code for the Jetty examples is available in the
[juneau-examples-rest-jetty](https://github.com/apache/juneau/tree/master/juneau-examples/juneau-examples-rest-jetty)
module of the Apache Juneau project.
+
+## Contributing
+
+To contribute improvements to the Jetty examples:
+
+1. Follow the established patterns in the existing code
+2. Include comprehensive tests
+3. Update documentation when adding new features
+4. Ensure backward compatibility
diff --git a/juneau-docs/docs/topics/17.04.00.JuneauExamplesRestSpringboot.md
b/juneau-docs/docs/topics/17.04.00.JuneauExamplesRestSpringboot.md
new file mode 100644
index 000000000..0cf8c5c5c
--- /dev/null
+++ b/juneau-docs/docs/topics/17.04.00.JuneauExamplesRestSpringboot.md
@@ -0,0 +1,472 @@
+---
+slug: JuneauExamplesRestSpringboot
+---
+
+# juneau-examples-rest-springboot
+
+The
[juneau-examples-rest-springboot](https://github.com/apache/juneau/tree/master/juneau-examples/juneau-examples-rest-springboot)
module demonstrates how to integrate Apache Juneau REST servers with Spring
Boot for enterprise-grade microservice applications.
+
+## Overview
+
+This example shows how to leverage Spring Boot's powerful features while using
Juneau's REST capabilities. It demonstrates Spring Boot integration patterns,
dependency injection, and enterprise deployment scenarios.
+
+## Getting Started
+
+### Prerequisites
+- Java 17+
+- Maven 3.6+
+- Spring Boot 2.0+ (tested with Spring Boot 2.7+)
+
+### Dependencies
+
+Add the following dependencies to your project:
+
+```xml
+<dependency>
+ <groupId>org.apache.juneau</groupId>
+ <artifactId>juneau-rest-server-springboot</artifactId>
+ <version>${juneau.version}</version>
+</dependency>
+<dependency>
+ <groupId>org.apache.juneau</groupId>
+ <artifactId>juneau-examples-rest</artifactId>
+ <version>${juneau.version}</version>
+</dependency>
+<dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-web</artifactId>
+ <version>${spring.boot.version}</version>
+</dependency>
+<dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-actuator</artifactId>
+ <version>${spring.boot.version}</version>
+</dependency>
+```
+
+## Example Implementation
+
+### Main Application Class
+
+The example demonstrates Spring Boot integration with Juneau REST:
+
+```java
+package org.apache.juneau.examples.rest.springboot;
+
+import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.springboot.*;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.*;
+import org.springframework.boot.web.servlet.*;
+import org.springframework.context.annotation.*;
+import org.springframework.stereotype.Controller;
+
+@SpringBootApplication
+@Controller
+public class App {
+
+ public static void main(String[] args) {
+ try {
+ new SpringApplicationBuilder(App.class).run(args);
+ System.out.println("Initialized. App available on
http://localhost:5000");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Bean
+ public RootResources getRootResources() {
+ return new RootResources();
+ }
+
+ @Bean
+ public HelloWorldResource getHelloWorldResource() {
+ return new HelloWorldResource();
+ }
+
+ @Bean
+ public HelloWorldMessageProvider getHelloWorldMessageProvider() {
+ return new HelloWorldMessageProvider("Hello Spring injection user!");
+ }
+
+ @Bean
+ public ServletRegistrationBean<jakarta.servlet.Servlet>
getRootServlet(RootResources rootResources) {
+ return new ServletRegistrationBean<>(rootResources, "/*");
+ }
+}
+```
+
+### Key Features
+
+- **Spring Boot Integration** - Full Spring Boot auto-configuration
+- **Dependency Injection** - Spring's IoC container integration
+- **Bean Management** - REST resources as Spring beans
+- **Actuator Support** - Built-in monitoring and management
+- **Configuration Properties** - Spring Boot configuration support
+
+## Spring Boot Integration Patterns
+
+### REST Resource as Spring Bean
+
+```java
+@Bean
+public HelloWorldResource getHelloWorldResource() {
+ return new HelloWorldResource();
+}
+```
+
+### Dependency Injection in REST Resources
+
+```java
+@Rest(path="/hello")
+public class HelloWorldResource extends SpringRestServlet {
+
+ @Autowired
+ private HelloWorldMessageProvider messageProvider;
+
+ @RestGet
+ public String getMessage() {
+ return messageProvider.getMessage();
+ }
+}
+```
+
+### Servlet Registration
+
+```java
+@Bean
+public ServletRegistrationBean<jakarta.servlet.Servlet>
getRootServlet(RootResources rootResources) {
+ return new ServletRegistrationBean<>(rootResources, "/*");
+}
+```
+
+## Configuration
+
+### Application Properties
+
+Configure the application using `application.properties`:
+
+```properties
+# Server configuration
+server.port=5000
+server.servlet.context-path=/
+
+# Spring Boot configuration
+spring.application.name=juneau-examples-rest-springboot
+spring.profiles.active=dev
+
+# Juneau REST configuration
+juneau.rest.path=/api
+juneau.rest.serializers=JsonSerializer,XmlSerializer
+juneau.rest.parsers=JsonParser,XmlParser
+
+# Logging configuration
+logging.level.org.apache.juneau=DEBUG
+logging.level.org.springframework=INFO
+```
+
+### YAML Configuration
+
+Alternative YAML configuration:
+
+```yaml
+server:
+ port: 5000
+ servlet:
+ context-path: /
+
+spring:
+ application:
+ name: juneau-examples-rest-springboot
+ profiles:
+ active: dev
+
+juneau:
+ rest:
+ path: /api
+ serializers:
+ - JsonSerializer
+ - XmlSerializer
+ parsers:
+ - JsonParser
+ - XmlParser
+
+logging:
+ level:
+ org.apache.juneau: DEBUG
+ org.springframework: INFO
+```
+
+## Running the Example
+
+### Development Mode
+
+```bash
+# Clone the repository
+git clone https://github.com/apache/juneau.git
+cd juneau
+
+# Build the project
+mvn clean package
+
+# Run the Spring Boot example
+mvn spring-boot:run -pl juneau-examples/juneau-examples-rest-springboot
+```
+
+### Production Deployment
+
+```bash
+# Run with specific profile
+java -jar juneau-examples-rest-springboot.jar --spring.profiles.active=prod
+
+# Run with custom configuration
+java -jar juneau-examples-rest-springboot.jar --server.port=8080
+
+# Run with external configuration
+java -jar juneau-examples-rest-springboot.jar
--spring.config.location=classpath:/application-prod.properties
+```
+
+## Available Endpoints
+
+The application provides all REST examples from the
[juneau-examples-rest](https://github.com/apache/juneau/tree/master/juneau-examples/juneau-examples-rest)
module:
+
+- **Root Resources** - `GET /api/`
+- **Hello World** - `GET /api/helloWorld`
+- **Request Echo** - `GET /api/requestEcho`
+- **Photos** - `GET /api/photos`
+- **DTO Examples** - Various DTO demonstration endpoints
+
+### Spring Boot Actuator Endpoints
+
+Additional Spring Boot management endpoints:
+
+- **Health Check** - `GET /actuator/health`
+- **Application Info** - `GET /actuator/info`
+- **Metrics** - `GET /actuator/metrics`
+- **Environment** - `GET /actuator/env`
+
+## Advanced Features
+
+### Profile-Based Configuration
+
+```java
+@Configuration
+@Profile("dev")
+public class DevConfig {
+
+ @Bean
+ public HelloWorldMessageProvider devMessageProvider() {
+ return new HelloWorldMessageProvider("Hello from DEV environment!");
+ }
+}
+
+@Configuration
+@Profile("prod")
+public class ProdConfig {
+
+ @Bean
+ public HelloWorldMessageProvider prodMessageProvider() {
+ return new HelloWorldMessageProvider("Hello from PROD environment!");
+ }
+}
+```
+
+### Custom Configuration Properties
+
+```java
+@ConfigurationProperties(prefix = "juneau.rest")
+public class JuneauRestProperties {
+
+ private String path = "/api";
+ private List<String> serializers = Arrays.asList("JsonSerializer");
+ private List<String> parsers = Arrays.asList("JsonParser");
+
+ // Getters and setters
+}
+```
+
+### Conditional Bean Creation
+
+```java
+@Bean
+@ConditionalOnProperty(name = "juneau.rest.console.enabled", havingValue =
"true")
+public RestConsole getRestConsole() {
+ return new RestConsole();
+}
+```
+
+## Testing
+
+### Unit Tests
+
+```java
+@SpringBootTest
+@AutoConfigureTestDatabase
+class HelloWorldResourceTest {
+
+ @Autowired
+ private HelloWorldResource helloWorldResource;
+
+ @Test
+ void testGetMessage() {
+ String message = helloWorldResource.getMessage();
+ assertThat(message).isNotNull();
+ }
+}
+```
+
+### Integration Tests
+
+```java
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+class RestIntegrationTest {
+
+ @Autowired
+ private TestRestTemplate restTemplate;
+
+ @Test
+ void testHelloWorldEndpoint() {
+ ResponseEntity<String> response =
restTemplate.getForEntity("/api/helloWorld", String.class);
+ assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
+ }
+}
+```
+
+## Deployment Options
+
+### JAR Deployment
+
+```bash
+# Create executable JAR
+mvn clean package
+
+# Run standalone
+java -jar target/juneau-examples-rest-springboot-${version}.jar
+```
+
+### Docker Deployment
+
+```dockerfile
+FROM openjdk:17-jre-slim
+COPY target/juneau-examples-rest-springboot.jar app.jar
+EXPOSE 5000
+ENTRYPOINT ["java", "-jar", "/app.jar"]
+```
+
+### Kubernetes Deployment
+
+```yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: juneau-springboot-example
+spec:
+ replicas: 3
+ selector:
+ matchLabels:
+ app: juneau-springboot-example
+ template:
+ metadata:
+ labels:
+ app: juneau-springboot-example
+ spec:
+ containers:
+ - name: app
+ image: juneau-springboot-example:latest
+ ports:
+ - containerPort: 5000
+ env:
+ - name: SPRING_PROFILES_ACTIVE
+ value: "prod"
+```
+
+## Monitoring and Management
+
+### Spring Boot Actuator
+
+Enable comprehensive monitoring:
+
+```properties
+# Actuator configuration
+management.endpoints.web.exposure.include=health,info,metrics,env
+management.endpoint.health.show-details=always
+management.info.env.enabled=true
+```
+
+### Custom Health Indicators
+
+```java
+@Component
+public class JuneauHealthIndicator implements HealthIndicator {
+
+ @Override
+ public Health health() {
+ // Custom health check logic
+ return Health.up()
+ .withDetail("juneau", "Available")
+ .build();
+ }
+}
+```
+
+### Metrics Integration
+
+```java
+@Component
+public class JuneauMetrics {
+
+ private final MeterRegistry meterRegistry;
+
+ public JuneauMetrics(MeterRegistry meterRegistry) {
+ this.meterRegistry = meterRegistry;
+ }
+
+ public void recordRequest(String endpoint) {
+ meterRegistry.counter("juneau.requests", "endpoint",
endpoint).increment();
+ }
+}
+```
+
+## Best Practices
+
+### Configuration Management
+- Use Spring profiles for environment-specific configuration
+- Implement configuration validation
+- Use `@ConfigurationProperties` for type-safe configuration
+
+### Dependency Injection
+- Prefer constructor injection over field injection
+- Use `@Qualifier` for multiple bean implementations
+- Implement proper bean lifecycle management
+
+### Error Handling
+- Use Spring's `@ControllerAdvice` for global error handling
+- Implement custom exception handlers
+- Provide meaningful error responses
+
+### Security
+- Integrate with Spring Security
+- Use HTTPS in production
+- Implement proper authentication and authorization
+
+## Related Documentation
+
+<tree>
+<node-0><java-doc><a href="/docs/topics/JuneauExamplesRest"
target="_blank">juneau-examples-rest</a></java-doc> - REST API examples</node-0>
+<node-0><java-doc><a href="/docs/topics/JuneauExamplesRestJetty"
target="_blank">juneau-examples-rest-jetty</a></java-doc> - Jetty
examples</node-0>
+<node-0><java-doc><a href="/docs/topics/JuneauRestServerSpringbootBasics"
target="_blank">Juneau REST Server Spring Boot</a></java-doc> - Spring Boot
integration</node-0>
+<node-0><java-doc><a href="/docs/topics/JuneauRestServerBasics"
target="_blank">Juneau REST Server Basics</a></java-doc> - REST server
fundamentals</node-0>
+</tree>
+
+## Source Code
+
+The complete source code for the Spring Boot examples is available in the
[juneau-examples-rest-springboot](https://github.com/apache/juneau/tree/master/juneau-examples/juneau-examples-rest-springboot)
module of the Apache Juneau project.
+
+## Contributing
+
+To contribute improvements to the Spring Boot examples:
+
+1. Follow Spring Boot best practices
+2. Include comprehensive tests
+3. Update documentation when adding new features
+4. Ensure compatibility with supported Spring Boot versions
diff --git a/juneau-docs/docs/topics/17.01.00.SecurityBasics.md
b/juneau-docs/docs/topics/18.01.00.SecurityBasics.md
similarity index 100%
rename from juneau-docs/docs/topics/17.01.00.SecurityBasics.md
rename to juneau-docs/docs/topics/18.01.00.SecurityBasics.md
diff --git a/juneau-docs/docs/topics/17.02.00.MarshallingSecurity.md
b/juneau-docs/docs/topics/18.02.00.MarshallingSecurity.md
similarity index 100%
rename from juneau-docs/docs/topics/17.02.00.MarshallingSecurity.md
rename to juneau-docs/docs/topics/18.02.00.MarshallingSecurity.md
diff --git a/juneau-docs/docs/topics/17.03.00.SvlSecurity.md
b/juneau-docs/docs/topics/18.03.00.SvlSecurity.md
similarity index 100%
rename from juneau-docs/docs/topics/17.03.00.SvlSecurity.md
rename to juneau-docs/docs/topics/18.03.00.SvlSecurity.md
diff --git a/juneau-docs/docs/topics/17.04.00.RestSecurity.md
b/juneau-docs/docs/topics/18.04.00.RestSecurity.md
similarity index 100%
rename from juneau-docs/docs/topics/17.04.00.RestSecurity.md
rename to juneau-docs/docs/topics/18.04.00.RestSecurity.md
diff --git a/juneau-docs/docs/topics/18.01.00.V9.0-migration-guide.md
b/juneau-docs/docs/topics/19.01.00.V9.0-migration-guide.md
similarity index 100%
rename from juneau-docs/docs/topics/18.01.00.V9.0-migration-guide.md
rename to juneau-docs/docs/topics/19.01.00.V9.0-migration-guide.md
diff --git a/juneau-docs/docs/topics/TODO.md b/juneau-docs/docs/topics/TODO.md
deleted file mode 100644
index f2ff3820f..000000000
--- a/juneau-docs/docs/topics/TODO.md
+++ /dev/null
@@ -1,56 +0,0 @@
----
-title: "TODO Links"
----
-
-# TODO Links
-
-This page serves as a placeholder for links that need to be properly connected
once the full documentation structure is in place.
-
-## Available Sections
-
-The following sections are planned but not yet linked:
-
-#### Core Components
-
-- juneau-marshall
-- juneau-marshall-rdf
-- juneau-dto
-- juneau-config
-- juneau-assertions
-
-#### REST Components
-
-- juneau-rest-common
-- juneau-rest-server
-- juneau-rest-server-springboot
-- juneau-rest-client
-- juneau-rest-mock
-
-:::tip Examples
-
-- juneau-examples-core
-- juneau-examples-rest
-- my-springboot-microservice
-
-:::
-
-#### Detailed Topics
-
-- PojoCategories
-- Swaps
-- SerializersAndParsers
-- JavaBeansSupport
-- ContextAnnotations
-- Json5
-- UonDetails
-- OpenApiDetails
-- JsonMap
-- SerializerSetsParserSets
-- SimpleVariableLanguage
-- HTML5
-- Atom
-- Swagger
-- SwaggerUI
-- FluentAssertions
-
-*This page will be updated as the documentation structure is finalized.*
diff --git a/juneau-docs/sidebars.ts b/juneau-docs/sidebars.ts
index 729fd58b7..451823130 100644
--- a/juneau-docs/sidebars.ts
+++ b/juneau-docs/sidebars.ts
@@ -1622,40 +1622,62 @@ const sidebars: SidebarsConfig = {
},
{
type: 'category',
- label: '17. Security',
+ label: '17. juneau-examples',
collapsed: true,
items: [
{
type: 'doc',
- id: 'topics/17.01.00.SecurityBasics',
- label: '17.1. Security Basics',
+ id: 'topics/17.01.00.JuneauExamplesCore',
+ label: '17.1. juneau-examples-core',
},
{
type: 'doc',
- id: 'topics/17.02.00.MarshallingSecurity',
- label: '17.2. Marshalling Security',
+ id: 'topics/17.02.00.JuneauExamplesRest',
+ label: '17.2. juneau-examples-rest',
},
{
type: 'doc',
- id: 'topics/17.03.00.SvlSecurity',
- label: '17.3. SVL Security',
+ id: 'topics/17.03.00.JuneauExamplesRestJetty',
+ label: '17.3. juneau-examples-rest-jetty',
},
{
type: 'doc',
- id: 'topics/17.04.00.RestSecurity',
- label: '17.4. REST Security',
+ id: 'topics/17.04.00.JuneauExamplesRestSpringboot',
+ label: '17.4. juneau-examples-rest-springboot',
},
],
+ },
+ {
+ type: 'category',
+ label: '18. Security',
+ collapsed: true,
+ items: [
+ {
+ type: 'doc',
+ id: 'topics/18.01.00.SecurityBasics',
+ label: '18.1. Security Basics',
},
{
type: 'doc',
- id: 'topics/18.01.00.V9.0-migration-guide',
- label: '18. V9.0 Migration Guide',
+ id: 'topics/18.02.00.MarshallingSecurity',
+ label: '18.2. Marshalling Security',
+ },
+ {
+ type: 'doc',
+ id: 'topics/18.03.00.SvlSecurity',
+ label: '18.3. SVL Security',
+ },
+ {
+ type: 'doc',
+ id: 'topics/18.04.00.RestSecurity',
+ label: '18.4. REST Security',
+ },
+ ],
},
{
type: 'doc',
- id: 'topics/TODO',
- label: 'TODO Links',
+ id: 'topics/19.01.00.V9.0-migration-guide',
+ label: '19. V9.0 Migration Guide',
},
],
},
diff --git a/juneau-docs/src/css/custom.css b/juneau-docs/src/css/custom.css
index 599e06d29..a07febc13 100644
--- a/juneau-docs/src/css/custom.css
+++ b/juneau-docs/src/css/custom.css
@@ -466,7 +466,9 @@ javac-field,
javac-field-private,
javac-method,
javac-method-private,
-javac-method-annotation {
+javac-method-annotation,
+javac-project,
+javac-doc {
font: monospace;
font-size: small;
margin-right: 8px;
@@ -483,7 +485,9 @@ java-field,
java-field-private,
java-method,
java-method-private,
-java-method-annotation { font-family: monospace; font-size: medium; }
+java-method-annotation,
+java-project,
+java-doc { font-family: monospace; font-size: medium; }
/* Custom node elements for hierarchy levels */
node-0 { display: block; margin-left: 0em; }
@@ -511,6 +515,8 @@ javac-field-private::before { color: #CCB404; content:
'\25cf\00a0'; font-weight
javac-method::before { color: #008000; content: '\25cf\00a0'; font-weight:
bolder; font-size: x-small; }
javac-method-private::before { color: #CCB404; content: '\25c6\00a0';
font-weight: bolder; font-size: x-small; }
javac-method-annotation::before { color: #00ced1; content: '\25cf\00a0';
font-weight: bolder; font-size: x-small; }
+javac-project::before { color: #ff6b35; content: '\1f4c2\00a0'; font-weight:
bolder; font-size: small; }
+javac-doc::before { color: #4a90e2; content: '\1f4d6\00a0'; font-weight:
bolder; font-size: small; }
java-package::before { color: #e09c01; content: '\229e\00a0'; font-weight:
bolder; font-size: large; }
java-annotation::before { color: #00ced1; content: '\24d0\00a0'; font-weight:
bolder; font-size: large; }
@@ -523,3 +529,5 @@ java-field-private::before { color: #CCB404; content:
'\25cf\00a0'; font-weight:
java-method::before { color: #008000; content: '\25cf\00a0'; font-weight:
bolder; font-size: x-small; }
java-method-private::before { color: #CCB404; content: '\25c6\00a0';
font-weight: bolder; font-size: x-small; }
java-method-annotation::before { color: #00ced1; content: '\25cf\00a0';
font-weight: bolder; font-size: x-small; }
+java-project::before { color: #ff6b35; content: '\1f4c2\00a0'; font-weight:
bolder; font-size: x-large; }
+java-doc::before { color: #4a90e2; content: '\1f4d6\00a0'; font-weight:
bolder; font-size: x-large; }