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 8f6d0f7999 TODO-351 B-marshall-2/3: rename marshall.swap framework SPI
package to swap.spi; rename swap.spi Builder to PojoBuilder (10.0
breaking-change window)
8f6d0f7999 is described below
commit 8f6d0f79993d83a636d842b81ed00cde67995ecf
Author: James Bognar <[email protected]>
AuthorDate: Wed Aug 12 14:45:55 2026 -0400
TODO-351 B-marshall-2/3: rename marshall.swap framework SPI package to
swap.spi; rename swap.spi Builder to PojoBuilder (10.0 breaking-change window)
---
pages/topics/03.03.09.PojoBuilders.md | 4 ++--
pages/topics/03.13.00.Swaps.md | 2 +-
pages/topics/03.13.03.PerMediaTypeSwaps.md | 2 +-
pages/topics/03.13.07.SurrogateClasses.md | 2 +-
pages/topics/03.21.PojoCategories.md | 2 +-
pages/topics/03.31.02.OpenApiSerializers.md | 20 ++++++++++----------
static/ai/juneau-knowledge.jsonl | 6 +++---
7 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/pages/topics/03.03.09.PojoBuilders.md
b/pages/topics/03.03.09.PojoBuilders.md
index 20a20b9358..cee28b43e9 100644
--- a/pages/topics/03.03.09.PojoBuilders.md
+++ b/pages/topics/03.03.09.PojoBuilders.md
@@ -78,7 +78,7 @@ The first can be accomplished through **any** of the
following:
```java
public static Builder create() {...}
```
-- A public constructor on the POJO class that takes in a single parameter that
implements the <a
href="/site/apidocs/org/apache/juneau/marshall/swap/Builder.html"
target="_blank">Builder</a> interface.
+- A public constructor on the POJO class that takes in a single parameter that
implements the <a
href="/site/apidocs/org/apache/juneau/marshall/swap/spi/PojoBuilder.html"
target="_blank">PojoBuilder</a> interface.
The builder class must have a public no-arg constructor.
```java
public MyBean(Builder builder) {...}
@@ -104,7 +104,7 @@ The second can be accomplished through **any** of the
following:
<tree>
<node-0><java-annotation><a
href="/site/apidocs/org/apache/juneau/commons/Builder.html"
target="_blank">org.apache.juneau.commons.Builder</a></java-annotation></node-0>
-<node-0><java-abstract-class><a
href="/site/apidocs/org/apache/juneau/marshall/swap/Builder.html"
target="_blank">org.apache.juneau.marshall.swap.Builder</a></java-abstract-class></node-0>
+<node-0><java-abstract-class><a
href="/site/apidocs/org/apache/juneau/marshall/swap/spi/PojoBuilder.html"
target="_blank">org.apache.juneau.marshall.swap.spi.PojoBuilder</a></java-abstract-class></node-0>
</tree>
:::
\ No newline at end of file
diff --git a/pages/topics/03.13.00.Swaps.md b/pages/topics/03.13.00.Swaps.md
index ab483f5787..5475b7336e 100644
--- a/pages/topics/03.13.00.Swaps.md
+++ b/pages/topics/03.13.00.Swaps.md
@@ -4,7 +4,7 @@ title: "Swap"
slug: Swaps
---
-<a href="/site/apidocs/org/apache/juneau/marshall/swap/ObjectSwap.html"
target="_blank">Swaps</a> are a critical component of Juneau.
+<a href="/site/apidocs/org/apache/juneau/marshall/swap/spi/ObjectSwap.html"
target="_blank">Swaps</a> are a critical component of Juneau.
They allow the serializers and parsers to handle Java objects that wouldn't
normally be serializable.
Swaps are, simply put, 'object swappers' that swap in serializable objects for
non-serializable ones during serialization, and vis-versa during parsing.
diff --git a/pages/topics/03.13.03.PerMediaTypeSwaps.md
b/pages/topics/03.13.03.PerMediaTypeSwaps.md
index ca26b34baa..06e7876828 100644
--- a/pages/topics/03.13.03.PerMediaTypeSwaps.md
+++ b/pages/topics/03.13.03.PerMediaTypeSwaps.md
@@ -5,7 +5,7 @@ slug: PerMediaTypeSwaps
Swaps can also be defined per-media-type.
-The <a
href="/site/apidocs/org/apache/juneau/marshall/swap/ObjectSwap.html#forMediaTypes()"
target="_blank">ObjectSwap.forMediaTypes()</a> method can be
+The <a
href="/site/apidocs/org/apache/juneau/marshall/swap/spi/ObjectSwap.html#forMediaTypes()"
target="_blank">ObjectSwap.forMediaTypes()</a> method can be
overridden to provide a set of media types that the swap is invoked on.
It's also possible to define multiple swaps against the same object as long as
they're differentiated by media type.
diff --git a/pages/topics/03.13.07.SurrogateClasses.md
b/pages/topics/03.13.07.SurrogateClasses.md
index d572c12bb1..56adfd98b1 100644
--- a/pages/topics/03.13.07.SurrogateClasses.md
+++ b/pages/topics/03.13.07.SurrogateClasses.md
@@ -62,5 +62,5 @@ WriterSerializer serializer = JsonSerializer
When the serializer encounters the non-serializable class, it will serialize
an instance of the surrogate instead.
:::info See Also
-<java-interface><a
href="/site/apidocs/org/apache/juneau/marshall/swap/Surrogate.html"
target="_blank">Surrogate</a></java-interface>
+<java-interface><a
href="/site/apidocs/org/apache/juneau/marshall/swap/spi/Surrogate.html"
target="_blank">Surrogate</a></java-interface>
:::
\ No newline at end of file
diff --git a/pages/topics/03.21.PojoCategories.md
b/pages/topics/03.21.PojoCategories.md
index 8158ab1f48..236becc9bb 100644
--- a/pages/topics/03.21.PojoCategories.md
+++ b/pages/topics/03.21.PojoCategories.md
@@ -193,7 +193,7 @@ The following chart shows POJOs categorized into groups and
whether they can be
<td colSpan={4}>
<b>Swapped objects</b><br />
<span style={{fontWeight: 'normal', fontSize: '0.9em'}}>
- Objects that are not directly serializable but have <a
href="/site/apidocs/org/apache/juneau/marshall/swap/ObjectSwap.html"
target="_blank">ObjectSwaps</a> associated with them.
+ Objects that are not directly serializable but have <a
href="/site/apidocs/org/apache/juneau/marshall/swap/spi/ObjectSwap.html"
target="_blank">ObjectSwaps</a> associated with them.
The purpose of a POJO swap is to convert an object to another object
that is easier to serialize and parse.
<br /><i>Note: As of 9.5.0, date/time types (`Calendar`, `Date`,
`Temporal` subtypes, `XMLGregorianCalendar`, `Duration`, `Period`)
are handled natively and no longer require swaps. Swap classes remain
available as override mechanisms.</i>
diff --git a/pages/topics/03.31.02.OpenApiSerializers.md
b/pages/topics/03.31.02.OpenApiSerializers.md
index e3ce4a50fb..229227d377 100644
--- a/pages/topics/03.31.02.OpenApiSerializers.md
+++ b/pages/topics/03.31.02.OpenApiSerializers.md
@@ -153,7 +153,7 @@ Here are the rules of POJO types allowed for various
type/format combinations:
• Any POJO transformable to a `byte[]` via:<br/>
- `public byte[] toBytes() {...}`<br/>
- `public byte[] toFoo() {...}` (any method starting with "to")<br/>
- - Any POJO transformable via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/ObjectSwap.html"
target="_blank">ObjectSwap</a>
+ - Any POJO transformable via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/spi/ObjectSwap.html"
target="_blank">ObjectSwap</a>
</td>
</tr>
<tr>
@@ -164,7 +164,7 @@ Here are the rules of POJO types allowed for various
type/format combinations:
• Any POJO transformable to a <a
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Calendar.html"
target="_blank">Calendar</a> via:<br/>
- `public Calendar toCalendar() {...}`<br/>
- `public Calendar toFoo() {...}` (any method starting with "to")<br/>
- - Any POJO transformable via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/ObjectSwap.html"
target="_blank">ObjectSwap</a>
+ - Any POJO transformable via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/spi/ObjectSwap.html"
target="_blank">ObjectSwap</a>
</td>
</tr>
<tr>
@@ -177,7 +177,7 @@ Here are the rules of POJO types allowed for various
type/format combinations:
• <a
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html"
target="_blank">String</a> (default)<br/>
• Any POJO transformable to a <a
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html"
target="_blank">String</a> via:<br/>
- `public String toString() {...}`<br/>
- - Any POJO transformable via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/ObjectSwap.html"
target="_blank">ObjectSwap</a>
+ - Any POJO transformable via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/spi/ObjectSwap.html"
target="_blank">ObjectSwap</a>
</td>
</tr>
<tr>
@@ -190,7 +190,7 @@ Here are the rules of POJO types allowed for various
type/format combinations:
• Any POJO transformable to a <a
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Boolean.html"
target="_blank">Boolean</a> via:<br/>
- `public Boolean toBoolean() {...}`<br/>
- `public Boolean toFoo() {...}` (any method starting with "to")<br/>
- - Any POJO transformable via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/ObjectSwap.html"
target="_blank">ObjectSwap</a>
+ - Any POJO transformable via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/spi/ObjectSwap.html"
target="_blank">ObjectSwap</a>
</td>
</tr>
<tr>
@@ -203,7 +203,7 @@ Here are the rules of POJO types allowed for various
type/format combinations:
• Any POJO transformable to an <a
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html"
target="_blank">Integer</a> via:<br/>
- `public Integer toInteger() {...}`<br/>
- `public Integer toFoo() {...}` (any method starting with "to")<br/>
- - Any POJO transformable via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/ObjectSwap.html"
target="_blank">ObjectSwap</a>
+ - Any POJO transformable via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/spi/ObjectSwap.html"
target="_blank">ObjectSwap</a>
</td>
</tr>
<tr>
@@ -215,7 +215,7 @@ Here are the rules of POJO types allowed for various
type/format combinations:
• Any POJO transformable to a <a
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Long.html"
target="_blank">Long</a> via:<br/>
- `public Long toLong() {...}`<br/>
- `public Long toFoo() {...}` (any method starting with "to")<br/>
- - Any POJO transformable via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/ObjectSwap.html"
target="_blank">ObjectSwap</a>
+ - Any POJO transformable via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/spi/ObjectSwap.html"
target="_blank">ObjectSwap</a>
</td>
</tr>
<tr>
@@ -228,7 +228,7 @@ Here are the rules of POJO types allowed for various
type/format combinations:
• Any POJO transformable to a <a
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Float.html"
target="_blank">Float</a> via:<br/>
- `public Float toFloat() {...}`<br/>
- `public Float toFoo() {...}` (any method starting with "to")<br/>
- - Any POJO transformable via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/ObjectSwap.html"
target="_blank">ObjectSwap</a>
+ - Any POJO transformable via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/spi/ObjectSwap.html"
target="_blank">ObjectSwap</a>
</td>
</tr>
<tr>
@@ -240,7 +240,7 @@ Here are the rules of POJO types allowed for various
type/format combinations:
• Any POJO transformable to a <a
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Double.html"
target="_blank">Double</a> via:<br/>
- `public Double toDouble() {...}`<br/>
- `public Double toFoo() {...}` (any method starting with "to")<br/>
- - Any POJO transformable via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/ObjectSwap.html"
target="_blank">ObjectSwap</a>
+ - Any POJO transformable via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/spi/ObjectSwap.html"
target="_blank">ObjectSwap</a>
</td>
</tr>
<tr>
@@ -250,7 +250,7 @@ Here are the rules of POJO types allowed for various
type/format combinations:
• Arrays or `Collections` of any defaults on this list<br/>
• Any POJO transformable to arrays of the default types (e.g. `Integer[]`,
`Boolean[][]`, etc...)<br/>
For example: `public Boolean[][] toFoo() {...}` (any method starting with
"to")<br/>
-• Any POJO transformable to arrays of the default types via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/ObjectSwap.html"
target="_blank">ObjectSwap</a>
+• Any POJO transformable to arrays of the default types via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/spi/ObjectSwap.html"
target="_blank">ObjectSwap</a>
</td>
</tr>
<tr>
@@ -263,7 +263,7 @@ For example: `public Boolean[][] toFoo() {...}` (any method
starting with "to")<
<td>
• `Map<String,Object>` (default)<br/>
• Beans with properties of anything on this list<br/>
-• Any POJO transformable to a map via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/ObjectSwap.html"
target="_blank">ObjectSwap</a>
+• Any POJO transformable to a map via an <a
href="/site/apidocs/org/apache/juneau/marshall/swap/spi/ObjectSwap.html"
target="_blank">ObjectSwap</a>
</td>
</tr>
<tr>
diff --git a/static/ai/juneau-knowledge.jsonl b/static/ai/juneau-knowledge.jsonl
index 6196310ef7..689352fe75 100644
--- a/static/ai/juneau-knowledge.jsonl
+++ b/static/ai/juneau-knowledge.jsonl
@@ -151,14 +151,14 @@
{"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": "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": "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/marshall/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`, [...]
+{"description": "<a
href=\"/site/apidocs/org/apache/juneau/marshall/swap/spi/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`, `Iterab [...]
{"description": "By default, all serializers and parsers have built in
`ObjectSwaps` defined for the following common data types:\n\n:::note\nAs of
9.5.0, `Iterator`, `Iterable`, `Stream`, and `Enumeration` types are serialized
natively without swaps.\nThe `IteratorSwap` and `EnumerationSwap` classes have
been removed.\nSee [Release 9.5.0](/docs/release-notes/9.5.0) for
details.\n:::\n\n:::note\nAs of 9.5.0, date/time types (`Calendar`, `Date`,
`Temporal` subtypes, `XMLGregorianCalendar` [...]
{"description": "Various methods can be defined on a class directly to affect
how it gets serialized.\nThis can often be simpler than using
`ObjectSwaps`.\n\nObjects serialized as `Strings` can be parsed back into their
original objects by implementing one of the following methods on the
class:\n\n- `public static T fromString(String)` method.\n \n Any of the
following method names also work:\n - `valueOf(String)`\n - `parse(String)`\n
- `parseString(String)`\n - `forName(String)`\ [...]
-{"description": "Swaps can also be defined per-media-type.\n\nThe <a
href=\"/site/apidocs/org/apache/juneau/marshall/swap/ObjectSwap.html#forMediaTypes()\"
target=\"_blank\">ObjectSwap.forMediaTypes()</a> method can be\noverridden to
provide a set of media types that the swap is invoked on.\n\nIt's also possible
to define multiple swaps against the same object as long as they're
differentiated by media type.\n\nWhen multiple swaps are defined, the
best-match media type is used.\n\nIn the [...]
+{"description": "Swaps can also be defined per-media-type.\n\nThe <a
href=\"/site/apidocs/org/apache/juneau/marshall/swap/spi/ObjectSwap.html#forMediaTypes()\"
target=\"_blank\">ObjectSwap.forMediaTypes()</a> method can be\noverridden to
provide a set of media types that the swap is invoked on.\n\nIt's also possible
to define multiple swaps against the same object as long as they're
differentiated by media type.\n\nWhen multiple swaps are defined, the
best-match media type is used.\n\nIn [...]
{"description": "In the previous sections, we defined two-way swaps, meaning
swaps where the original objects could be reconstructing\nduring
parsing.\nHowever, there are certain kinds of objects that we may want to
support for serializing but that are not possible to\nreconstruct during
parsing.\nFor these, we can use one-way object swaps.\n\nA one-way swap is
simply an object transform that only implements the `swap()` method.\nThe
`unswap()` method is simply left unimplemented.\n\n::: [...]
{"description": "<a
href=\"/site/apidocs/org/apache/juneau/marshall/Swap.html\"
target=\"_blank\">@Swap</a> can be used to associate a swap class using an
annotation.\nThis is often cleaner than using the builder `swaps()` method
since you can keep your swap class near your POJO
class.\n\n```java\n@Swap(MyObjectSwap.class)\npublic class MyPojo {\n
...\n}\n\n// Sample swap for converting MyPojo classes to a simple
string.\npublic class MyObjectSwap extends ObjectSwap {\n @Override / [...]
{"description": "The <a
href=\"/site/apidocs/org/apache/juneau/marshall/Swap.html#template()\"
target=\"_blank\">@Swap(template)</a> annotation allows you to
associate\narbitrary contextual strings with swaps.\nThe primary purpose is for
providing template names, such as for Apache FreeMarker, therefore the name
'template'.\nHowever, the usage of the string is open-ended.\n\nFor example,
you could pair a template string like
so:\n\n```java\n@Swap(impl=FreeMarkerSwap.class, template=\"MyP [...]
-{"description": "Surrogate classes are very similar in concept to
`ObjectSwaps` except they're simpler to define.\n\nFor example, let's say we
want to be able to serialize the following class but it's not serializable for
some reason\n(for example, there are no properties exposed):\n\n```java\n// Not
serializable because it's not a bean because it has no public
properties.\npublic class MyNonSerializableClass {\n protected String
foo;\n}\n```\n\nThis could be solved with the following [...]
+{"description": "Surrogate classes are very similar in concept to
`ObjectSwaps` except they're simpler to define.\n\nFor example, let's say we
want to be able to serialize the following class but it's not serializable for
some reason\n(for example, there are no properties exposed):\n\n```java\n// Not
serializable because it's not a bean because it has no public
properties.\npublic class MyNonSerializableClass {\n protected String
foo;\n}\n```\n\nThis could be solved with the following [...]
{"description": "In the section [Swaps](/docs/topics/Swaps), you were
introduced to annotations that can be applied to bean classes,
methods,\nfields, and constructors such as <a
href=\"/site/apidocs/org/apache/juneau/commons/bean/BeanType.html\"
target=\"_blank\">@BeanType</a>:\n\n```java\n// Address class with only
street/city/state properties (in that order).\n// All other properties are
ignored.\n@BeanType(properties=\"street,city,state\")\npublic class Address {
... }\n```\n\nAn alt [...]
{"description": "While parsing into beans, Juneau attempts to determine the
class types of bean properties through reflection on the bean\nproperty getter
or setter.\nOften this is insufficient if the property type is an interface or
abstract class that cannot be instantiated.\nThis is where bean names and
dictionaries come into play.\n\nBean names and dictionaries are used for
identifying class types when they cannot be inferred through reflection.\nBean
classes are given names through [...]
{"description": "In addition to the [bean type
name](/docs/topics/XmlBeanTypeNameAnnotation) support, Juneau
provides\nsimplified support for **bean subtypes** via the\n<a
href=\"/site/apidocs/org/apache/juneau/marshall/Marshalled.html#dictionary()\"
target=\"_blank\">@Marshalled(dictionary=\u2026)</a>\nattribute declared on a
parent bean class.\n\nBean subtypes are similar in concept to bean type names,
with two convenience differences:\n\n- You declare the list of possible
subclasses t [...]