This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch docs
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/docs by this push:
new c9ec1d734a TODO-249/250: Document marshaller stream static shortcuts +
variant classes (10.0.0)
c9ec1d734a is described below
commit c9ec1d734af7065dd410cad61464d3d10e614982
Author: James Bognar <[email protected]>
AuthorDate: Thu Jul 16 13:28:19 2026 -0400
TODO-249/250: Document marshaller stream static shortcuts + variant classes
(10.0.0)
Feature A (TODO-249): Document the new
Reader/Writer/InputStream/OutputStream
static shortcuts on the marshaller facades in the Marshallers topic page and
a 10.0.0 New-Features release note (incl. IOException-to-unchecked wrapping
and the intentional absence of File overloads).
Feature B (TODO-250): Introduce the variant-class convention (<Format>R =
readable, <Format>C = compact) on the Marshallers, Json5, Hjson, and Ini
topic pages; add New-Feature + Breaking-Change 10.0.0 release notes for the
removal of Json5.DEFAULT_READABLE / Ini.DEFAULT_READABLE /
Hjson.DEFAULT_COMPACT
and the new Json5R / IniR / HjsonC classes. Resolves the stale
Hjson.DEFAULT_COMPACT usage in the Hjson topic and regenerates the AI
knowledge artifacts.
Co-authored-by: Cursor <[email protected]>
---
pages/release-notes/10.0.0.md | 52 ++++++++++++++++++++++++++++
pages/topics/03.01.Marshallers.md | 73 +++++++++++++++++++++++++++++++++++++++
pages/topics/03.25.03.Json5.md | 17 +++++++++
pages/topics/03.40.Hjson.md | 12 +++++--
pages/topics/03.45.Ini.md | 11 +++++-
static/ai/juneau-knowledge.jsonl | 20 +++++------
static/ai/manifest.json | 4 +--
7 files changed, 173 insertions(+), 16 deletions(-)
diff --git a/pages/release-notes/10.0.0.md b/pages/release-notes/10.0.0.md
index 7fadb3145a..4ec341450e 100644
--- a/pages/release-notes/10.0.0.md
+++ b/pages/release-notes/10.0.0.md
@@ -582,6 +582,51 @@ logical types those tools use.
See the [Parquet Basics](/docs/topics/Parquet) topic page for details.
+### Stream-based static marshaller shortcuts
+
+Every marshaller facade now provides **stream-based static shortcuts**
alongside the existing `String` / `byte[]`
+shortcuts, so you can parse from and serialize to streams without going
through a `DEFAULT` instance:
+
+- **Character facades** (`Json`, `Xml`, `Html`, `Yaml`, `Ini`, `Hjson`, …) add
`to(Reader, Class<T>)`,
+ `to(Reader, Type, Type...)`, and `of(Object, Writer)`.
+- **Binary facades** (`MsgPack`, `Cbor`, `Bson`, `Protobuf`, `Parquet`) add
`to(InputStream, Class<T>)`,
+ `to(InputStream, Type, Type...)`, and `of(Object, OutputStream)`.
+
+```java
+MyPojo a = Json.to(reader, MyPojo.class);
+Json.of(myPojo, writer);
+
+MyPojo b = MsgPack.to(inputStream, MyPojo.class);
+MsgPack.of(myPojo, outputStream);
+```
+
+Unlike the instance `read(...)` / `write(...)` methods (which throw a checked
`IOException`), these static
+shortcuts **wrap any underlying `IOException` into an unchecked
`ParseException` (read) or `SerializeException`
+(serialize)**, so they compose cleanly in lambdas and streams. Consistent with
the 10.0.0 stream-only I/O
+narrowing, there are intentionally **no `File` overloads** — open a
`Reader`/`Writer`/`InputStream`/`OutputStream`
+yourself (e.g. via `Files.newBufferedReader(...)`).
+
+See the [Marshallers](/docs/topics/Marshallers) topic page for details.
+
+### Variant marshaller classes (`Json5R` / `IniR` / `HjsonC`)
+
+Three commonly-used non-default marshaller configurations are now first-class
**variant facade classes**, each a
+subclass of its base format facade with its own `DEFAULT` instance and the
full static shortcut surface (including
+the new stream-based shortcuts above) bound to that instance:
+
+- `Json5R` — readable (indented) JSON5, backed by
`Json5Serializer.DEFAULT_READABLE`.
+- `IniR` — readable (spaced) INI, backed by `IniSerializer.DEFAULT_READABLE`.
+- `HjsonC` — compact (single-line) Hjson, backed by
`HjsonSerializer.DEFAULT_COMPACT`.
+
+```java
+String pretty = Json5R.of(myPojo); // readable JSON5
+String compact = HjsonC.of(myPojo); // compact Hjson
+```
+
+These replace the former `Json5.DEFAULT_READABLE`, `Ini.DEFAULT_READABLE`, and
`Hjson.DEFAULT_COMPACT` instance
+constants (see Breaking Changes below). The
[Marshallers](/docs/topics/Marshallers), [JSON5](/docs/topics/Json5),
+[Hjson](/docs/topics/Hjson), and [Ini](/docs/topics/Ini) topic pages were
updated accordingly.
+
### Bug Fixes
_TBD — to be filled in as development continues._
@@ -601,6 +646,13 @@ _TBD — to be filled in as development continues._
- **Static shortcuts (new, on each concrete class):** `Xxx.to(input, type,
...)` parses via `Xxx.DEFAULT.read(...)`; `Xxx.of(object)` serializes via
`Xxx.DEFAULT.write(...)` — e.g. `Json.to(json, MyBean.class)` /
`Json.of(myBean)`.
- **Streaming/record cursors (capability-gated)** — only available when the
underlying serializer/parser implements the corresponding marker interface
(`TokenReadable`/`TokenWritable`, `RecordReadable`/`RecordWritable`,
`ArrayRecordReadable`/`ArrayRecordWritable`): instance
`readTokens`/`writeTokens`, `readRecords`/`writeRecords`,
`readArrayRecords`/`writeArrayRecords`; and their static counterparts
`toTokens`/`ofTokens`, `toRecords`/`ofRecords`,
`toArrayRecords`/`ofArrayRecords`.
+- **Marshaller readable/compact instance constants removed in favor of variant
classes.** The `Json5.DEFAULT_READABLE`, `Ini.DEFAULT_READABLE`, and
`Hjson.DEFAULT_COMPACT` public constants have been removed. Use the new
first-class variant marshaller classes instead (see New Features above):
`Json5R` (readable JSON5), `IniR` (readable INI), and `HjsonC` (compact Hjson).
Each variant is a subclass of its base facade with its own `DEFAULT` and the
full static `of(...)`/`to(...)` shortcut s [...]
+ - `Json5.DEFAULT_READABLE.write(x)` → `Json5R.of(x)` (or `Json5R.DEFAULT`
for an instance).
+ - `Ini.DEFAULT_READABLE.write(x)` → `IniR.of(x)`.
+ - `Hjson.DEFAULT_COMPACT.write(x)` → `HjsonC.of(x)`.
+
+ The in-tree call sites (`BasicSwaggerProviderSession`,
`BasicOpenApiProviderSession`, and the `AtomJsonExample`) were migrated to the
variant classes.
+
Note: the `RecordReader.read()` and `RecordWriter.write()` **cursor**
methods are a separate, unrelated low-level cursor contract — they were never
part of this rename discussion. If you adopted the earlier
`to`/`of`-as-instance-methods preview, revert those call sites back to
`.read(`/`.write(` on the marshaller instance, or switch to the static shortcut
on the concrete class (`Json.to(...)`/`Json.of(...)`) if you don't need a
custom-configured instance.
- **`SerializerSet` / `ParserSet` lookup methods now return `Optional<...>`
(TODO-190).** Every media-type lookup method on `SerializerSet` and `ParserSet`
now returns a `java.util.Optional` instead of `null` on no-match, aligning
these classes with the `Optional`-returning idiom already used by their
consumers (`RestResponse.getSerializerMatch()`,
`RequestContent.getParserMatch()`). Changed signatures:
diff --git a/pages/topics/03.01.Marshallers.md
b/pages/topics/03.01.Marshallers.md
index ad5703cfd8..fbca7a7c47 100644
--- a/pages/topics/03.01.Marshallers.md
+++ b/pages/topics/03.01.Marshallers.md
@@ -83,6 +83,79 @@ String json = Json.of(myPojo);
```
:::
+## Stream-based static shortcuts
+
+In addition to the `String` / `byte[]` static shortcuts shown above, every
marshaller facade also provides
+static shortcuts that read from and write to streams:
+
+- **Character formats** (`Json`, `Xml`, `Html`, `Yaml`, `Ini`, `Hjson`, …) add:
+ - `to(Reader, Class<T>)`
+ - `to(Reader, Type, Type...)`
+ - `of(Object, Writer)`
+- **Binary formats** (`MsgPack`, `Cbor`, `Bson`, `Protobuf`, `Parquet`) add:
+ - `to(InputStream, Class<T>)`
+ - `to(InputStream, Type, Type...)`
+ - `of(Object, OutputStream)`
+
+```java
+// Parse from a Reader / InputStream:
+MyPojo a = Json.to(reader, MyPojo.class);
+MyPojo b = MsgPack.to(inputStream, MyPojo.class);
+
+// Serialize to a Writer / OutputStream:
+Json.of(myPojo, writer);
+MsgPack.of(myPojo, outputStream);
+```
+
+Unlike the instance `read(...)` / `write(...)` methods (which throw a checked
`IOException`), these static
+shortcuts **wrap any `IOException` from the underlying stream** into an
unchecked
+<a href="/site/apidocs/org/apache/juneau/marshall/parser/ParseException.html"
target="_blank">ParseException</a>
+(on the `to(...)` read side) or
+<a
href="/site/apidocs/org/apache/juneau/marshall/serializer/SerializeException.html"
target="_blank">SerializeException</a>
+(on the `of(...)` serialize side), so they can be used directly in lambdas and
streams without a checked-exception burden.
+
+:::note
+There are intentionally **no `File` overloads**. The core I/O surface is
stream-only (see the 10.0.0
+breaking-change note on narrowing serializer/parser I/O to streams). To read
from or write to a file, open the
+`Reader` / `Writer` / `InputStream` / `OutputStream` yourself:
+
+```java
+// Serialize to a file (character format):
+try (Writer w = Files.newBufferedWriter(path)) {
+ Json.of(myPojo, w);
+}
+
+// Parse from a file (binary format):
+try (InputStream in = Files.newInputStream(path)) {
+ MyPojo p = MsgPack.to(in, MyPojo.class);
+}
+```
+:::
+
+## Variant marshaller classes
+
+A handful of formats ship dedicated **variant** facade classes for a
commonly-used non-default configuration.
+Each variant is a subclass of its base format facade with its own `DEFAULT`
instance and the full static
+shortcut surface bound to that instance:
+
+<tree>
+<node-0><javac-class><a
href="/site/apidocs/org/apache/juneau/marshall/marshaller/Json5R.html"
target="_blank">Json5R</a></javac-class> — readable (indented) JSON5, backed by
`Json5Serializer.DEFAULT_READABLE`.</node-0>
+<node-0><javac-class><a
href="/site/apidocs/org/apache/juneau/marshall/marshaller/IniR.html"
target="_blank">IniR</a></javac-class> — readable (spaced) INI, backed by
`IniSerializer.DEFAULT_READABLE`.</node-0>
+<node-0><javac-class><a
href="/site/apidocs/org/apache/juneau/marshall/marshaller/HjsonC.html"
target="_blank">HjsonC</a></javac-class> — compact (single-line) Hjson, backed
by `HjsonSerializer.DEFAULT_COMPACT`.</node-0>
+</tree>
+
+```java
+// Readable JSON5:
+String pretty = Json5R.of(myPojo);
+
+// Compact Hjson:
+String compact = HjsonC.of(myPojo);
+```
+
+These replace the former `Json5.DEFAULT_READABLE`, `Ini.DEFAULT_READABLE`, and
`Hjson.DEFAULT_COMPACT`
+constants (removed in 10.0.0) — a variant class is a first-class facade, so it
exposes the same static
+`of(...)` / `to(...)` shortcut API (including the stream-based shortcuts
above) as any other marshaller.
+
## MarshallUtils
`MarshallUtils` provides a single set of **statically-imported convenience
methods** that cover every
diff --git a/pages/topics/03.25.03.Json5.md b/pages/topics/03.25.03.Json5.md
index a82d8fcb45..13d45815f6 100644
--- a/pages/topics/03.25.03.Json5.md
+++ b/pages/topics/03.25.03.Json5.md
@@ -58,6 +58,23 @@ WriterSerializer serializer = Json5Serializer.DEFAULT;
assertEquals("{foo:'bar',baz:123}", serializer.toString(myPojo));
```
+## Readable output — the `Json5R` variant marshaller
+
+For indented, multi-line JSON5 output, use the dedicated
+<a href="/site/apidocs/org/apache/juneau/marshall/marshaller/Json5R.html"
target="_blank">Json5R</a>
+variant marshaller (backed by `Json5Serializer.DEFAULT_READABLE`). It is a
first-class `Json5` facade, so it
+exposes the same static `of(...)` / `to(...)` shortcut surface as `Json5`
itself:
+
+```java
+// Compact (default):
+String compact = Json5.of(myPojo); // {foo:'bar',baz:123}
+
+// Readable (indented, multi-line):
+String pretty = Json5R.of(myPojo);
+```
+
+(This replaces the former `Json5.DEFAULT_READABLE` constant, removed in
10.0.0.)
+
:::info See Also
<tree>
<node-0><java-class><a
href="/site/apidocs/org/apache/juneau/marshall/json5/Json5Serializer.html"
target="_blank">Json5Serializer</a></java-class></node-0>
diff --git a/pages/topics/03.40.Hjson.md b/pages/topics/03.40.Hjson.md
index e14df1f809..9a9d3c7428 100644
--- a/pages/topics/03.40.Hjson.md
+++ b/pages/topics/03.40.Hjson.md
@@ -52,12 +52,18 @@ Person bob = Hjson.to(rootBraceless, Person.class);
```java
// Readable mode (default) - newlines between members, quoteless strings
-String hjson = Hjson.DEFAULT.of(bean);
+String hjson = Hjson.of(bean);
-// Compact mode - single line, comma-separated
-String compact = Hjson.DEFAULT_COMPACT.of(bean);
+// Compact mode - single line, comma-separated (via the HjsonC variant
marshaller)
+String compact = HjsonC.of(bean);
```
+The compact configuration is exposed as the dedicated
+<a href="/site/apidocs/org/apache/juneau/marshall/marshaller/HjsonC.html"
target="_blank">HjsonC</a>
+variant marshaller (backed by `HjsonSerializer.DEFAULT_COMPACT`). It is a
first-class `Hjson` facade, so it
+exposes the same static `of(...)` / `to(...)` shortcut surface as `Hjson`
itself. (This replaces the former
+`Hjson.DEFAULT_COMPACT` constant, removed in 10.0.0.)
+
## Hjson Syntax Highlights
- **Quoteless strings**: `name: Alice` (no quotes when unambiguous)
diff --git a/pages/topics/03.45.Ini.md b/pages/topics/03.45.Ini.md
index 19e0eab760..31a22c4a35 100644
--- a/pages/topics/03.45.Ini.md
+++ b/pages/topics/03.45.Ini.md
@@ -67,9 +67,18 @@ String ini = IniSerializer.DEFAULT.serialize(myBean);
String pretty = IniSerializer.DEFAULT_READABLE.serialize(myBean);
// Use the marshaller
-String ini2 = Ini.DEFAULT.of(myBean);
+String ini2 = Ini.of(myBean);
+
+// Readable (spaced) output via the IniR variant marshaller
+String pretty2 = IniR.of(myBean);
```
+The readable configuration is exposed as the dedicated
+<a href="/site/apidocs/org/apache/juneau/marshall/marshaller/IniR.html"
target="_blank">IniR</a>
+variant marshaller (backed by `IniSerializer.DEFAULT_READABLE`). It is a
first-class `Ini` facade, so it
+exposes the same static `of(...)` / `to(...)` shortcut surface as `Ini`
itself. (This replaces the former
+`Ini.DEFAULT_READABLE` constant, removed in 10.0.0.)
+
### Bean-to-INI mapping
| Java construct | INI representation |
diff --git a/static/ai/juneau-knowledge.jsonl b/static/ai/juneau-knowledge.jsonl
index 1921e96744..93a28366d7 100644
--- a/static/ai/juneau-knowledge.jsonl
+++ b/static/ai/juneau-knowledge.jsonl
@@ -101,7 +101,7 @@
{"description": "# Release 9.5.0\n\n**Date:** TBD\n\nJuneau 9.5.0 is a minor
release with native OpenAPI 3.1 emission (alongside Swagger v2, composed via
the new four-class `org.apache.juneau.rest.docs` mixin pack \u2014
`SwaggerMixin` / `SwaggerUiMixin` / `OpenApiMixin` / `RedocMixin` \u2014 that
replaces the previously-considered `apiFormat` string knob), native TOML and
YAML support, BSON (Binary JSON) support for MongoDB-interoperable binary
serialization, CBOR (Concise Binary Object [...]
{"description": "## About\n\nApache Juneau\u2122 is a single cohesive Java
ecosystem for marshalling Java objects to a wide variety of data formats and
\ncreating annotation-based REST end-to-end server and client APIs.\n\n## Key
Features\n\n- **Universal Serialization** - Marshal POJOs to 20+ formats from a
single API: JSON (plus JSON5, JSONL, and JSON5L), XML, HTML, URL-Encoding, UON,
OpenAPI, MessagePack, CBOR, BSON, YAML, TOML, HOCON, HJSON, CSV, INI, Markdown,
Parquet, Protobuf, SSE [...]
{"description": "This page provides detailed comparisons between Juneau and
popular alternatives to help you choose the right tool for your needs.\n\n##
Juneau vs Jackson\n\n| Feature | Juneau | Jackson | Winner
|\n|---------|--------|---------|--------|\n| **Multi-format support** | JSON,
XML, HTML, URL-Encoding, UON, OpenAPI, PlainText, CSV, SOAP, MessagePack, RDF |
Primarily JSON (with modules for XML, YAML, etc.) | **Juneau** - Built-in
multi-format support |\n| **Zero dependencies** [...]
-{"description": "Apache Juneau\u2122 offers a unique combination of
simplicity, power, and zero-dependency design that makes it an excellent choice
for modern Java development. Here's why developers choose Juneau over
alternatives.\n\n## The Juneau Advantage\n\n### **Zero Dependencies, Maximum
Power**\n\nUnlike other frameworks that require multiple dependencies and
complex configurations, Juneau provides comprehensive functionality with
minimal external requirements:\n\n**Juneau:**\n``` [...]
+{"description": "Apache Juneau\u2122 offers a unique combination of
simplicity, power, and zero-dependency design that makes it an excellent choice
for modern Java development. Here's why developers choose Juneau over
alternatives.\n\n## The Juneau Advantage\n\n### **Zero Dependencies, Maximum
Power**\n\nUnlike other frameworks that require multiple dependencies and
complex configurations, Juneau provides comprehensive functionality with
minimal external requirements:\n\n**Juneau:**\n``` [...]
{"description": "The juneau-commons module is the foundational layer of the
Juneau ecosystem.\nIt has no framework dependencies \u2014 just Java \u2014 and
provides the low-level utilities, collections, I/O helpers,\nreflection tools,
settings management, and dependency-injection support that all other Juneau
modules build on top of.\nBecause every other Juneau module depends on it
transitively, its classes are always on the classpath whenever you\nuse
Juneau.\n\n<DependencyInfo artifact [...]
{"description": "The
[org.apache.juneau.commons.utils](/site/apidocs/org/apache/juneau/commons/utils/package-summary.html)
package provides general-purpose utility classes for common operations
including string manipulation, collection operations, class utilities, file
operations, and more. It contains the most frequently used utility classes in
the codebase \u2014 most notably
[Shorts](/site/apidocs/org/apache/juneau/commons/utils/Shorts.html) (a terse
one-import alias facade) and [Stri [...]
{"description": "The
[org.apache.juneau.commons.collections](/site/apidocs/org/apache/juneau/commons/collections/package-summary.html)
package provides enhanced collection utilities that extend the standard Java
Collections Framework with fluent APIs, specialized collection types, and
caching capabilities.\n\n## Key Classes\n\n### Collection Builders\n\n###
<java-class><a
href=\"/site/apidocs/org/apache/juneau/commons/collections/Lists.html\"
target=\"_blank\">Lists</a></java-class>\nFlu [...]
@@ -119,7 +119,7 @@
{"description": "The
[org.apache.juneau.commons.http](/site/apidocs/org/apache/juneau/commons/http/package-summary.html)
package provides lightweight, dependency-free primitives for parsing and
modeling HTTP header values \u2014 media types, content-negotiation ranges, and
name/value parameters \u2014 as defined by RFC 2616.\n\n## Media Types and
Negotiation\n\n### <java-class><a
href=\"/site/apidocs/org/apache/juneau/commons/http/MediaType.html\"
target=\"_blank\">MediaType</a></java-cl [...]
{"description": "The
[org.apache.juneau.commons.httppart](/site/apidocs/org/apache/juneau/commons/httppart/package-summary.html)
package provides the shared enumerations and exception used to describe HTTP
\"parts\" (query parameters, path variables, headers, form data, and
request/response bodies) for OpenAPI-schema-based serialization and
parsing.\n\n## Part Enumerations\n\n### <java-enum><a
href=\"/site/apidocs/org/apache/juneau/commons/httppart/HttpPartType.html\"
target=\"_blank\">H [...]
{"description": "The
[org.apache.juneau.commons.concurrent](/site/apidocs/org/apache/juneau/commons/concurrent/package-summary.html)
package provides small concurrency helpers that make locks and atomic
references work cleanly with try-with-resources and `Optional`-style
APIs.\n\n## Auto-Closeable Locks\n\n### <java-class><a
href=\"/site/apidocs/org/apache/juneau/commons/concurrent/SimpleLock.html\"
target=\"_blank\">SimpleLock</a></java-class>\nAn `AutoCloseable` wrapper
around a `java. [...]
-{"description": "The
[org.apache.juneau.commons.logging](/site/apidocs/org/apache/juneau/commons/logging/package-summary.html)
package provides thin extensions over `java.util.logging` that add lazy
message formatting and in-memory log capture for testing.\n\n## Logger\n\n###
<java-class><a
href=\"/site/apidocs/org/apache/juneau/commons/logging/Logger.html\"
target=\"_blank\">Logger</a></java-class>\nAn extended logger that wraps an
underlying `java.util.logging.Logger` and adds convenie [...]
+{"description": "The
[org.apache.juneau.commons.logging](/site/apidocs/org/apache/juneau/commons/logging/package-summary.html)
package provides thin extensions over `java.util.logging` that add lazy
message formatting and in-memory log capture for testing.\n\n## Logger\n\n###
<java-class><a
href=\"/site/apidocs/org/apache/juneau/commons/logging/Logger.html\"
target=\"_blank\">Logger</a></java-class>\nAn extended logger that wraps an
underlying `java.util.logging.Logger` and adds convenie [...]
{"description": "The
[org.apache.juneau.commons.runtime](/site/apidocs/org/apache/juneau/commons/runtime/package-summary.html)
package provides lean accessors for two common runtime inputs: command-line
arguments and JAR manifest files.\n\n## Command-Line Arguments\n\n###
<java-class><a
href=\"/site/apidocs/org/apache/juneau/commons/runtime/Args.html\"
target=\"_blank\">Args</a></java-class>\nA lean parser for command-line
arguments passed to a `main(String[])` method. It supports positi [...]
{"description": "The
[org.apache.juneau.commons.time](/site/apidocs/org/apache/juneau/commons/time/package-summary.html)
package provides a precision-aware date/time type for granular time
operations.\n\n## Granular Date/Time\n\n### <java-class><a
href=\"/site/apidocs/org/apache/juneau/commons/time/GranularZonedDateTime.html\"
target=\"_blank\">GranularZonedDateTime</a></java-class>\nPairs a
`java.time.ZonedDateTime` with a `ChronoField` precision identifier, enabling
granular time opera [...]
{"description": "<DependencyInfo artifact=\"juneau-marshall\"
bundle=\"org.apache.juneau.marshall\" />\n\n## Contents/Features\n\n-
Foundation for all serializers and parsers.\n- Implementations for all
serializers and parsers except RDF languages.\n- Various reusable utilities
used throughout the framework.\n\n## Overview\n\nThe **juneau-marshall**
library includes easy-to-use and highly customizable serializers and parsers
based around a common\nAPI.\nIt allows you to marshall Java POJ [...]
@@ -177,7 +177,7 @@
{"description": "Juneau supports converting arbitrary POJOs to and from JSON
using ultra-efficient serializers and parsers.\nThe <a
href=\"/site/apidocs/org/apache/juneau/marshall/json/JsonSerializer.html\"
target=\"_blank\">JsonSerializer</a> converts POJOs directly to strict RFC 8259
JSON (double quotes) without intermediate DOM objects.\nThe <a
href=\"/site/apidocs/org/apache/juneau/marshall/json/JsonParser.html\"
target=\"_blank\">JsonParser</a> creates POJOs from strict JSON only. F [...]
{"description": "The JSON data type produced depends on the Java object type
being serialized.\n\n- Primitives and primitive objects are converted to JSON
primitives.\n- Beans and `Maps` are converted to JSON objects.\n- `Collections`
and arrays are converted to JSON arrays.\n- Anything else is converted to JSON
strings.\n\n## Data type conversions:\n\n| POJO type | JSON type | Example |
Serialized form |\n|-----------|-----------|---------|----------------|\n|
String | String | `seriali [...]
{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/marshall/json/JsonSerializer.html\"
target=\"_blank\">JsonSerializer</a> class is used to serialize POJOs
into\nJSON.\n\nThe class hierarchy for the builder of this serializer
is:\n\n<tree>\n<node-0><java-abstract-class><a
href=\"/site/apidocs/org/apache/juneau/marshall/Context.Builder.html\"
target=\"_blank\">Context.Builder</a></java-abstract-class></node-0>\n<node-1><java-abstract-class><a
href=\"/site/apidocs/org/apache/j [...]
-{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/marshall/json5/Json5Serializer.html\"
target=\"_blank\">Json5Serializer</a> class can be used to serialized
POJOs\ninto JSON 5 notation.\n\nJSON 5 is similar to JSON except for the
following:\n\n- JSON attributes are only quoted when necessary.\n- Uses
single-quotes for quoting.\n\n:::tip Examples\n```java\n// Some free-form
JSON.\nJsonMap map = JsonMap.of(\n \"foo\", \"x1\",\n \"_bar\", \"x2\",\n
\" baz \", \"x3\",\ [...]
+{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/marshall/json5/Json5Serializer.html\"
target=\"_blank\">Json5Serializer</a> class can be used to serialized
POJOs\ninto JSON 5 notation.\n\nJSON 5 is similar to JSON except for the
following:\n\n- JSON attributes are only quoted when necessary.\n- Uses
single-quotes for quoting.\n\n:::tip Examples\n```java\n// Some free-form
JSON.\nJsonMap map = JsonMap.of(\n \"foo\", \"x1\",\n \"_bar\", \"x2\",\n
\" baz \", \"x3\",\ [...]
{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/marshall/json/JsonParser.html\"
target=\"_blank\">JsonParser</a> class is used to parse JSON into POJOs.\n\nThe
class hierarchy for the builder of this parser
is:\n\n<tree>\n<node-0><java-abstract-class><a
href=\"/site/apidocs/org/apache/juneau/marshall/Context.Builder.html\"
target=\"_blank\">Context.Builder</a></java-abstract-class></node-0>\n<node-1><java-abstract-class><a
href=\"/site/apidocs/org/apache/juneau/marshall/Ma [...]
{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/marshall/json/Json.html\"
target=\"_blank\">@Json</a> annotation is used to override the behavior of <a
href=\"/site/apidocs/org/apache/juneau/marshall/json/JsonSerializer.html\"
target=\"_blank\">JsonSerializer</a> on individual bean classes or
properties.\n\nThe annotation can be applied to beans as well as other objects
serialized to other types (e.g.
strings).\n\n<tree>\n<node-0><java-annotation><a href=\"/site/apidocs/or [...]
{"description": "Juneau provides the <a
href=\"/site/apidocs/org/apache/juneau/marshall/json/JsonSchemaSerializer.html\"
target=\"_blank\">JsonSchemaSerializer</a> class for\ngenerating JSON-Schema
documents that describe the output generated by the <a
href=\"/site/apidocs/org/apache/juneau/marshall/json/JsonSerializer.html\"
target=\"_blank\">JsonSerializer</a> class.\nThis class shares the same
properties as `JsonSerializer`.\n\nFor convenience the <a
href=\"/site/apidocs/org/apache/ju [...]
@@ -236,7 +236,7 @@
{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/marshall/markdown/package-summary.html\"
target=\"_blank\">org.apache.juneau.marshall.markdown</a>\npackage provides
Markdown serialization and parsing for POJOs. Output is optimized for human
readability and LLM/AI consumption.\n\n<DependencyInfo
artifact=\"juneau-marshall\" mavenOnly note=\"Markdown support is included in
juneau-marshall.\" />\n\n## Two Modes\n\n| Mode | Serializer | Use Case
|\n|---|---|---|\n| **Fragment* [...]
{"description": "Juneau supports converting arbitrary POJOs to and from JSONL
(JSON Lines, also called NDJSON) using native serializers and parsers. JSONL is
a text format where each line is a valid JSON value, separated by newlines. It
is the standard format for LLM fine-tuning datasets, streaming AI inference,
log aggregation, and bulk data pipelines.\n\nThe <a
href=\"/site/apidocs/org/apache/juneau/marshall/jsonl/JsonlSerializer.html\"
target=\"_blank\">JsonlSerializer</a> converts PO [...]
{"description": "Juneau supports converting arbitrary POJOs to and from JSON5L
\u2014 a combination of the relaxed [JSON5](/docs/topics/Json5) dialect and
[JSONL](/docs/topics/JsonlSupport)'s newline-delimited framing (one document
per line). JSON5L is a good fit for human-edited line-delimited config and data
files: it keeps JSONL's \"one record per line\" streaming model while
tolerating comments, unquoted keys, single-quoted strings, and trailing commas
on each line.\n\nThe <a href=\" [...]
-{"description": "Juneau supports converting arbitrary POJOs to and from Hjson
(Human JSON) using native serializers and parsers. Hjson is a syntax extension
of JSON designed for human-friendly configuration files and hand-edited data.
It extends JSON with quoteless strings, multiline strings, comments, optional
commas, and unquoted keys.\n\nThe <a
href=\"/site/apidocs/org/apache/juneau/marshall/hjson/HjsonSerializer.html\"
target=\"_blank\">HjsonSerializer</a> converts POJOs directly to [...]
+{"description": "Juneau supports converting arbitrary POJOs to and from Hjson
(Human JSON) using native serializers and parsers. Hjson is a syntax extension
of JSON designed for human-friendly configuration files and hand-edited data.
It extends JSON with quoteless strings, multiline strings, comments, optional
commas, and unquoted keys.\n\nThe <a
href=\"/site/apidocs/org/apache/juneau/marshall/hjson/HjsonSerializer.html\"
target=\"_blank\">HjsonSerializer</a> converts POJOs directly to [...]
{"description": "Juneau supports converting arbitrary POJOs to canonical JSON
per [RFC 8785](https://www.rfc-editor.org/rfc/rfc8785) (JCS - JSON
Canonicalization Scheme) using a native serializer. JCS produces a
deterministic, byte-for-byte representation suitable for cryptographic
operations such as hashing and digital signing.\n\nThe <a
href=\"/site/apidocs/org/apache/juneau/marshall/jcs/JcsSerializer.html\"
target=\"_blank\">JcsSerializer</a> converts POJOs to canonical JSON. The <a h
[...]
{"description": "Juneau supports converting arbitrary POJOs to and from BSON
(Binary JSON) using native serializers and parsers. BSON is the binary
serialization format used by MongoDB, extending JSON with typed integers
(int32/int64), native datetime, decimal128, and binary data. It uses
little-endian byte order and length-prefixed documents.\n\nThe <a
href=\"/site/apidocs/org/apache/juneau/marshall/bson/BsonSerializer.html\"
target=\"_blank\">BsonSerializer</a> converts POJOs directly [...]
{"description": "Juneau supports converting arbitrary POJOs to and from CBOR
(Concise Binary Object Representation) per RFC 8949 using native serializers
and parsers. CBOR is a compact binary format designed for extremely small code
size, very small message size, and extensibility. It is widely used in IoT,
constrained environments, COSE (CBOR Object Signing and Encryption), and
WebAuthn.\n\nThe <a
href=\"/site/apidocs/org/apache/juneau/marshall/cbor/CborSerializer.html\"
target=\"_blank [...]
@@ -261,7 +261,7 @@
{"description": "The Juneau ATOM feed DTO beans are simply beans with
fluent-style setters.\n\nThe following code shows a feed being created
programmatically using the <a
href=\"/site/apidocs/org/apache/juneau/bean/atom/AtomBuilder.html\"
target=\"_blank\">AtomBuilder</a> class.\n\n```java\nimport static
org.apache.juneau.bean.atom.AtomBuilder.*;\n\nFeed feed =\n
feed(\"tag:juneau.apache.org\", \"Juneau ATOM specification\",
\"2016-01-02T03:04:05Z\")\n .setSubtitle(text(\"html\").s [...]
{"description": "The `juneau-bean-jsonschema` module provides Java beans for
working with JSON Schema documents following the **JSON Schema Draft 2020-12**
specification.\n\n## Overview\n\nThis module contains predefined POJOs for
representing and manipulating JSON Schema documents programmatically. These
beans can be serialized to any format supported by Juneau (JSON, XML, HTML,
etc.), making it easy to generate and consume JSON Schema documents in your
applications.\n\n### Key Features [...]
{"description": "The `juneau-bean-openapi-v3` module provides Java beans for
working with OpenAPI 3.0 documents and user interfaces.\n\n## Overview\n\nThis
module contains predefined POJOs for:\n\n- OpenAPI 3.0 document structure\n-
API documentation generation\n- OpenAPI UI rendering\n- Schema validation\n\n##
OpenAPI Documents\n\nThe Juneau OpenAPI DTO beans are simply beans with
fluent-style setters that allow you to quickly construct OpenAPI documents as
Java objects. These objects c [...]
-{"description": "The `juneau-bean-common` module provides a small set of
general-purpose Data Transfer Object (DTO) beans in the
`org.apache.juneau.bean` package that don't belong to any single wire-format
module.\n\n## Overview\n\nUnlike the format-specific bean modules
(`juneau-bean-atom`, `juneau-bean-hal`, and so on), this module isn't a base
library that the other `juneau-bean-X` modules build on \u2014 each of those
depends directly on `juneau-marshall`, not on this module. Instead [...]
+{"description": "The `juneau-bean-common` module provides a small set of
general-purpose Data Transfer Object (DTO) beans in the
`org.apache.juneau.bean` package that don't belong to any single wire-format
module.\n\n## Overview\n\nUnlike the format-specific bean modules
(`juneau-bean-atom`, `juneau-bean-hal`, and so on), this module isn't a base
library that the other `juneau-bean-X` modules build on \u2014 each of those
depends directly on `juneau-marshall`, not on this module. Instead [...]
{"description": "The `juneau-bean-swagger-v2` module provides Java beans for
working with [Swagger 2.0](https://swagger.io/specification/v2/) documents and
user interfaces.\n\n## Overview\n\nThis module contains predefined POJOs
for:\n\n- Swagger 2.0 document structure\n- API documentation generation\n-
Swagger UI rendering\n\nThe beans are simply POJOs with fluent-style
`setX(...)` setters, so they can be serialized to JSON using any of the Juneau
JSON serializers, or to other languages [...]
{"description": "The `juneau-bean-mcp` module provides Java beans modelling
the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) wire
format.\n\n## Overview\n\nMCP is a JSON-RPC 2.0 protocol used by AI assistants
and agents to interact with external tools, prompts, and resources. This module
provides a complete set of Juneau `@Marshalled`-annotated POJOs covering the
MCP HTTP wire surface, so you can build MCP servers and clients using any
Juneau serializer/parser (JSON, [...]
{"description": "The `juneau-bean-rfc7807` module provides Java beans for [RFC
7807 \u2014 Problem Details for HTTP
APIs](https://www.rfc-editor.org/rfc/rfc7807), the canonical machine-readable
error format used by `application/problem+json`.\n\n## Overview\n\nRFC 7807
standardises a five-field JSON document for carrying HTTP error details. Most
modern REST stacks ship a `ProblemDetail`-style bean out of the box (Spring's
`ProblemDetail`, ASP.NET's `ProblemDetails`, etc.); this module br [...]
@@ -301,7 +301,7 @@
{"description": "<DependencyInfo artifact=\"juneau-test\"
bundle=\"org.apache.juneau.test\" />\n\n## Contents/Features\n\nThe
**juneau-test** module is a lightweight, self-contained toolkit for writing
readable, expressive\nunit tests. It depends only on JUnit 5 and the core
Juneau commons \u2014 no heavyweight frameworks \u2014 and\nis used throughout
Juneau's own test suite as well as by the built-in assertion methods on the
REST\nclient and server APIs.\n\nIt is organized into three [...]
{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/test/assertions/package-summary.html\"
target=\"_blank\">org.apache.juneau.test.assertions</a> package in Juneau
(provided by the **juneau-test** module) is a powerful API for
performing\nfluent style assertions.\nIt is used throughout the REST client and
server APIs for performing inline assertions on REST requests and
responses.\n\n:::tip Example\n```java\n// Create a basic REST client with JSON
support and download a bean. [...]
{"description": "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.\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Quick
Start](#quick-start)\n- [Core Assertion Methods](#core-assertion-methods)\n-
[Nested Property Access](#nested-property-access)\n- [Advanced
Configuration](#advanced-configuration)\n- [Mi [...]
-{"description": "Custom error messages allow you to provide contextual
information when BCT assertions fail. This makes test failures more informative
and helps identify issues faster during debugging.\n\n## Overview\n\nBCT
supports custom error messages through a `Supplier<String>` parameter in all
assertion methods. This provides:\n- **Lazy evaluation** - Messages are only
generated when assertions fail\n- **Format support** - Use `Shorts.fs()` for
convenient formatted messages with ar [...]
+{"description": "Custom error messages allow you to provide contextual
information when BCT assertions fail. This makes test failures more informative
and helps identify issues faster during debugging.\n\n## Overview\n\nBCT
supports custom error messages through a `Supplier<String>` parameter in all
assertion methods. This provides:\n- **Lazy evaluation** - Messages are only
generated when assertions fail\n- **Format support** - Use `Shorts.fs()` for
convenient formatted messages with ar [...]
{"description": "BCT provides flexible customization options through the
`@BctConfig` annotation and the `BctConfiguration` class. These tools allow you
to configure assertion behavior, customize property access, and extend BCT's
capabilities to match your testing needs.\n\n## Table of Contents\n\n-
[@BctConfig Annotation](#bctconfig-annotation)\n- [BctConfiguration
Class](#bctconfiguration-class)\n- [Configuration
Properties](#configuration-properties)\n- [Custom Bean Converters](#custo [...]
{"description": "Stringifiers define how specific types should be converted to
strings for comparison in BCT assertions. They provide flexible, customizable
string representations that can be tailored to your testing needs.\n\n##
Built-in Stringifiers\n\nBCT comes with comprehensive built-in stringifiers for
common Java types:\n\n```java\n// Array types\nchar[] chars = {'H', 'e', 'l',
'l', 'o'};\nassertString(\"Hello\", chars); // Uses
charArrayStringifier()\n\nbyte[] bytes = {0x48, 0x6 [...]
{"description": "Listifiers convert collection-like objects into lists for use
in BCT assertions. They provide a unified way to work with various collection
types, iterators, streams, and other iterable data structures.\n\n## Built-in
Listifiers\n\nBCT comes with comprehensive built-in listifiers for
collection-like Java types:\n\n```java\n// Collection types\nList<String> list
= List.of(\"a\", \"b\", \"c\");\nassertList(list, \"a\", \"b\", \"c\"); //
Uses collectionListifier()\n\nSet<I [...]
@@ -409,8 +409,8 @@
{"description": "The REST Server API uses the concept of registered response
processors for converting objects returned by REST methods\nor set through <a
href=\"/site/apidocs/org/apache/juneau/rest/server/RestResponse.html#setContent(java.lang.Object)\"
target=\"_blank\">RestResponse.setContent(Object)</a> into appropriate HTTP
responses.\nBy default, REST resource classes are registered with the following
response processors:\n\n<tree>\n<node-0><java-class><a
href=\"/site/apidocs/org/a [...]
{"description": "The REST/RPC (RPC over REST) API allows the creation of
client-side remote proxy interfaces for calling methods on\nserver-side POJOs
using entirely REST.\n\n:::note\nThis is not to be confused with REST Proxies
which are entirely client-side driven Java interfaces\nagainst arbitrary
backend REST interfaces.\n:::\n\n## Remote Interfaces\n\nThe following example
shows a remote interface:\n\n```java\n@RemoteInterface // Annotation is
optional\npublic interface IAddressBook [...]
{"description": "Juneau serializers have sophisticated support for
transforming relative URIs to absolute form.\nThe following example shows a
REST method that returns a list of URIs of various forms:\n\n```java\n@Rest(\n
uriAuthority=\"http://foo.com:123\",\n
uriContext=\"/myContext\"\n)\npublic class MyResource {\n\n @RestGet\n
public URI[] getURIs() {\n return new URI[] {\n
URI.create(\"http://www.apache.org/f1a\"),\n URI.create(\"/f1b\"),\n
[...]
-{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/rest/server/beans/package-summary.html\"
target=\"_blank\">org.apache.juneau.rest.server.beans</a> package contains a
set of reusable utility beans meant to\nhelp with putting together explorable
REST interfaces.\n\nThe <a
href=\"/site/apidocs/org/apache/juneau/examples/rest/UtilityBeansResource.html\"
target=\"_blank\">UtilityBeansResource</a> class shows how these\nbeans are
used.\n\nThe resource class is hosted in the exam [...]
-{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/examples/rest/HtmlBeansResource.html\"
target=\"_blank\">HtmlBeansResource</a> class shows how <a
href=\"/site/apidocs/org/apache/juneau/bean/html5/package-summary.html\"
target=\"_blank\">HTML5 beans</a> can be used to generate arbitrary HTML on
REST endpoints.\n\n## table\n\nThe <a
href=\"/site/apidocs/org/apache/juneau/examples/rest/HtmlBeansResource.html#aTable()\"
target=\"_blank\">aTable()</a> method shows an example of [...]
+{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/rest/server/beans/package-summary.html\"
target=\"_blank\">org.apache.juneau.rest.server.beans</a> package contains a
set of reusable utility beans meant to\nhelp with putting together explorable
REST interfaces.\n\nThe <a
href=\"/site/apidocs/org/apache/juneau/petstore/rest/PetInfoResource.html\"
target=\"_blank\">PetInfoResource</a> class shows how these\nbeans are
used.\n\nThe resource class is hosted in the petstore sampl [...]
+{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/petstore/rest/PetHtmlResource.html\"
target=\"_blank\">PetHtmlResource</a> class shows how <a
href=\"/site/apidocs/org/apache/juneau/bean/html5/package-summary.html\"
target=\"_blank\">HTML5 beans</a> can be used to generate arbitrary HTML on
REST endpoints.\n\n## table\n\nThe <a
href=\"/site/apidocs/org/apache/juneau/petstore/rest/PetHtmlResource.html#getPetTable()\"
target=\"_blank\">getPetTable()</a> method shows an exampl [...]
{"description": "- Subclasses can use either <a
href=\"https://jakarta.ee/specifications/servlet/6.0/apidocs/jakarta/servlet/http/HttpServlet.html#init(ServletConfig)\"
target=\"_blank\">HttpServlet.init(ServletConfig)</a> or <a
href=\"https://jakarta.ee/specifications/servlet/6.0/apidocs/jakarta/servlet/http/HttpServlet.html#init()\"
target=\"_blank\">HttpServlet.init()</a> for initialization just like any
other servlet.\n- The `X-Response-Headers` header can be used to pass through
hea [...]
{"description": "The REST API uses Java logging by default.\n\nIf you wish to
use LOG4J logging, you simple need to add the following to your JVM arguments
and maven dependencies:\n\n## Command-line
argument\n\n```text\n-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager\n```\n\n##
Maven dependency\n\n```xml\n<dependency>\n
<groupId>org.apache.logging.log4j</groupId>\n
<artifactId>log4j-jul</artifactId>\n</dependency>\n```", "id":
"topic:681a9ac13ee9", "module": "61 [...]
{"description": "The `juneau-rest-server-management-logging` module ships
opt-in `LogBackend` adapters that let the `/loggers`\nmanagement endpoint drive
**Logback** or **Log4j2** instead of the built-in `java.util.logging`
default.\n\n## Background: the `/loggers` endpoint\n\nThe `/loggers` runtime
log-level management endpoint is built into `juneau-rest-server` \u2014 no
extra module is\nneeded to expose it. It surfaces as:\n\n| Method | Path |
Effect |\n|---|---|---|\n| `GET` | `/logg [...]
@@ -467,8 +467,8 @@
{"description": "<DependencyInfo artifact=\"juneau-microservice-jetty\"
bundle=\"org.apache.juneau.microservice.jetty\" />\n\n###
Contents/Features\n\nJuneau Microservice Jetty is an API for creating
stand-alone executable jars that can be used to start lightweight\nconfigurable
REST interfaces with all the power of the Juneau REST server and client
APIs.\n\n## Zero-config facade\n\nAs of 10.0, `JettyMicroservice` is a **thin
static-call facade** that collapses the standard `Microservice [...]
{"description": "The Jetty Microservice API consists of a combination of the
Juneau Core, Server, and Client APIs and an embedded Eclipse\nJetty Servlet
Container.\n\nThe API builds upon the [juneau-microservice](JuneauMicroservice)
classes to produce easy-to-create and\neasy-to-use microservices in a standard
Java 17+ environment.\n\n> **Renamed in 9.5** \u2014 `juneau-microservice-core`
is now published as `juneau-microservice`. The Jetty module is no\n> longer a
subclass of `Microser [...]
{"description": "The lifecycle methods of the <a
href=\"/site/apidocs/org/apache/juneau/microservice/Microservice.html\"
target=\"_blank\">Microservice</a> class\nconsists of the
following:\n\n<tree>\n<node-0><java-class><a
href=\"/site/apidocs/org/apache/juneau/microservice/Microservice.html\"
target=\"_blank\">Microservice</a></java-class></node-0>\n<node-1><javac-method><a
href=\"/site/apidocs/org/apache/juneau/microservice/Microservice.html#start()\"
target=\"_blank\">start()</a></ja [...]
-{"description": "This section describes how to define a top-level REST
resource page and deploy it in our microservice.\nThe example is a router page
that serves as a jumping off page to child resources.\n\n```java\n@Rest(\n
path=\"/*\",\n title=\"My Microservice\",\n description=\"Top-level
resources page\",\n htmldoc=@HtmlDoc(\n navlinks={\n
\"options: servlet:/?method=OPTIONS\"\n }\n ),\n children={\n
HelloWorldResource.class,\n [...]
-{"description": "The following predefined resource classes are also provided
for easy inclusion into your microservice:\n\n<tree>\n<node-0>Predefined
Resource Classes</node-0>\n<node-1><java-class><a
href=\"/site/apidocs/org/apache/juneau/microservice/resources/ConfigResource.html\"
target=\"_blank\">ConfigResource</a></java-class> - View and modify the
external INI config file</node-1>\n<node-1><java-class><a
href=\"/site/apidocs/org/apache/juneau/microservice/resources/DirectoryResourc
[...]
+{"description": "This section describes how to define a top-level REST
resource page and deploy it in our microservice.\nThe example is a router page
that serves as a jumping off page to child resources.\n\n```java\n@Rest(\n
path=\"/*\",\n title=\"My Microservice\",\n description=\"Top-level
resources page\",\n htmldoc=@HtmlDoc(\n navlinks={\n
\"options: servlet:/?method=OPTIONS\"\n }\n ),\n children={\n
HelloWorldResource.class,\n [...]
+{"description": "The following classes are reference/demo resources that
illustrate common microservice admin patterns. They live in the\nunpublished
`juneau-microservice-examples` module (package
`org.apache.juneau.microservice.examples`), not in the\nshipped
`juneau-microservice`/`juneau-microservice-jetty` jars, so they aren't a
dependency you pull in directly \u2014\ntreat them as copy-and-adapt
samples:\n\n<tree>\n<node-0>Predefined Resource
Classes</node-0>\n<node-1><java-class><a [...]
{"description": "The following methods can be used to define the configuration
for your microservice using the powerful `Config`
API:\n\n<tree>\n<node-0><java-class><a
href=\"/site/apidocs/org/apache/juneau/microservice/Microservice.Builder.html\"
target=\"_blank\">Microservice.Builder</a></java-class></node-0>\n<node-1><java-method><a
href=\"/site/apidocs/org/apache/juneau/microservice/Microservice.Builder.html#config(org.apache.juneau.config.Config)\"
target=\"_blank\">config(Config)</ [...]
{"description": "The Jetty microservice comes with a bare-bones `jetty.xml`
file which can be modified to suite any needs.\n\nThe `jetty.xml` can be
located in either the `.` or `files` working directory or classpath.\n\nIt can
also be specified in any of the following ways:\n\n- Supplying a `@Bean
JettySettings` whose `jettyXml(Object, boolean resolveVars)` builder method
sets the\n raw XML contents (and optionally requests SVL
var-resolution).\n\n```java\n@Configuration\npublic class [...]
{"description": "The Microservice project contains a `files/htdocs` folder
with predefined stylesheets and images.\nThese files can be used to tailor the
look-and-feel of your
microservice.\n\n```text\nhttp://localhost:10000/helloWorld\n```\n\nThe REST
configuration section of your microservice configuration file can be used to
tailor the header and footer on\nthe
pages:\n\n```ini\n#==========================================================================================================
[...]
diff --git a/static/ai/manifest.json b/static/ai/manifest.json
index 6f0661d661..0c47aeccdb 100644
--- a/static/ai/manifest.json
+++ b/static/ai/manifest.json
@@ -3,8 +3,8 @@
"record_count": 500,
"schema_version": "1.0.0",
"source_commit": {
- "juneau": "9998b7f4c42b248dce4d179719b338e657c1c2a8",
- "juneau_docs": "3fd2c50d6efaf894814e9571fe44e13b3995e488"
+ "juneau": "7fab53f1e852844c6e1776e81a0425942a3bcac5",
+ "juneau_docs": "aaadee212be1908a0a9118b3a97e59bb9e0e8a21"
},
"version": "10.0.0"
}