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 c3847ad70e feat(marshall): JSON5L (JSON5 + JSONL) line-delimited format
c3847ad70e is described below
commit c3847ad70e26ba516beb8b3593d34c38703b03de
Author: James Bognar <[email protected]>
AuthorDate: Wed Jun 17 08:53:23 2026 -0400
feat(marshall): JSON5L (JSON5 + JSONL) line-delimited format
---
pages/release-notes/10.0.0.md | 17 +++++-
pages/topics/02.25.04.Json5.md | 2 +
pages/topics/02.38.01.JsonlBasics.md | 1 +
pages/topics/02.38.02.Json5lBasics.md | 109 ++++++++++++++++++++++++++++++++++
sidebars.ts | 5 ++
static/ai/juneau-knowledge.jsonl | 22 +++++--
static/ai/manifest.json | 8 +--
static/ai/taxonomy.json | 18 +++---
8 files changed, 161 insertions(+), 21 deletions(-)
diff --git a/pages/release-notes/10.0.0.md b/pages/release-notes/10.0.0.md
index f9d95a68cd..c3dd7308d6 100644
--- a/pages/release-notes/10.0.0.md
+++ b/pages/release-notes/10.0.0.md
@@ -200,19 +200,19 @@ This feature was inspired by an earlier proposal from
**Gary Gregory** ([@garydg
Juneau 10.0 introduces a public low-level streaming surface that complements
the POJO databind path with cursor-based push and pull primitives, layered:
- **<a href="/docs/topics/RecordStreaming">RecordReader</a> / <a
href="/docs/topics/RecordStreaming">RecordWriter</a>** — whole-value record
cursor (`canRead()` / `read(Class)` / `write(Object)`). Format-neutral, works
on every Juneau format.
-- **<a href="/docs/topics/TokenStreaming">TokenReader</a> / <a
href="/docs/topics/TokenStreaming">TokenWriter</a>** — fine-grained structural
cursor (`next()`, `startObject()`, `fieldName(...)`, etc.). For formats whose
wire encoding is already token-shaped: JSON, JSON5, JSONL, CBOR, MsgPack.
+- **<a href="/docs/topics/TokenStreaming">TokenReader</a> / <a
href="/docs/topics/TokenStreaming">TokenWriter</a>** — fine-grained structural
cursor (`next()`, `startObject()`, `fieldName(...)`, etc.). For formats whose
wire encoding is already token-shaped: JSON, JSON5, JSONL, JSON5L, CBOR,
MsgPack.
`TokenReader extends RecordReader` and `TokenWriter extends RecordWriter`, so
token-capable formats inherit record-stream semantics for free; record-only
formats expose only the record surface so the type system enforces "no nested
structure visible at the cursor."
Capability is expressed through **role interfaces** in
`org.apache.juneau.marshall.stream` and detected with `instanceof` (there is no
capability enum):
- **`RecordReadable` / `RecordWritable`** — `parseRecords(input)` /
`serializeRecords(output)`; implemented by every streaming format.
-- **`TokenReadable` / `TokenWritable`** — `parseTokens(input)` /
`serializeTokens(output)`; implemented by json, json5, jsonl, cbor, msgpack.
(These extend the record roles.)
+- **`TokenReadable` / `TokenWritable`** — `parseTokens(input)` /
`serializeTokens(output)`; implemented by json, json5, jsonl, json5l, cbor,
msgpack. (These extend the record roles.)
- **`ArrayRecordReadable` / `ArrayRecordWritable`** —
`parseArrayRecords(input)` / `serializeArrayRecords(output)`; implemented by
json, json5, cbor, msgpack, bson, parquet, yaml, xml, html.
A cursor-quality signal (`isRecordStreaming()` / `isArrayRecordStreaming()`)
distinguishes a true O(1) streaming cursor from a buffered one. Writer-only
formats (jsonschema, jcs, soap-xml) implement only the `*Writable` roles.
-Naturally-multi-record formats (jsonl, csv, sse) expose
`parseRecords`/`serializeRecords` as a true multi-record cursor: N read calls
yield N records; N write calls produce wire output equivalent to
`serialize(List.of(records))`.
+Naturally-multi-record formats (jsonl, json5l, csv, sse) expose
`parseRecords`/`serializeRecords` as a true multi-record cursor: N read calls
yield N records; N write calls produce wire output equivalent to
`serialize(List.of(records))`.
Opt-in <a href="/docs/topics/ArrayRecordStreaming">parseArrayRecords /
serializeArrayRecords</a> for streaming the elements of a top-level wire array
on JSON / JSON5 / CBOR (actually streaming, O(1) memory in array length), plus
MsgPack / BSON / Parquet / YAML / XML / HTML (buffered). MsgPack offers a
count-overload `serializeArrayRecords(output, expectedCount)` that writes the
length-prefix header up front and serializes each element directly to the
output stream — no per-element buffer [...]
@@ -228,6 +228,17 @@ A full topic-page family lives under "2.50. Token / Record
Streaming" in the Mar
The streaming surface is **purely structural** — object swaps and `@Schema`
annotations apply only on the POJO databind path, never at the token layer.
Both surfaces are additive; the existing POJO ↔ document API remains the
primary, recommended path.
+#### JSON5L line-delimited format
+
+Juneau 10.0 adds **JSON5L** — a new line-delimited format combining the
relaxed [JSON5](/docs/topics/Json5) dialect with
[JSONL](/docs/topics/JsonlBasics)'s one-document-per-line framing. It ships as
a new `org.apache.juneau.marshall.json5l` package (`Json5lSerializer` /
`Json5lParser` / sessions / `Json5lTokenReader`), a `Json5l` marshaller, and a
`@Json5lConfig` annotation.
+
+- **Strict by default, sugar opt-in** — the serializer emits strict RFC-8259
JSON per line by default (byte-identical to `JsonlSerializer`), keeping output
maximally portable. `Json5lSerializer.create().json5Sugar()` switches the
per-line output to JSON5 sugar (single-quoted strings, unquoted field names
where safe).
+- **Full JSON5 parse leniency** — the parser accepts the full JSON5 dialect on
each line (comments, unquoted/single-quoted keys, trailing commas, relaxed
numbers). Because JSON5 is a strict superset of JSON, it also reads plain JSONL
input unchanged. Blank and comment-only lines are skipped; inline comments are
tolerated; `/* ... */` block comments must open and close on the same line.
+- **Token-streaming and array-record streaming parity** with JSONL (O(1)
memory line cursor).
+- **First-class REST media type** `application/json5l` (`text/json5l`, plus
reduced-q-value cross-acceptance of the JSONL family), registered in
`BasicUniversalConfig` and the `RestClient.universal()` set.
+
+See the new <a href="/docs/topics/Json5lBasics">JSON5L Basics</a> topic page.
+
#### Inclusion knob: `nonDefault()` on `Serializer.Builder`
Juneau 10.0 adds a new serializer-side inclusion knob to suppress properties
whose value equals the type's
diff --git a/pages/topics/02.25.04.Json5.md b/pages/topics/02.25.04.Json5.md
index 9dcd267522..13ccc578de 100644
--- a/pages/topics/02.25.04.Json5.md
+++ b/pages/topics/02.25.04.Json5.md
@@ -63,4 +63,6 @@ assertEquals("{foo:'bar',baz:123}",
serializer.toString(myPojo));
<node-0><java-class><a
href="/site/apidocs/org/apache/juneau/marshall/json/Json5Serializer.html"
target="_blank">Json5Serializer</a></java-class></node-0>
<node-0><java-class><a
href="/site/apidocs/org/apache/juneau/marshall/json/Json5Parser.html"
target="_blank">Json5Parser</a></java-class></node-0>
</tree>
+
+- [JSON5L Basics](/docs/topics/Json5lBasics) — JSON5 combined with
newline-delimited (one document per line) framing.
:::
\ No newline at end of file
diff --git a/pages/topics/02.38.01.JsonlBasics.md
b/pages/topics/02.38.01.JsonlBasics.md
index 4a8188aba4..41a391a176 100644
--- a/pages/topics/02.38.01.JsonlBasics.md
+++ b/pages/topics/02.38.01.JsonlBasics.md
@@ -107,6 +107,7 @@ public class MyResource extends RestServlet implements
BasicUniversalConfig { ..
:::info See Also
- [JSON Lines Specification](https://jsonlines.org/) for the full format
definition.
+- [JSON5L Basics](/docs/topics/Json5lBasics) — the relaxed-dialect sibling
that tolerates comments, unquoted keys, and single quotes per line.
- [Marshallers](/docs/topics/Marshalling) for the marshaller API overview.
- [Token-Streaming Basics](/docs/topics/TokenStreamingBasics) — JSONL is a
`FULL` streaming format because each line is itself a JSON value that maps
cleanly onto the token cursor.
diff --git a/pages/topics/02.38.02.Json5lBasics.md
b/pages/topics/02.38.02.Json5lBasics.md
new file mode 100644
index 0000000000..812911506e
--- /dev/null
+++ b/pages/topics/02.38.02.Json5lBasics.md
@@ -0,0 +1,109 @@
+---
+title: "JSON5L Basics"
+slug: Json5lBasics
+---
+
+Juneau supports converting arbitrary POJOs to and from JSON5L — a combination
of the relaxed [JSON5](/docs/topics/Json5) dialect and
[JSONL](/docs/topics/JsonlBasics)'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.
+
+The <a
href="/site/apidocs/org/apache/juneau/marshall/json5l/Json5lSerializer.html"
target="_blank">Json5lSerializer</a> converts POJOs to JSON5L, and the <a
href="/site/apidocs/org/apache/juneau/marshall/json5l/Json5lParser.html"
target="_blank">Json5lParser</a> creates POJOs from JSON5L by parsing each line
as a JSON5 value.
+
+##### Maven Dependency
+
+JSON5L support is included in `juneau-marshall`:
+
+```xml
+<dependency>
+ <groupId>org.apache.juneau</groupId>
+ <artifactId>juneau-marshall</artifactId>
+ <version>${juneau.version}</version>
+</dependency>
+```
+
+##### Quick Start
+
+```java
+// A simple bean
+public class Person {
+ public String name;
+ public int age;
+ public Person() {}
+ public Person(String name, int age) { this.name = name; this.age = age; }
+}
+
+// Serialize a list of beans to JSON5L
+List<Person> people = List.of(new Person("Alice", 30), new Person("Bob", 25));
+String json5l = Json5l.of(people);
+```
+
+By default the output is strict RFC-8259 JSON per line — byte-identical to
JSONL:
+
+```json
+{"name":"Alice","age":30}
+{"name":"Bob","age":25}
+```
+
+##### Strict by default, JSON5 sugar opt-in
+
+The serializer emits strict JSON per line by default, keeping output maximally
portable (any JSONL or JSON consumer can read it). Enable `json5Sugar()` to
emit JSON5 sugar — single-quoted strings and unquoted field names where safe:
+
+```java
+Json5lSerializer s = Json5lSerializer.create().json5Sugar().build();
+String json5l = s.serialize(people);
+```
+
+Produces:
+
+```json
+{name:'Alice',age:30}
+{name:'Bob',age:25}
+```
+
+##### Parsing
+
+The parser accepts the full JSON5 dialect on each line. Because JSON5 is a
strict superset of JSON, it also reads plain JSONL input unchanged:
+
+```java
+// Strict JSONL, JSON5-sugared, or mixed lines all parse
+String input =
+ "// a header comment\n" +
+ "{name:'Alice',age:30}\n" +
+ "{\"name\":\"Bob\",\"age\":25} // trailing comment\n";
+
+List<Person> parsed = Json5l.to(input, List.class, Person.class);
+```
+
+##### Comment handling
+
+JSON5L follows JSON5 comment rules line-by-line:
+
+- A line that is **blank** or **contains only a comment** (`// ...` or a
single-line `/* ... */`) is skipped, like a blank line.
+- **Inline comments** within a record's JSON are tolerated (e.g. `{a:1} //
note`).
+- A `/* ... */` **block comment must open and close on the same physical
line** — block comments cannot span record boundaries, since each line is
parsed independently.
+
+##### Media Types
+
+- **Produces**: `application/json5l`
+- **Accepts**: `application/json5l`, `text/json5l`, and (at a reduced q-value)
the JSONL family `application/jsonl`, `application/x-ndjson`, `text/jsonl`.
+
+##### REST Integration
+
+```java
+// JSON5L is included in BasicUniversalConfig
+@Rest
+public class MyResource extends RestServlet implements BasicUniversalConfig {
... }
+```
+
+##### Limitations
+
+- **No pretty-printing**: Each value must fit on a single line;
`useWhitespace()` is always suppressed.
+- **First-line-only for single-object targets**: When parsing to a single
non-collection type, only the first non-blank, non-comment line is parsed;
trailing lines are ignored.
+- **No record-spanning block comments**: A `/* ... */` comment must begin and
end on the same line.
+
+:::info See Also
+
+- [JSONL Basics](/docs/topics/JsonlBasics) — the strict line-delimited sibling
format.
+- [JSON5](/docs/topics/Json5) — the relaxed JSON dialect JSON5L parses per
line.
+- [JSON Lines Specification](https://jsonlines.org/) and [JSON5
Specification](https://json5.org/) for the underlying formats.
+- [Token-Streaming Basics](/docs/topics/TokenStreamingBasics) — JSON5L is a
`FULL` streaming format; each line maps cleanly onto the token cursor.
+
+:::
diff --git a/sidebars.ts b/sidebars.ts
index f23d57bde2..35fefb18e3 100644
--- a/sidebars.ts
+++ b/sidebars.ts
@@ -687,6 +687,11 @@ const sidebars: SidebarsConfig = {
id:
'topics/02.38.01.JsonlBasics',
label:
'2.38.1. JSONL Basics',
},
+ {
+ type:
'doc',
+ id:
'topics/02.38.02.Json5lBasics',
+ label:
'2.38.2. JSON5L Basics',
+ },
],
},
{
diff --git a/static/ai/juneau-knowledge.jsonl b/static/ai/juneau-knowledge.jsonl
index 0e438e74b8..0e22b8db67 100644
--- a/static/ai/juneau-knowledge.jsonl
+++ b/static/ai/juneau-knowledge.jsonl
@@ -14,7 +14,7 @@
{"description": "Detected summary()/su() annotation attributes used by Juneau
schema and HTTP metadata annotations. These fields provide short descriptions
intended for compact AI/LLM consumption.", "id": "api-metadata:650bc860a2c3",
"module": "api-metadata", "related_ids": [], "source_path":
"juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/RestPatch.java",
"source_type": "api-metadata", "summary": "RestPatch exposes summary/su
metadata fields for concise AI-or [...]
{"description": "Detected summary()/su() annotation attributes used by Juneau
schema and HTTP metadata annotations. These fields provide short descriptions
intended for compact AI/LLM consumption.", "id": "api-metadata:7e1bb7a3a947",
"module": "api-metadata", "related_ids": [], "source_path":
"juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/RestPost.java",
"source_type": "api-metadata", "summary": "RestPost exposes summary/su
metadata fields for concise AI-orie [...]
{"description": "Detected summary()/su() annotation attributes used by Juneau
schema and HTTP metadata annotations. These fields provide short descriptions
intended for compact AI/LLM consumption.", "id": "api-metadata:8b1ffe4e4b64",
"module": "api-metadata", "related_ids": [], "source_path":
"juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/RestPut.java",
"source_type": "api-metadata", "summary": "RestPut exposes summary/su metadata
fields for concise AI-orient [...]
-{"description": "# Release 10.0.0\n\n**Date:** TBD\n\nJuneau 10.0.0 is a major
version release representing a significant milestone for the Apache Juneau
project. This release continues the feature work introduced in 9.5.0 while also
delivering a broad code-quality and maintainability uplift via an extensive
SonarQube/SonarLint cleanup pass across the entire codebase.\n\n### Major
version bump note\n\nThis is the first release in the 10.x line. The jump from
9.x to 10.0 reflects accumula [...]
+{"description": "# Release 10.0.0\n\n**Date:** TBD\n\nJuneau 10.0.0 is a major
version release representing a significant milestone for the Apache Juneau
project. This release continues the feature work introduced in 9.5.0 while also
delivering a broad code-quality and maintainability uplift via an extensive
SonarQube/SonarLint cleanup pass across the entire codebase.\n\n### Major
version bump note\n\nThis is the first release in the 10.x line. The jump from
9.x to 10.0 reflects accumula [...]
{"description": "# Release 5.0.0.0\n\n**Date:** Jun 11, 2012\n\nVersion 5.0
marks a major release milestone for the Juno/JJSON library. \n\nIt is now
available for download from iRAM under the name \"Juno (previously JJSON)\".
\n\nThe Juno Starters Guide has been updated to reflect new functionality in
this release.\n\n- New name. Unfortunately, \"JJSON\" was already trademarked
by another similar library. Therefore, it's been renamed \"Juno\" (after the
Roman goddess and wife of Jupit [...]
{"description": "# Release 5.0.0.1\n\n**Date:** Jun 14, 2012\n\nJuno 5.0.0.1
is a moderate update.\n\n- New support for generating XML-Schema documents from
POJO models.\n\n- New support for serializing to RDF/XML.", "id":
"release-note:907dd2e70994", "module": "release-notes", "related_ids": [],
"source_path": "pages/release-notes/5.0.0.01.md", "source_type":
"release-note", "summary": "**Date:** Jun 14, 2012", "tags": ["release-note",
"release-notes"], "title": "Release 5.0.0.1", "upda [...]
{"description": "# Release 5.0.0.2\n\n**Date:** Sept 28, 2012\n\nJuno 5.0.0.2
is a minor update.\n\n- Improvements to Javadocs.\n Most of the information in
the Juno Starters Guide wiki has been moved into the overview and package-level
javadocs.\n Since the information is now written in HTML, you can now copy and
paste the code examples directly from the\n Javadocs.\n The code examples are
also syntax-highlighted using CSS.\n\n- Support for defining default XML
namespaces on package [...]
@@ -124,10 +124,14 @@
{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/annotation/ParentProperty.html\"
target=\"_blank\">@ParentProperty</a> annotation is used to identify a setter
method or field for adding a parent reference to a child object.\n\nThis
annotation is used by parsers to automatically establish parent-child
relationships when parsing nested objects. When a child object is created
within a parent object (e.g., in a list or as a property), the parser
automatically sets the parent r [...]
{"description": "Juneau parsers can use builders to instantiate POJOs.\nThis
is useful in cases where you want to create beans with read-only
properties.\n\nNote that while it's possible to do this using the <a
href=\"/site/apidocs/org/apache/juneau/annotation/MarshalledCtor.html\"
target=\"_blank\">@MarshalledCtor</a>\nannotation, using builders can often be
cleaner.\n\nA typical builder usage is shown below:\n\n```java\nMyBean bean =
MyBean.create().foo(\"foo\").bar(123).build();\n```\ [...]
{"description": "Juneau serializers treat instances of `Readers` and
`InputStreams` special by simply serializing their contents directly\nto the
output stream or writer.\nThis allows you to embed fully customized serializer
output.\n\n```java\npublic class MyBean {\n // A bean property that produces
raw JSON.\n public Reader f1 = new StringReader(\"{'foo':'bar'}\");\n}\n\n//
Produces \"{f1:{'foo':'bar'}}\"\nString json = Json5.of(new
MyBean());\n```\n\nNote that if you're serializ [...]
+{"description": "View-based projection lets you define named **views** \u2014
property subsets \u2014 on a bean and choose which view\nis active per
serialize/parse call. Only the properties belonging to the active view are
emitted on\nserialization; on parsing, out-of-view properties are silently
discarded (or rejected, depending on your\nunknown-property policy).\n\nThis is
the Juneau equivalent of Jackson's `@JsonView` /
`MapperFeature.DEFAULT_VIEW_INCLUSION`.\n\n---\n\n## Declaring v [...]
{"description": "There is a separate set of serializers and parsers for
marshalling HTTP parts (query, form-data, headers, path\nvariables, and
plain-text request bodies).\nThe distinction is that these are designed to
marshall directly to-and-from strings based on OpenAPI
schema\ninformation.\n\n```java\n// Schema information about our
part.\nHttpPartSchema schema = HttpPartSchema\n .tArrayPipes()\n
.items(\n HttpPartSchema\n .tArrayCsv()\n
.items(\n [...]
+{"description": "Juneau gives you fine-grained control over **what gets
emitted on the wire** and **what happens when a `null`\narrives during
parsing**. The two surfaces are co-designed so the round-trip behavior is
predictable across\nevery format (JSON, JSON5, XML, HTML, YAML, MsgPack,
\u2026).\n\nThis page documents:\n\n- The serializer **inclusion knobs** that
suppress empty / default values.\n- The parser **`Nulls` policy** that decides
what to do when an incoming `null` reaches a [...]
{"description": "Serializers and parsers have a wide variety of configurable
settings.\nTheir builders all extend from the <a
href=\"/site/apidocs/org/apache/juneau/MarshallingContext.Builder.html\"
target=\"_blank\">MarshallingContext.Builder</a> class\nthat allows you to
easily construct new instances from scratch or build upon existing
instances.\n\nFor example, the following code shows how to configure a JSON
serializer:\n\n```java\nWriterSerializer serializer = JsonSerializer\n .
[...]
{"description": "All configurable properties described in the previous section
have annotation equivalents that can be applied on classes\nor methods.\n\nIn
the section on the REST server API, we describe how to configure serializers
and parsers using `@XConfig` annotations\nlike those shown
below:\n\n```java\n@Rest(\n path=\"/addressBook\",\n title=\"Address Book
REST API\"\n
...\n)\n@SerializerConfig(quoteChar=\"'\")\n@RdfConfig(rdfxml_tab=\"5\",
addRootProperty=\"true\")\n@Ma [...]
-{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/collections/JsonMap.html\"
target=\"_blank\">JsonMap</a> and <a
href=\"/site/apidocs/org/apache/juneau/collections/JsonList.html\"
target=\"_blank\">JsonList</a> classes are generic Java representations of JSON
objects and arrays.\nThese classes can be used to create \"unstructured\"
models for serialization (as opposed to \"structured\" models\nconsisting of
beans).\n\nIf you want to quickly generate JSON/XML/HTML from gener [...]
+{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/marshall/collections/MarshalledNode.html\"
target=\"_blank\">MarshalledNode</a> class is a typed tree\n**fa\u00e7ade**
layered over the generic-collections model \u2014 <a
href=\"/site/apidocs/org/apache/juneau/marshall/collections/MarshalledMap.html\"
target=\"_blank\">MarshalledMap</a> /\n<a
href=\"/site/apidocs/org/apache/juneau/marshall/collections/MarshalledList.html\"
target=\"_blank\">MarshalledList</a> and their\n<a h [...]
+{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/marshall/collections/JsonMap.html\"
target=\"_blank\">JsonMap</a> and <a
href=\"/site/apidocs/org/apache/juneau/marshall/collections/JsonList.html\"
target=\"_blank\">JsonList</a> classes are generic Java representations of JSON
objects and arrays.\nThese classes can be used to create \"unstructured\"
models for serialization (as opposed to \"structured\" models\nconsisting of
beans).\n\nIf you want to quickly generate JSON/X [...]
+{"description": "Juneau provides **first-class, direct serializer/parser
support** for a wide range of JDK datatypes \u2014 no\nextra modules, no opt-in
registration, no swap setup required for the common cases. This page enumerates
the\nsupported types, their default wire forms, and the per-type knobs that let
you adjust the wire form across\nall formats.\n\n## Design principle:
first-class > swaps\n\nJuneau handles common JDK datatypes through **direct
serializer/parser code paths plus [...]
{"description": "The Juneau parsers have the ability to parse into complex
data types that consist of multidimensional arrays and nested\n`Maps` and
`Collections` using the methods below:\n\n<tree>\n<node-0><java-class><a
href=\"/site/apidocs/org/apache/juneau/marshall/parser/Parser.html\"
target=\"_blank\">Parser</a></java-class></node-0>\n<node-1><java-method><a
href=\"/site/apidocs/org/apache/juneau/marshall/parser/Parser.html#<init>(org.apache.juneau.marshall.parser.Parser.Builder)\"
[...]
{"description": "On top of the serializers and parsers are the <a
href=\"/site/apidocs/org/apache/juneau/marshall/serializer/SerializerSet.html\"
target=\"_blank\">SerializerSet</a> and <a
href=\"/site/apidocs/org/apache/juneau/marshall/parser/ParserSet.html\"
target=\"_blank\">ParserSet</a> classes.\nThese classes allow serializers and
parsers to be grouped and retrieved by W3C-compliant HTTP `Accept`
and\n`Content-Type` values...\n\n```java\n// Construct a new serializer group
with con [...]
{"description": "<a
href=\"/site/apidocs/org/apache/juneau/swap/ObjectSwap.html\"
target=\"_blank\">Swaps</a> are a critical component of Juneau.\nThey allow the
serializers and parsers to handle Java objects that wouldn't normally be
serializable.\n\nSwaps are, simply put, 'object swappers' that swap in
serializable objects for non-serializable ones during serialization, and
vis-versa during parsing.\n\nSome examples of non-serializable objects are
`File`, `Reader`, `Iterable`, etc...\n [...]
@@ -157,11 +161,11 @@
{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/commons/inject/Value.html\"
target=\"_blank\">@Value</a> annotation\n(introduced in 9.5.0, package
`org.apache.juneau.commons.inject`) is a declarative way to inject
configuration\nvalues into beans created by <a
href=\"/site/apidocs/org/apache/juneau/commons/inject/BeanInstantiator.html\"
target=\"_blank\">BeanInstantiator</a> \u2014 constructor parameters, setter
parameters, and fields.\n\nIt complements <a href=\"/site/api [...]
{"description": "This page documents the framework-internal sites that read
configuration through the\n`@Value` seam (introduced in 9.5.0). It is a
reference for users who:\n\n- Used to import the deleted `CallLogger.SP_xxx`
constants directly.\n- Want to know which framework defaults are now
`@Value`-driven (and therefore overridable\n through the standard `Settings`
precedence chain \u2014 system properties, environment\n variables, registered
`PropertySource`s, and `Settings.setGlob [...]
{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/encoders/package-summary.html\"
target=\"_blank\">org.apache.juneau.encoders</a> package defines an API for
handling encoding-based matching\nof `Accept-Encoding`/`Content-Encoding` HTTP
headers.\n\nIt consists of the following
classes:\n\n<tree>\n<node-0><java-class><a
href=\"/site/apidocs/org/apache/juneau/encoders/EncoderSet.html\"
target=\"_blank\">EncoderSet</a></java-class></node-0>\n<node-0><java-abstract-class><a
href [...]
-{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/objecttools/package-summary.html\"
target=\"_blank\">org.apache.juneau.objecttools</a> package defines convenience
utility\nclasses for accessing and manipulating POJOs.\n\nIt consists of the
following classes:\n\n<tree>\n<node-0><java-class><a
href=\"/site/apidocs/org/apache/juneau/objecttools/ObjectRest.html\"
target=\"_blank\">ObjectRest</a></java-class></node-0>\n<node-0><java-class><a
href=\"/site/apidocs/org/apache/june [...]
+{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/objecttools/package-summary.html\"
target=\"_blank\">org.apache.juneau.objecttools</a> package defines convenience
utility\nclasses for accessing and manipulating POJOs.\n\nIt consists of the
following classes:\n\n<tree>\n<node-0><java-class><a
href=\"/site/apidocs/org/apache/juneau/objecttools/ObjectSearcher.html\"
target=\"_blank\">ObjectSearcher</a></java-class></node-0>\n<node-0><java-class><a
href=\"/site/apidocs/org/apa [...]
{"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 | `seri [...]
{"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/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/Mar [...]
-{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/marshall/json/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\",\n [...]
+{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/marshall/json/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\",\n [...]
{"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/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/MarshallingContextab [...]
{"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 [...]
@@ -200,8 +204,9 @@
{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/marshall/oapi/OpenApiSerializer.html\"
target=\"_blank\">OpenApiSerializer</a> class is used to convert POJOs to\nHTTP
parts.\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/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/ju [...]
{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/marshall/oapi/OpenApiParser.html\"
target=\"_blank\">OpenApiParser</a> class is used to convert HTTP parts
back\ninto 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/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/ [...]
{"description": "Juneau supports converting arbitrary POJOs to and from TOML
(Tom's Obvious Minimal Language) using native serializers and parsers
implemented without any external dependencies.\nTOML is a configuration file
format that maps unambiguously to hash tables, widely used in projects like
Cargo (Rust) and Python's `pyproject.toml`.\nThe <a
href=\"/site/apidocs/org/apache/juneau/marshall/toml/TomlSerializer.html\"
target=\"_blank\">TomlSerializer</a> converts POJOs directly to T [...]
-{"description": "Juneau supports converting arbitrary POJOs to and from the
**Protobuf Text Format** using native serializers and parsers implemented
without any external dependencies. This is the human-readable text format (not
the binary wire format) used for protobuf configuration files, debugging, and
interop with tools like `protoc --decode`. The <a
href=\"/site/apidocs/org/apache/juneau/marshall/prototext/PrototextSerializer.html\"
target=\"_blank\">PrototextSerializer</a> converts [...]
+{"description": "Juneau supports converting arbitrary POJOs to and from the
**Protobuf Text Format** using native serializers and parsers implemented
without any external dependencies. This is the human-readable text format (not
the binary wire format) used for protobuf configuration files, debugging, and
interop with tools like `protoc --decode`. The <a
href=\"/site/apidocs/org/apache/juneau/marshall/prototext/PrototextSerializer.html\"
target=\"_blank\">PrototextSerializer</a> converts [...]
{"description": "The `org.apache.juneau.marshall.parquet` package provides
Juneau serializer and parser implementations for the\n[Apache
Parquet](https://parquet.apache.org/docs/file-format/) columnar storage
format.\n\nThe `ParquetSerializer` and `ParquetParser` classes integrate with
the standard Juneau\n`Serializer` / `Parser` APIs and support the `@Parquet`
and `@ParquetConfig` annotations for\nformat-specific
configuration.\n\n:::note\nFull documentation for the Parquet serializer/p [...]
+{"description": "Juneau supports converting arbitrary POJOs to and from the
Protocol Buffers **binary** wire format using native, bean-driven serializers
and parsers. No `.proto` schema file or code generation is required — the
field-number/type schema is derived directly from Juneau bean metadata.\n\nThe
<a
href=\"/site/apidocs/org/apache/juneau/marshall/protobuf/ProtobufSerializer.html\"
target=\"_blank\">ProtobufSerializer</a> converts POJOs directly to protobuf
binary bytes, an [...]
{"description": "Juneau supports converting arbitrary POJOs to and from YAML
using native serializers and parsers implemented\nwithout any external
dependencies.\nThe YAML serializer converts POJOs directly to YAML block-style
output using indentation-based structure.\nThe YAML parser creates POJOs
directly from YAML using an indentation-aware state machine.\n\nThe following
example shows YAML for a typical bean:\n\n##### Sample Beans\n\n```java\npublic
class Person {\n\n // Bean prop [...]
{"description": "The YAML data type produced depends on the Java object type
being serialized.\n\n- Primitives and primitive objects are converted to YAML
scalars.\n- Beans and `Maps` are converted to YAML block mappings.\n-
`Collections` and arrays are converted to YAML block sequences.\n- Anything
else is converted to YAML string scalars (with quoting if necessary).\n\n#####
Data type conversions:\n\n| POJO type | YAML type | Example | Serialized form
|\n|-----------|-----------|------ [...]
{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/marshall/yaml/YamlSerializer.html\"
target=\"_blank\">YamlSerializer</a> class is used to serialize POJOs
into\nYAML.\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/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/Mar [...]
@@ -212,6 +217,7 @@
{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/marshall/csv/CsvParser.html\"
target=\"_blank\">CsvParser</a> class is used to parse CSV 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/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/MarshallingContextable.B [...]
{"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##### Maven Dependency\n\nMarkdown
support is included in `juneau-marshall`:\n\n```xml\n<dependency>\n
<groupId>org.apache.juneau</groupId>\n
<artifactId>juneau-marshall</artifactId>\n <ve [...]
{"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/JsonlBasics)'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 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/json/JcsSerializer.html\"
target=\"_blank\">JcsSerializer</a> converts POJOs to canonical JSON. The <a
[...]
{"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 [...]
@@ -219,6 +225,11 @@
{"description": "Juneau supports converting arbitrary POJOs to and from HOCON
(Human-Optimized Config Object Notation) using native serializers and parsers.
HOCON is a superset of JSON used extensively in the JVM ecosystem (Akka, Play
Framework, sbt, Apache Spark, Kafka, Flink) for configuration files. It extends
JSON with path expressions, `=` as key-value separator, unquoted strings,
object merging, substitutions (`${var}`), triple-quoted multi-line strings, and
optional root braces.\n [...]
{"description": "The `org.apache.juneau.marshall.ini` package provides Juneau
serializer and parser implementations for the INI\nconfiguration file
format.\n\nThe `IniSerializer` and `IniParser` classes integrate with the
standard Juneau `Serializer` / `Parser` APIs and\nsupport the `@Ini` and
`@IniConfig` annotations for format-specific configuration.\n\n:::note\nFull
documentation for the INI serializer/parser is coming soon. In the meantime,
refer to the\n[Marshallers overview](/docs/ [...]
{"description": "Juneau supports the [Server-Sent Events
(SSE)](https://html.spec.whatwg.org/multipage/server-sent-events.html)\nwire
format (`text/event-stream`) via native serializer and parser implementations
under\n`org.apache.juneau.marshall.sse`. SSE is the one-way push channel used
by browsers (`EventSource`) and\nmost LLM streaming APIs (OpenAI, Anthropic,
etc.) for progress events, partial responses,\nheartbeats, and other long-lived
telemetry feeds.\n\nThe <a href=\"/site/apido [...]
+{"description": "Juneau exposes a public low-level streaming API that
complements the POJO databind path\n(<code>Serializer.serialize(...)</code> /
<code>Parser.parse(...)</code>) with cursor-based\npush and pull primitives.
Two surfaces, layered:\n\n##### Surfaces at a glance\n\n| Surface | Returns |
Methods | When to use |\n|---|---|---|---|\n| <a
href=\"/site/apidocs/org/apache/juneau/marshall/stream/RecordReader.html\"
target=\"_blank\">RecordReader</a> / <a href=\"/site/apidocs/org/ [...]
+{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/marshall/stream/RecordReader.html\"
target=\"_blank\">RecordReader</a> /\n<a
href=\"/site/apidocs/org/apache/juneau/marshall/stream/RecordWriter.html\"
target=\"_blank\">RecordWriter</a>\nsurface yields one whole-value record per
call. It works uniformly across every Juneau format\nthat implements the <a
href=\"/site/apidocs/org/apache/juneau/marshall/stream/RecordReadable.html\"
target=\"_blank\">RecordReadable</a> /\n<a hre [...]
+{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/marshall/stream/TokenReader.html\"
target=\"_blank\">TokenReader</a> /\n<a
href=\"/site/apidocs/org/apache/juneau/marshall/stream/TokenWriter.html\"
target=\"_blank\">TokenWriter</a>\nsurface exposes structural events one at a
time \u2014 `START_OBJECT`, `FIELD_NAME`, `VALUE_STRING`,\n`END_OBJECT`, etc.
\u2014 for formats whose wire encoding is already token-shaped.\n\nAvailable on
formats that implement the <a href=\"/site/a [...]
+{"description": "The `parseArrayRecords(...)` / `serializeArrayRecords(...)`
factories \u2014 declared by the\n<a
href=\"/site/apidocs/org/apache/juneau/marshall/stream/ArrayRecordReadable.html\"
target=\"_blank\">ArrayRecordReadable</a> /\n<a
href=\"/site/apidocs/org/apache/juneau/marshall/stream/ArrayRecordWritable.html\"
target=\"_blank\">ArrayRecordWritable</a>\nroles \u2014 yield a multi-record
cursor over the **elements of a top-level wire array**, without\nmaterializing
the whole [...]
+{"description": "`TokenReader`, `TokenWriter`, `RecordReader`, and
`RecordWriter` are first-class\n`@RestOp`-method parameter types. Declare one
in your method signature and the framework picks\nthe matching
parser/serializer based on the request `Content-Type` / response `Accept`
and\nhands you the cursor.\n\n> See the <a
href=\"/site/topics/TokenStreamingBasics#per-format-capability-matrix\">per-format
capability matrix</a>\n> for which formats can satisfy a `RecordReader` /
`TokenRead [...]
{"description": "- Reuse instances of serializers and parsers whenever
possible. \nThey are designed to be thread safe and maintain internal caches
of bean metadata to increase performance.\n\n- The <a
href=\"/site/apidocs/org/apache/juneau/MarshallingTraverseContext.Builder.html#detectRecursions()\"
target=\"_blank\">MarshallingTraverseContext.Builder.detectRecursions()</a>
option can cause a performance penalty of around 20%.\nTherefore, it's
recommended that this option be used only [...]
{"description": "#### Maven Dependency\n\n```xml\n<dependency>\n
<groupId>org.apache.juneau</groupId>\n
<artifactId>juneau-marshall-rdf</artifactId>\n
<version>${juneau.version}</version>\n</dependency>\n```\n\n#### Java
Library\n\n```text\njuneau-marshall-rdf-0.0.0.jar\n```\n\n#### OSGi
Module\n\n```text\norg.apache.juneau.marshall.marshaller.rdf_0.0.0.jar\n```\n\n####
Contents/Features\n\nThe `juneau-marshall-rdf` library provides additional
serializers and parsers for RDF.\nT [...]
{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/marshall/marshaller/package-summary.html\"
target=\"_blank\">org.apache.juneau.marshall.marshaller</a> and\n<a
href=\"/site/apidocs/org/apache/juneau/marshall/jena/package-summary.html\"
target=\"_blank\">org.apache.juneau.marshall.jena</a> packages provide\nRDF
(Resource Description Framework) serializers and parsers for converting POJOs
to and from RDF formats.\nThese rely on the Apache Jena library and support
both text-ba [...]
@@ -434,6 +445,7 @@
{"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#==========================================================================================================
[...]
{"description": "As of 10.0, `JettyMicroservice` was reshaped \u2014 the
legacy *subclass* form was retired, and a thin static-call facade\nwas
introduced to collapse the standard `Microservice` + `JettyConfiguration`
bootstrap.
See\n[JuneauMicroserviceJettyBasics](/docs/topics/JuneauMicroserviceJettyBasics)
for the new entry point.\n\n`juneau-microservice-jetty` contributes a single
[JettyConfiguration](MicroserviceJettyOverview) class that wires Jetty\ninto
the standard [Microservice]( [...]
{"description": "> **See also:** [REST Server \u2014 Mixins and Multi-Mount
Paths](/docs/topics/RestServerCompositionMixinsAndPaths) \u2014 the underlying
`@Rest(mixins=...)` and `@Rest(paths=...)` composition primitives this page is
built on.\n\nStarting with **9.5.0**, Juneau provides an opt-in probe surface
for Jetty microservices:\n\n- `GET /healthz`\n- `GET /readyz`\n- `GET
/livez`\n\nProbe routing now has two supported integration styles:\n\n-
**Preferred:** mix probe operations in [...]
+{"description": "> **See also:** [Health / Readiness / Liveness
Probes](/docs/topics/HealthProbes) \u2014 the probe surface (`/healthz`,
`/readyz`, `/livez`) this page gates during shutdown.\n\nStarting with
**10.0.0**, both embedded-server microservice flavors \u2014
`juneau-microservice-jetty` and `juneau-microservice-tomcat` \u2014 perform a
**zero-downtime graceful shutdown** suitable for rolling Kubernetes
deployments. The two servers share one identical shutdown contract.\n\nWhen a
[...]
{"description": "# Starter Projects\n\nApache Juneau provides three minimal,
clone-and-go **\"Hello World\" starter projects** \u2014 one per\ndeployment
type. They are deliberately simpler than the [petstore
showcase](/docs/topics/JuneauPetstoreOverview):\nentry-point templates you can
build and run in under five minutes, then graduate from.\n\nEach starter is a
standalone public GitHub repo with its own docs site:\n\n| Starter | Deployment
| Repo | Docs |\n| --- | --- | --- | --- |\n| [...]
{"description": "The **juneau-petstore** family is the canonical Apache Juneau
showcase application. It packages a small, complete sample petstore (pets,
orders, users) and deploys it under two runtimes \u2014 Jetty/`Microservice`
and Spring Boot \u2014 using the *exact same* REST surface, demonstrating that
a Juneau service is just a `Servlet` and travels unchanged across deployment
containers.\n\n> **In-tree, no external repo.** The petstore lives directly in
the Juneau reactor under ` [...]
{"description": "# juneau-examples-core\n\nThe
[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).\n\n## Overview\n\nThis module focuses on the
fundamental serialization and deserialization features of Juneau Core, showing
developers how to:\n\n- Convert POJO [...]
diff --git a/static/ai/manifest.json b/static/ai/manifest.json
index 7b1e914703..15412d675b 100644
--- a/static/ai/manifest.json
+++ b/static/ai/manifest.json
@@ -1,10 +1,10 @@
{
- "generated_at": "content-hash:730c3316f71f",
- "record_count": 452,
+ "generated_at": "content-hash:fac31384af5d",
+ "record_count": 464,
"schema_version": "1.0.0",
"source_commit": {
- "juneau": "dc43675d69d905600e2eb490be8edbe38a25ee46",
- "juneau_docs": "851287993dc57619afd2711d16e8c2ffae134a22"
+ "juneau": "2487121feb3ee201c6a27e9791481db0c13b64a1",
+ "juneau_docs": "624834ba134ac4e8b1146e377970dfdf88375c29"
},
"version": "10.0.0"
}
diff --git a/static/ai/taxonomy.json b/static/ai/taxonomy.json
index 8189fa72cb..79000b5c97 100644
--- a/static/ai/taxonomy.json
+++ b/static/ai/taxonomy.json
@@ -3,14 +3,14 @@
"01": 23,
"02": 24,
"03": 26,
- "04": 32,
+ "04": 33,
"05": 18,
- "06": 10,
+ "06": 11,
"07": 12,
- "08": 9,
- "09": 8,
+ "08": 10,
+ "09": 9,
"10": 17,
- "11": 17,
+ "11": 18,
"12": 5,
"13": 5,
"14": 7,
@@ -33,11 +33,11 @@
"31": 11,
"32": 4,
"33": 5,
- "34": 4,
+ "34": 5,
"35": 6,
"36": 4,
"37": 2,
- "38": 2,
+ "38": 3,
"39": 2,
"40": 2,
"41": 2,
@@ -49,7 +49,7 @@
"47": 1,
"48": 1,
"49": 1,
- "50": 1,
+ "50": 6,
"51": 2,
"52": 1,
"53": 1,
@@ -65,6 +65,6 @@
"source_types": {
"api-metadata": 16,
"release-note": 85,
- "topic": 351
+ "topic": 363
}
}