You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2025/10/07 15:38:15 UTC

(juneau) branch master updated: Fix broken doc links in javadocs.

This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 40c902a67 Fix broken doc links in javadocs.
40c902a67 is described below

commit 40c902a67155007ab0665f6d4d279c766ee1e03a
Author: James Bognar <ja...@salesforce.com>
AuthorDate: Tue Oct 7 11:38:03 2025 -0400

    Fix broken doc links in javadocs.
---
 README.md                                          |     4 +-
 ai-contexts/DOCS.md                                |   361 +
 .../apache/juneau/bean/openapi/ui/OpenApiUI.java   |     2 +-
 .../org/apache/juneau/bean/openapi3/Callback.java  |     2 +-
 .../apache/juneau/bean/openapi3/Components.java    |     2 +-
 .../org/apache/juneau/bean/openapi3/Contact.java   |     2 +-
 .../apache/juneau/bean/openapi3/Discriminator.java |     2 +-
 .../org/apache/juneau/bean/openapi3/Encoding.java  |     2 +-
 .../org/apache/juneau/bean/openapi3/Example.java   |     2 +-
 .../bean/openapi3/ExternalDocumentation.java       |     2 +-
 .../apache/juneau/bean/openapi3/HeaderInfo.java    |     2 +-
 .../java/org/apache/juneau/bean/openapi3/Info.java |     2 +-
 .../org/apache/juneau/bean/openapi3/Items.java     |     2 +-
 .../org/apache/juneau/bean/openapi3/License.java   |     2 +-
 .../java/org/apache/juneau/bean/openapi3/Link.java |     2 +-
 .../org/apache/juneau/bean/openapi3/MediaType.java |     2 +-
 .../org/apache/juneau/bean/openapi3/OAuthFlow.java |     2 +-
 .../apache/juneau/bean/openapi3/OAuthFlows.java    |     2 +-
 .../org/apache/juneau/bean/openapi3/OpenApi.java   |     2 +-
 .../juneau/bean/openapi3/OpenApiBuilder.java       |     2 +-
 .../org/apache/juneau/bean/openapi3/Operation.java |     2 +-
 .../org/apache/juneau/bean/openapi3/Parameter.java |     2 +-
 .../org/apache/juneau/bean/openapi3/PathItem.java  |     2 +-
 .../juneau/bean/openapi3/RequestBodyInfo.java      |     2 +-
 .../org/apache/juneau/bean/openapi3/Response.java  |     2 +-
 .../apache/juneau/bean/openapi3/SchemaInfo.java    |     2 +-
 .../juneau/bean/openapi3/SecurityRequirement.java  |     2 +-
 .../juneau/bean/openapi3/SecuritySchemeInfo.java   |     2 +-
 .../org/apache/juneau/bean/openapi3/Server.java    |     2 +-
 .../juneau/bean/openapi3/ServerVariable.java       |     2 +-
 .../java/org/apache/juneau/bean/openapi3/Tag.java  |     2 +-
 .../java/org/apache/juneau/bean/openapi3/Xml.java  |     2 +-
 .../org/apache/juneau/bean/swagger/Contact.java    |     2 +-
 .../juneau/bean/swagger/ExternalDocumentation.java |     2 +-
 .../org/apache/juneau/bean/swagger/HeaderInfo.java |     2 +-
 .../java/org/apache/juneau/bean/swagger/Info.java  |     2 +-
 .../java/org/apache/juneau/bean/swagger/Items.java |     2 +-
 .../org/apache/juneau/bean/swagger/License.java    |     2 +-
 .../org/apache/juneau/bean/swagger/Operation.java  |     2 +-
 .../apache/juneau/bean/swagger/OperationMap.java   |     2 +-
 .../apache/juneau/bean/swagger/ParameterInfo.java  |     2 +-
 .../apache/juneau/bean/swagger/ResponseInfo.java   |     2 +-
 .../org/apache/juneau/bean/swagger/SchemaInfo.java |     2 +-
 .../apache/juneau/bean/swagger/SecurityScheme.java |     2 +-
 .../org/apache/juneau/bean/swagger/Swagger.java    |     2 +-
 .../apache/juneau/bean/swagger/SwaggerBuilder.java |     2 +-
 .../apache/juneau/bean/swagger/SwaggerElement.java |     2 +-
 .../java/org/apache/juneau/bean/swagger/Tag.java   |     2 +-
 .../java/org/apache/juneau/bean/swagger/Xml.java   |     2 +-
 .../apache/juneau/bean/swagger/ui/SwaggerUI.java   |     2 +-
 juneau-check-topic-links.py                        |   187 +
 juneau-check-topic-links.sh                        |    49 +
 .../org/apache/juneau/assertions/AnyAssertion.java |     2 +-
 .../apache/juneau/assertions/ArrayAssertion.java   |     2 +-
 .../org/apache/juneau/assertions/Assertion.java    |     2 +-
 .../juneau/assertions/AssertionPredicate.java      |     2 +-
 .../juneau/assertions/AssertionPredicates.java     |     2 +-
 .../org/apache/juneau/assertions/Assertions.java   |    64 +-
 .../apache/juneau/assertions/BeanAssertion.java    |     2 +-
 .../juneau/assertions/BeanListAssertion.java       |     2 +-
 .../apache/juneau/assertions/BooleanAssertion.java |     2 +-
 .../juneau/assertions/ByteArrayAssertion.java      |     2 +-
 .../juneau/assertions/CollectionAssertion.java     |     2 +-
 .../juneau/assertions/ComparableAssertion.java     |     2 +-
 .../apache/juneau/assertions/DateAssertion.java    |     2 +-
 .../juneau/assertions/FluentAnyAssertion.java      |     2 +-
 .../juneau/assertions/FluentArrayAssertion.java    |     2 +-
 .../apache/juneau/assertions/FluentAssertion.java  |     2 +-
 .../juneau/assertions/FluentBeanAssertion.java     |     2 +-
 .../juneau/assertions/FluentBeanListAssertion.java |     2 +-
 .../juneau/assertions/FluentBooleanAssertion.java  |     2 +-
 .../assertions/FluentByteArrayAssertion.java       |     2 +-
 .../assertions/FluentCollectionAssertion.java      |     2 +-
 .../assertions/FluentComparableAssertion.java      |     2 +-
 .../juneau/assertions/FluentDateAssertion.java     |     2 +-
 .../juneau/assertions/FluentIntegerAssertion.java  |     2 +-
 .../juneau/assertions/FluentListAssertion.java     |     2 +-
 .../juneau/assertions/FluentLongAssertion.java     |     2 +-
 .../juneau/assertions/FluentMapAssertion.java      |     2 +-
 .../juneau/assertions/FluentObjectAssertion.java   |     2 +-
 .../assertions/FluentPrimitiveArrayAssertion.java  |     2 +-
 .../juneau/assertions/FluentStringAssertion.java   |     2 +-
 .../assertions/FluentStringListAssertion.java      |     2 +-
 .../assertions/FluentThrowableAssertion.java       |     2 +-
 .../juneau/assertions/FluentVersionAssertion.java  |     2 +-
 .../assertions/FluentZonedDateTimeAssertion.java   |     2 +-
 .../apache/juneau/assertions/IntegerAssertion.java |     2 +-
 .../apache/juneau/assertions/ListAssertion.java    |     2 +-
 .../apache/juneau/assertions/LongAssertion.java    |     2 +-
 .../org/apache/juneau/assertions/MapAssertion.java |     2 +-
 .../apache/juneau/assertions/ObjectAssertion.java  |     2 +-
 .../juneau/assertions/PrimitiveArrayAssertion.java |     2 +-
 .../apache/juneau/assertions/StringAssertion.java  |     2 +-
 .../juneau/assertions/StringListAssertion.java     |     2 +-
 .../juneau/assertions/ThrowableAssertion.java      |     2 +-
 .../java/org/apache/juneau/assertions/Verify.java  |     2 +-
 .../apache/juneau/assertions/VersionAssertion.java |     2 +-
 .../juneau/assertions/ZonedDateTimeAssertion.java  |     2 +-
 .../org/apache/juneau/common/utils/Snippet.java    |     2 +-
 .../main/java/org/apache/juneau/config/Config.java |     2 +-
 .../org/apache/juneau/config/mod/XorEncodeMod.java |   138 +-
 .../org/apache/juneau/config/vars/ConfigVar.java   |     4 +-
 .../main/java/org/apache/juneau/BeanContext.java   |     2 +-
 .../main/java/org/apache/juneau/MediaRange.java    |     2 +-
 .../main/java/org/apache/juneau/MediaRanges.java   |     2 +-
 .../src/main/java/org/apache/juneau/MediaType.java |     2 +-
 .../main/java/org/apache/juneau/StringRange.java   |   397 +-
 .../main/java/org/apache/juneau/StringRanges.java  |     2 +-
 .../org/apache/juneau/annotation/BeanConfig.java   |     4 +-
 .../org/apache/juneau/annotation/ExternalDocs.java |     6 +-
 .../java/org/apache/juneau/annotation/Items.java   |   817 +-
 .../java/org/apache/juneau/annotation/Schema.java  |  2475 +--
 .../org/apache/juneau/annotation/SubItems.java     |   751 +-
 .../java/org/apache/juneau/encoders/Encoder.java   |   125 +-
 .../org/apache/juneau/encoders/EncoderMatch.java   |     2 +-
 .../org/apache/juneau/encoders/EncoderSet.java     |   753 +-
 .../org/apache/juneau/encoders/Finishable.java     |     2 +-
 .../org/apache/juneau/encoders/GzipEncoder.java    |   109 +-
 .../apache/juneau/encoders/IdentityEncoder.java    |   113 +-
 .../java/org/apache/juneau/html/AnchorText.java    |     2 +-
 .../java/org/apache/juneau/html/AsideFloat.java    |     2 +-
 .../apache/juneau/html/BasicHtmlDocTemplate.java   |     2 +-
 .../apache/juneau/html/HtmlBeanPropertyMeta.java   |   419 +-
 .../java/org/apache/juneau/html/HtmlClassMeta.java |   305 +-
 .../org/apache/juneau/html/HtmlDocSerializer.java  |  2371 +--
 .../juneau/html/HtmlDocSerializerSession.java      |   659 +-
 .../org/apache/juneau/html/HtmlDocTemplate.java    |     2 +-
 .../org/apache/juneau/html/HtmlMetaProvider.java   |     2 +-
 .../java/org/apache/juneau/html/HtmlParser.java    |   405 +-
 .../org/apache/juneau/html/HtmlParserSession.java  |  1663 +-
 .../java/org/apache/juneau/html/HtmlRender.java    |     2 +-
 .../juneau/html/HtmlSchemaDocSerializer.java       |   639 +-
 .../html/HtmlSchemaDocSerializerSession.java       |     2 +-
 .../apache/juneau/html/HtmlSchemaSerializer.java   |   791 +-
 .../juneau/html/HtmlSchemaSerializerSession.java   |     2 +-
 .../org/apache/juneau/html/HtmlSerializer.java     |  1827 +--
 .../apache/juneau/html/HtmlSerializerSession.java  |  1843 +--
 .../juneau/html/HtmlStrippedDocSerializer.java     |   351 +-
 .../html/HtmlStrippedDocSerializerSession.java     |     2 +-
 .../main/java/org/apache/juneau/html/HtmlTag.java  |     2 +-
 .../java/org/apache/juneau/html/HtmlWidget.java    |     2 +-
 .../java/org/apache/juneau/html/HtmlWidgetMap.java |     2 +-
 .../java/org/apache/juneau/html/HtmlWidgetVar.java |     2 +-
 .../java/org/apache/juneau/html/HtmlWriter.java    |   725 +-
 .../org/apache/juneau/html/SimpleHtmlWriter.java   |    87 +-
 .../org/apache/juneau/html/annotation/Html.java    |   489 +-
 .../juneau/html/annotation/HtmlAnnotation.java     |     2 +-
 .../apache/juneau/html/annotation/HtmlConfig.java  |     2 +-
 .../html/annotation/HtmlConfigAnnotation.java      |     2 +-
 .../juneau/html/annotation/HtmlDocConfig.java      |    28 +-
 .../html/annotation/HtmlDocConfigAnnotation.java   |     2 +-
 .../apache/juneau/html/annotation/HtmlFormat.java  |     2 +-
 .../apache/juneau/html/annotation/HtmlLink.java    |   235 +-
 .../juneau/html/annotation/HtmlLinkAnnotation.java |     2 +-
 .../org/apache/juneau/http/annotation/Contact.java |   215 +-
 .../apache/juneau/http/annotation/FormData.java    |   587 +-
 .../org/apache/juneau/http/annotation/Header.java  |   509 +-
 .../org/apache/juneau/http/annotation/License.java |   165 +-
 .../org/apache/juneau/http/annotation/Path.java    |   523 +-
 .../org/apache/juneau/http/annotation/Query.java   |   526 +-
 .../apache/juneau/http/annotation/Response.java    |     8 +-
 .../apache/juneau/http/annotation/StatusCode.java  |   299 +-
 .../org/apache/juneau/http/annotation/Tag.java     |   189 +-
 .../org/apache/juneau/httppart/HttpPartSchema.java |     2 +-
 .../java/org/apache/juneau/json/Json5Parser.java   |     2 +-
 .../org/apache/juneau/json/Json5Serializer.java    |     2 +-
 .../apache/juneau/json/JsonBeanPropertyMeta.java   |    93 +-
 .../java/org/apache/juneau/json/JsonClassMeta.java |   109 +-
 .../org/apache/juneau/json/JsonMetaProvider.java   |     2 +-
 .../java/org/apache/juneau/json/JsonParser.java    |   723 +-
 .../org/apache/juneau/json/JsonParserSession.java  |  1755 +-
 .../apache/juneau/json/JsonSchemaSerializer.java   |   827 +-
 .../juneau/json/JsonSchemaSerializerSession.java   |     2 +-
 .../org/apache/juneau/json/JsonSerializer.java     |  1135 +-
 .../apache/juneau/json/JsonSerializerSession.java  |   727 +-
 .../java/org/apache/juneau/json/JsonWriter.java    |   643 +-
 .../org/apache/juneau/json/annotation/Json.java    |   397 +-
 .../juneau/json/annotation/JsonAnnotation.java     |     2 +-
 .../apache/juneau/json/annotation/JsonConfig.java  |     2 +-
 .../json/annotation/JsonConfigAnnotation.java      |     2 +-
 .../java/org/apache/juneau/msgpack/DataType.java   |     2 +-
 .../juneau/msgpack/MsgPackBeanPropertyMeta.java    |    93 +-
 .../apache/juneau/msgpack/MsgPackClassMeta.java    |    75 +-
 .../apache/juneau/msgpack/MsgPackInputStream.java  |   959 +-
 .../apache/juneau/msgpack/MsgPackMetaProvider.java |     2 +-
 .../apache/juneau/msgpack/MsgPackOutputStream.java |   881 +-
 .../org/apache/juneau/msgpack/MsgPackParser.java   |   469 +-
 .../juneau/msgpack/MsgPackParserSession.java       |   537 +-
 .../apache/juneau/msgpack/MsgPackSerializer.java   |   593 +-
 .../juneau/msgpack/MsgPackSerializerSession.java   |   601 +-
 .../apache/juneau/msgpack/annotation/MsgPack.java  |   307 +-
 .../msgpack/annotation/MsgPackAnnotation.java      |     2 +-
 .../juneau/msgpack/annotation/MsgPackConfig.java   |     2 +-
 .../annotation/MsgPackConfigAnnotation.java        |     2 +-
 .../juneau/oapi/OpenApiBeanPropertyMeta.java       |    93 +-
 .../org/apache/juneau/oapi/OpenApiClassMeta.java   |    75 +-
 .../apache/juneau/oapi/OpenApiMetaProvider.java    |     2 +-
 .../java/org/apache/juneau/oapi/OpenApiParser.java |   681 +-
 .../apache/juneau/oapi/OpenApiParserSession.java   |   807 +-
 .../org/apache/juneau/oapi/OpenApiSerializer.java  |   705 +-
 .../juneau/oapi/OpenApiSerializerSession.java      |   913 +-
 .../org/apache/juneau/oapi/annotation/OpenApi.java |   307 +-
 .../juneau/oapi/annotation/OpenApiAnnotation.java  |     2 +-
 .../juneau/oapi/annotation/OpenApiConfig.java      |     2 +-
 .../oapi/annotation/OpenApiConfigAnnotation.java   |     2 +-
 .../apache/juneau/objecttools/AbstractMatcher.java |     2 +-
 .../org/apache/juneau/objecttools/Equality.java    |     2 +-
 .../apache/juneau/objecttools/MatcherFactory.java  |     2 +-
 .../juneau/objecttools/NumberMatcherFactory.java   |     2 +-
 .../apache/juneau/objecttools/ObjectPaginator.java |   255 +-
 .../apache/juneau/objecttools/ObjectSearcher.java  |   601 +-
 .../apache/juneau/objecttools/ObjectSorter.java    |   359 +-
 .../org/apache/juneau/objecttools/ObjectTool.java  |     2 +-
 .../apache/juneau/objecttools/ObjectViewer.java    |   291 +-
 .../org/apache/juneau/objecttools/PageArgs.java    |     2 +-
 .../juneau/objecttools/PatternException.java       |     2 +-
 .../org/apache/juneau/objecttools/SearchArgs.java  |     2 +-
 .../org/apache/juneau/objecttools/SortArgs.java    |     2 +-
 .../juneau/objecttools/StringMatcherFactory.java   |     2 +-
 .../juneau/objecttools/TimeMatcherFactory.java     |     2 +-
 .../org/apache/juneau/objecttools/ViewArgs.java    |     2 +-
 .../java/org/apache/juneau/svl/DefaultingVar.java  |   111 +-
 .../main/java/org/apache/juneau/svl/MapVar.java    |    95 +-
 .../apache/juneau/svl/MultipartResolvingVar.java   |   115 +-
 .../java/org/apache/juneau/svl/MultipartVar.java   |   108 +-
 .../org/apache/juneau/svl/ResolvingJsonMap.java    |     2 +-
 .../main/java/org/apache/juneau/svl/SimpleVar.java |     2 +-
 .../java/org/apache/juneau/svl/StreamedVar.java    |     2 +-
 .../src/main/java/org/apache/juneau/svl/Var.java   |   353 +-
 .../main/java/org/apache/juneau/svl/VarList.java   |     2 +-
 .../java/org/apache/juneau/svl/VarResolver.java    |   691 +-
 .../apache/juneau/svl/VarResolverException.java    |     2 +-
 .../org/apache/juneau/svl/VarResolverSession.java  |     2 +-
 .../java/org/apache/juneau/svl/vars/ArgsVar.java   |     2 +-
 .../org/apache/juneau/svl/vars/CoalesceVar.java    |     2 +-
 .../apache/juneau/svl/vars/EnvVariablesVar.java    |     2 +-
 .../java/org/apache/juneau/svl/vars/IfVar.java     |     2 +-
 .../java/org/apache/juneau/svl/vars/LenVar.java    |     2 +-
 .../org/apache/juneau/svl/vars/LowerCaseVar.java   |     2 +-
 .../apache/juneau/svl/vars/ManifestFileVar.java    |     2 +-
 .../org/apache/juneau/svl/vars/NotEmptyVar.java    |     2 +-
 .../apache/juneau/svl/vars/PatternExtractVar.java  |     2 +-
 .../apache/juneau/svl/vars/PatternMatchVar.java    |     2 +-
 .../apache/juneau/svl/vars/PatternReplaceVar.java  |     2 +-
 .../org/apache/juneau/svl/vars/SubstringVar.java   |     2 +-
 .../java/org/apache/juneau/svl/vars/SwitchVar.java |     2 +-
 .../juneau/svl/vars/SystemPropertiesVar.java       |     2 +-
 .../org/apache/juneau/svl/vars/UpperCaseVar.java   |     2 +-
 .../java/org/apache/juneau/swap/AutoListSwap.java  |     2 +-
 .../java/org/apache/juneau/swap/AutoMapSwap.java   |     2 +-
 .../org/apache/juneau/swap/AutoNumberSwap.java     |     2 +-
 .../org/apache/juneau/swap/AutoObjectSwap.java     |     2 +-
 .../org/apache/juneau/swap/BeanInterceptor.java    |     2 +-
 .../main/java/org/apache/juneau/swap/Builder.java  |     2 +-
 .../java/org/apache/juneau/swap/BuilderSwap.java   |   511 +-
 .../java/org/apache/juneau/swap/DefaultSwaps.java  |     2 +-
 .../org/apache/juneau/swap/FunctionalSwap.java     |     2 +-
 .../main/java/org/apache/juneau/swap/MapSwap.java  |     2 +-
 .../java/org/apache/juneau/swap/ObjectSwap.java    |   827 +-
 .../java/org/apache/juneau/swap/StringSwap.java    |     2 +-
 .../java/org/apache/juneau/swap/Surrogate.java     |     2 +-
 .../java/org/apache/juneau/swap/SurrogateSwap.java |   206 +-
 .../org/apache/juneau/swaps/BeanStringSwap.java    |    93 +-
 .../org/apache/juneau/swaps/ByteArraySwap.java     |   183 +-
 .../java/org/apache/juneau/swaps/ClassSwap.java    |     2 +-
 .../juneau/swaps/DefaultingTemporalAccessor.java   |     2 +-
 .../org/apache/juneau/swaps/EnumerationSwap.java   |    87 +-
 .../org/apache/juneau/swaps/InputStreamSwap.java   |   247 +-
 .../java/org/apache/juneau/swaps/IteratorSwap.java |    87 +-
 .../java/org/apache/juneau/swaps/LocaleSwap.java   |     2 +-
 .../org/apache/juneau/swaps/MatchResultSwap.java   |    89 +-
 .../org/apache/juneau/swaps/ParsedReaderSwap.java  |   251 +-
 .../java/org/apache/juneau/swaps/ReaderSwap.java   |    77 +-
 .../apache/juneau/swaps/StackTraceElementSwap.java |   145 +-
 .../org/apache/juneau/swaps/StringFormatSwap.java  |     2 +-
 .../apache/juneau/swaps/TemporalCalendarSwap.java  |     2 +-
 .../org/apache/juneau/swaps/TemporalDateSwap.java  |     2 +-
 .../java/org/apache/juneau/swaps/TemporalSwap.java |     2 +-
 .../java/org/apache/juneau/swaps/TimeZoneSwap.java |     2 +-
 .../main/java/org/apache/juneau/swaps/UrlSwap.java |     2 +-
 .../juneau/swaps/XMLGregorianCalendarSwap.java     |   135 +-
 .../java/org/apache/juneau/swaps/ZoneIdSwap.java   |     2 +-
 .../java/org/apache/juneau/uon/ParamFormat.java    |     2 +-
 .../org/apache/juneau/uon/UonBeanPropertyMeta.java |    93 +-
 .../java/org/apache/juneau/uon/UonClassMeta.java   |    75 +-
 .../org/apache/juneau/uon/UonMetaProvider.java     |     2 +-
 .../main/java/org/apache/juneau/uon/UonParser.java |   859 +-
 .../org/apache/juneau/uon/UonParserSession.java    |  1815 +--
 .../main/java/org/apache/juneau/uon/UonReader.java |   403 +-
 .../java/org/apache/juneau/uon/UonSerializer.java  |  1261 +-
 .../apache/juneau/uon/UonSerializerSession.java    |   805 +-
 .../main/java/org/apache/juneau/uon/UonUtils.java  |     2 +-
 .../main/java/org/apache/juneau/uon/UonWriter.java |   537 +-
 .../java/org/apache/juneau/uon/annotation/Uon.java |   305 +-
 .../juneau/uon/annotation/UonAnnotation.java       |     2 +-
 .../apache/juneau/uon/annotation/UonConfig.java    |     2 +-
 .../juneau/uon/annotation/UonConfigAnnotation.java |     2 +-
 .../urlencoding/UrlEncodingBeanPropertyMeta.java   |    91 +-
 .../juneau/urlencoding/UrlEncodingClassMeta.java   |   102 +-
 .../urlencoding/UrlEncodingMetaProvider.java       |     2 +-
 .../juneau/urlencoding/UrlEncodingParser.java      |   602 +-
 .../urlencoding/UrlEncodingParserSession.java      |   910 +-
 .../juneau/urlencoding/UrlEncodingSerializer.java  |   878 +-
 .../urlencoding/UrlEncodingSerializerSession.java  |   672 +-
 .../juneau/urlencoding/annotation/UrlEncoding.java |   331 +-
 .../annotation/UrlEncodingAnnotation.java          |     2 +-
 .../urlencoding/annotation/UrlEncodingConfig.java  |     2 +-
 .../annotation/UrlEncodingConfigAnnotation.java    |     2 +-
 .../main/java/org/apache/juneau/xml/Namespace.java |   385 +-
 .../java/org/apache/juneau/xml/XmlBeanMeta.java    |   556 +-
 .../org/apache/juneau/xml/XmlBeanPropertyMeta.java |   285 +-
 .../java/org/apache/juneau/xml/XmlClassMeta.java   |   200 +-
 .../org/apache/juneau/xml/XmlDocSerializer.java    |   192 +-
 .../apache/juneau/xml/XmlDocSerializerSession.java |     2 +-
 .../org/apache/juneau/xml/XmlEventAllocator.java   |     2 +-
 .../org/apache/juneau/xml/XmlMetaProvider.java     |     2 +-
 .../main/java/org/apache/juneau/xml/XmlParser.java |   937 +-
 .../org/apache/juneau/xml/XmlParserSession.java    |  1743 +-
 .../main/java/org/apache/juneau/xml/XmlReader.java |     2 +-
 .../java/org/apache/juneau/xml/XmlReporter.java    |     2 +-
 .../java/org/apache/juneau/xml/XmlResolver.java    |     2 +-
 .../java/org/apache/juneau/xml/XmlSerializer.java  |  1425 +-
 .../apache/juneau/xml/XmlSerializerSession.java    |  1761 +-
 .../main/java/org/apache/juneau/xml/XmlUtils.java  |  1181 +-
 .../main/java/org/apache/juneau/xml/XmlWriter.java |  1345 +-
 .../java/org/apache/juneau/xml/annotation/Xml.java |   564 +-
 .../juneau/xml/annotation/XmlAnnotation.java       |     2 +-
 .../apache/juneau/xml/annotation/XmlConfig.java    |     2 +-
 .../juneau/xml/annotation/XmlConfigAnnotation.java |     2 +-
 .../apache/juneau/xml/annotation/XmlFormat.java    |   355 +-
 .../org/apache/juneau/xml/annotation/XmlNs.java    |    97 +-
 .../apache/juneau/xml/annotation/XmlSchema.java    |   206 +-
 juneau-distrib/pom.xml                             |     2 +-
 juneau-docs/docs/topics/00.01.00.ModuleName.md     |    14 +
 .../docs/topics/02.04.10.BypassSerialization.md    |     1 +
 .../docs/topics/02.11.04.PerMediaTypeSwaps.md      |     1 +
 juneau-docs/docs/topics/02.11.07.TemplatedSwaps.md |     1 +
 juneau-docs/docs/topics/02.15.00.Recursion.md      |     1 +
 .../topics/02.26.05.XmlBeanTypeNameAnnotation.md   |     1 +
 .../docs/topics/02.26.06.XmlChildNameAnnotation.md |     1 +
 .../docs/topics/02.27.06.HtmlRenderAnnotation.md   |     1 +
 .../docs/topics/04.05.00.JuneauBeanOpenApi3.md     |     6 +-
 .../docs/topics/04.07.00.JuneauBeanSwagger2.md     |     8 +
 juneau-docs/docs/topics/09.04.06.PathPatterns.md   |     1 +
 .../docs/topics/09.04.08.OverloadingHttpMethods.md |     1 +
 .../docs/topics/09.05.03.HttpPartAnnotations.md    |     2 +-
 juneau-docs/docs/topics/09.30.00.OtherNotes.md     |     1 +
 .../docs/topics/18.01.00.JuneauExamplesCore.md     |     1 +
 .../docs/topics/18.02.00.JuneauExamplesRest.md     |     1 +
 .../topics/18.03.00.JuneauExamplesRestJetty.md     |     1 +
 .../18.04.00.JuneauExamplesRestSpringboot.md       |     1 +
 .../docs/topics/19.01.00.JuneauAllBasics.md        |     2 +-
 juneau-docs/sidebars.ts                            |     7 +-
 juneau-docs/src/pages/downloads.md                 |     6 +-
 .../apache/juneau/examples/parser/ImageParser.java |     2 +-
 .../examples/serializer/ImageSerializer.java       |     2 +-
 .../juneau/examples/rest/springboot/App.java       |     2 +-
 .../rest/springboot/HelloWorldMessageProvider.java |     2 +-
 .../rest/springboot/HelloWorldResource.java        |   109 +-
 .../examples/rest/springboot/RootResources.java    |   153 +-
 .../juneau/examples/rest/HtmlBeansResource.java    |     4 +-
 .../juneau/examples/rest/PhotosResource.java       |     2 +-
 .../juneau/examples/rest/UtilityBeansResource.java |     2 +-
 .../microservice/BasicMicroserviceListener.java    |     2 +-
 .../apache/juneau/microservice/Microservice.java   |  2451 +--
 .../juneau/microservice/MicroserviceListener.java  |     2 +-
 .../juneau/microservice/console/ConfigCommand.java |     2 +-
 .../microservice/console/ConsoleCommand.java       |     2 +-
 .../juneau/microservice/console/ExitCommand.java   |     2 +-
 .../juneau/microservice/console/HelpCommand.java   |     2 +-
 .../microservice/console/RestartCommand.java       |     2 +-
 .../microservice/resources/ConfigResource.java     |   440 +-
 .../microservice/resources/DirectoryResource.java  |   648 +-
 .../microservice/resources/SampleRootResource.java |    70 +-
 .../microservice/resources/ShutdownResource.java   |   108 +-
 .../jetty/BasicJettyMicroserviceListener.java      |     2 +-
 .../jetty/BasicJettyServerFactory.java             |     2 +-
 .../juneau/microservice/jetty/JettyLogger.java     |     2 +-
 .../microservice/jetty/JettyMicroservice.java      |     2 +-
 .../jetty/JettyMicroserviceListener.java           |     2 +-
 .../microservice/jetty/JettyServerFactory.java     |     2 +-
 .../jetty/resources/DebugResource.java             |   187 +-
 .../juneau/microservice/jetty/template/App.java    |     2 +-
 .../jetty/template/HelloWorldResource.java         |    85 +-
 .../microservice/jetty/template/RootResources.java |   107 +-
 .../microservice/springboot/template/App.java      |     2 +-
 .../template/HelloWorldMessageProvider.java        |     2 +-
 .../springboot/template/HelloWorldResource.java    |   165 +-
 .../springboot/template/RootResources.java         |   144 +-
 .../rest/client/BasicHttpEntityRequestBase.java    |     2 +-
 .../juneau/rest/client/BasicHttpRequestBase.java   |     2 +-
 .../rest/client/BasicHttpRequestRetryHandler.java  |     2 +-
 .../juneau/rest/client/BasicRestCallHandler.java   |     2 +-
 .../rest/client/BasicRestCallInterceptor.java      |     2 +-
 .../apache/juneau/rest/client/ResponseContent.java |     2 +-
 .../apache/juneau/rest/client/ResponseHeader.java  |     2 +-
 .../juneau/rest/client/ResponseStatusLine.java     |     2 +-
 .../juneau/rest/client/RestCallException.java      |   246 +-
 .../apache/juneau/rest/client/RestCallHandler.java |     2 +-
 .../juneau/rest/client/RestCallInterceptor.java    |   166 +-
 .../org/apache/juneau/rest/client/RestClient.java  | 16195 ++++++++++---------
 .../apache/juneau/rest/client/RestOperation.java   |     2 +-
 .../org/apache/juneau/rest/client/RestRequest.java |  5398 +++---
 .../juneau/rest/client/RestRequestCreated.java     |     2 +-
 .../apache/juneau/rest/client/RestResponse.java    |  1852 +--
 .../assertion/FluentResponseBodyAssertion.java     |     4 +-
 .../assertion/FluentResponseHeaderAssertion.java   |     4 +-
 .../FluentResponseStatusLineAssertion.java         |     4 +-
 .../juneau/rest/client/remote/RemoteMeta.java      |     4 +-
 .../client/remote/RemoteMetadataException.java     |     4 +-
 .../rest/client/remote/RemoteOperationArg.java     |     4 +-
 .../rest/client/remote/RemoteOperationBeanArg.java |     4 +-
 .../rest/client/remote/RemoteOperationMeta.java    |     4 +-
 .../rest/client/remote/RemoteOperationReturn.java  |     4 +-
 .../org/apache/juneau/http/BasicStatusLine.java    |     2 +-
 .../java/org/apache/juneau/http/HttpEntities.java  |     2 +-
 .../java/org/apache/juneau/http/HttpHeaders.java   |     2 +-
 .../java/org/apache/juneau/http/HttpMethod.java    |     2 +-
 .../java/org/apache/juneau/http/HttpParts.java     |     2 +-
 .../java/org/apache/juneau/http/HttpResources.java |     2 +-
 .../java/org/apache/juneau/http/HttpResponses.java |     2 +-
 .../apache/juneau/http/entity/BasicHttpEntity.java |     2 +-
 .../apache/juneau/http/entity/ByteArrayEntity.java |     2 +-
 .../org/apache/juneau/http/entity/FileEntity.java  |     2 +-
 .../apache/juneau/http/entity/ReaderEntity.java    |     2 +-
 .../juneau/http/entity/SerializedEntity.java       |   391 +-
 .../apache/juneau/http/entity/StreamEntity.java    |     2 +-
 .../apache/juneau/http/entity/StringEntity.java    |     2 +-
 .../java/org/apache/juneau/http/header/Accept.java |     2 +-
 .../apache/juneau/http/header/AcceptCharset.java   |     2 +-
 .../apache/juneau/http/header/AcceptEncoding.java  |     2 +-
 .../apache/juneau/http/header/AcceptLanguage.java  |     2 +-
 .../apache/juneau/http/header/AcceptRanges.java    |     2 +-
 .../java/org/apache/juneau/http/header/Age.java    |     2 +-
 .../java/org/apache/juneau/http/header/Allow.java  |     2 +-
 .../apache/juneau/http/header/Authorization.java   |     2 +-
 .../juneau/http/header/BasicBooleanHeader.java     |     2 +-
 .../apache/juneau/http/header/BasicCsvHeader.java  |     2 +-
 .../apache/juneau/http/header/BasicDateHeader.java |     2 +-
 .../juneau/http/header/BasicEntityTagHeader.java   |     2 +-
 .../juneau/http/header/BasicEntityTagsHeader.java  |     2 +-
 .../org/apache/juneau/http/header/BasicHeader.java |     2 +-
 .../juneau/http/header/BasicHeaderIterator.java    |     2 +-
 .../juneau/http/header/BasicIntegerHeader.java     |     2 +-
 .../apache/juneau/http/header/BasicLongHeader.java |     2 +-
 .../juneau/http/header/BasicMediaRangesHeader.java |     2 +-
 .../juneau/http/header/BasicMediaTypeHeader.java   |     2 +-
 .../juneau/http/header/BasicStringHeader.java      |     2 +-
 .../http/header/BasicStringRangesHeader.java       |     2 +-
 .../apache/juneau/http/header/BasicUriHeader.java  |     2 +-
 .../apache/juneau/http/header/CacheControl.java    |     2 +-
 .../apache/juneau/http/header/ClientVersion.java   |     2 +-
 .../org/apache/juneau/http/header/Connection.java  |     2 +-
 .../juneau/http/header/ContentDisposition.java     |     2 +-
 .../apache/juneau/http/header/ContentEncoding.java |     2 +-
 .../apache/juneau/http/header/ContentLanguage.java |     2 +-
 .../apache/juneau/http/header/ContentLength.java   |     2 +-
 .../apache/juneau/http/header/ContentLocation.java |     2 +-
 .../apache/juneau/http/header/ContentRange.java    |     2 +-
 .../org/apache/juneau/http/header/ContentType.java |     2 +-
 .../java/org/apache/juneau/http/header/Date.java   |     2 +-
 .../java/org/apache/juneau/http/header/Debug.java  |     2 +-
 .../java/org/apache/juneau/http/header/ETag.java   |     2 +-
 .../org/apache/juneau/http/header/EntityTag.java   |     2 +-
 .../java/org/apache/juneau/http/header/Expect.java |     2 +-
 .../org/apache/juneau/http/header/Expires.java     |     2 +-
 .../org/apache/juneau/http/header/Forwarded.java   |     2 +-
 .../java/org/apache/juneau/http/header/From.java   |     2 +-
 .../apache/juneau/http/header/HeaderBeanMeta.java  |     2 +-
 .../org/apache/juneau/http/header/HeaderList.java  |     2 +-
 .../org/apache/juneau/http/header/Headerable.java  |     2 +-
 .../java/org/apache/juneau/http/header/Host.java   |     2 +-
 .../org/apache/juneau/http/header/IfMatch.java     |     2 +-
 .../apache/juneau/http/header/IfModifiedSince.java |     2 +-
 .../org/apache/juneau/http/header/IfNoneMatch.java |     2 +-
 .../org/apache/juneau/http/header/IfRange.java     |     2 +-
 .../juneau/http/header/IfUnmodifiedSince.java      |     2 +-
 .../apache/juneau/http/header/LastModified.java    |     2 +-
 .../org/apache/juneau/http/header/Location.java    |     2 +-
 .../org/apache/juneau/http/header/MaxForwards.java |     2 +-
 .../org/apache/juneau/http/header/NoTrace.java     |     2 +-
 .../java/org/apache/juneau/http/header/Origin.java |     2 +-
 .../java/org/apache/juneau/http/header/Pragma.java |     2 +-
 .../juneau/http/header/ProxyAuthenticate.java      |     2 +-
 .../juneau/http/header/ProxyAuthorization.java     |     2 +-
 .../java/org/apache/juneau/http/header/Range.java  |     2 +-
 .../org/apache/juneau/http/header/Referer.java     |     2 +-
 .../org/apache/juneau/http/header/RetryAfter.java  |     2 +-
 .../juneau/http/header/SerializedHeader.java       |   600 +-
 .../java/org/apache/juneau/http/header/Server.java |     2 +-
 .../java/org/apache/juneau/http/header/TE.java     |     2 +-
 .../java/org/apache/juneau/http/header/Thrown.java |     2 +-
 .../org/apache/juneau/http/header/Trailer.java     |     2 +-
 .../juneau/http/header/TransferEncoding.java       |     2 +-
 .../org/apache/juneau/http/header/Upgrade.java     |     2 +-
 .../org/apache/juneau/http/header/UserAgent.java   |     2 +-
 .../java/org/apache/juneau/http/header/Vary.java   |     2 +-
 .../java/org/apache/juneau/http/header/Via.java    |     2 +-
 .../org/apache/juneau/http/header/Warning.java     |     2 +-
 .../apache/juneau/http/header/WwwAuthenticate.java |     2 +-
 .../apache/juneau/http/part/BasicBooleanPart.java  |     2 +-
 .../apache/juneau/http/part/BasicCsvArrayPart.java |     2 +-
 .../org/apache/juneau/http/part/BasicDatePart.java |     2 +-
 .../apache/juneau/http/part/BasicIntegerPart.java  |     2 +-
 .../org/apache/juneau/http/part/BasicLongPart.java |     2 +-
 .../org/apache/juneau/http/part/BasicPart.java     |   394 +-
 .../apache/juneau/http/part/BasicPartIterator.java |     2 +-
 .../apache/juneau/http/part/BasicStringPart.java   |     2 +-
 .../org/apache/juneau/http/part/BasicUriPart.java  |     2 +-
 .../apache/juneau/http/part/NameValuePairable.java |     2 +-
 .../org/apache/juneau/http/part/PartBeanMeta.java  |     2 +-
 .../org/apache/juneau/http/part/PartIterator.java  |     2 +-
 .../java/org/apache/juneau/http/part/PartList.java |     2 +-
 .../apache/juneau/http/part/SerializedPart.java    |   474 +-
 .../java/org/apache/juneau/http/remote/Remote.java |   273 +-
 .../apache/juneau/http/remote/RemoteDelete.java    |   248 +-
 .../org/apache/juneau/http/remote/RemoteGet.java   |   248 +-
 .../org/apache/juneau/http/remote/RemoteOp.java    |   296 +-
 .../org/apache/juneau/http/remote/RemotePatch.java |   248 +-
 .../org/apache/juneau/http/remote/RemotePost.java  |   248 +-
 .../org/apache/juneau/http/remote/RemotePut.java   |   246 +-
 .../apache/juneau/http/remote/RemoteReturn.java    |     2 +-
 .../apache/juneau/http/resource/BasicResource.java |     2 +-
 .../juneau/http/resource/ByteArrayResource.java    |     2 +-
 .../apache/juneau/http/resource/FileResource.java  |     2 +-
 .../apache/juneau/http/resource/HttpResource.java  |     2 +-
 .../juneau/http/resource/ReaderResource.java       |     2 +-
 .../juneau/http/resource/StreamResource.java       |     2 +-
 .../juneau/http/resource/StringResource.java       |     2 +-
 .../org/apache/juneau/http/response/Accepted.java  |     2 +-
 .../juneau/http/response/AlreadyReported.java      |     2 +-
 .../apache/juneau/http/response/BadRequest.java    |     2 +-
 .../juneau/http/response/BasicHttpException.java   |  1172 +-
 .../juneau/http/response/BasicHttpResponse.java    |     2 +-
 .../org/apache/juneau/http/response/Conflict.java  |     2 +-
 .../org/apache/juneau/http/response/Continue.java  |     2 +-
 .../org/apache/juneau/http/response/Created.java   |     2 +-
 .../apache/juneau/http/response/EarlyHints.java    |     2 +-
 .../juneau/http/response/ExpectationFailed.java    |     2 +-
 .../juneau/http/response/FailedDependency.java     |     2 +-
 .../org/apache/juneau/http/response/Forbidden.java |     2 +-
 .../org/apache/juneau/http/response/Found.java     |     2 +-
 .../java/org/apache/juneau/http/response/Gone.java |     2 +-
 .../http/response/HttpVersionNotSupported.java     |     2 +-
 .../org/apache/juneau/http/response/IMUsed.java    |     2 +-
 .../juneau/http/response/InsufficientStorage.java  |     2 +-
 .../juneau/http/response/InternalServerError.java  |     2 +-
 .../juneau/http/response/LengthRequired.java       |     2 +-
 .../org/apache/juneau/http/response/Locked.java    |     2 +-
 .../apache/juneau/http/response/LoopDetected.java  |     2 +-
 .../juneau/http/response/MethodNotAllowed.java     |     2 +-
 .../juneau/http/response/MisdirectedRequest.java   |     2 +-
 .../juneau/http/response/MovedPermanently.java     |     2 +-
 .../apache/juneau/http/response/MultiStatus.java   |     2 +-
 .../juneau/http/response/MultipleChoices.java      |     2 +-
 .../response/NetworkAuthenticationRequired.java    |     2 +-
 .../org/apache/juneau/http/response/NoContent.java |     2 +-
 .../http/response/NonAuthoritiveInformation.java   |     2 +-
 .../apache/juneau/http/response/NotAcceptable.java |     2 +-
 .../apache/juneau/http/response/NotExtended.java   |     2 +-
 .../org/apache/juneau/http/response/NotFound.java  |     2 +-
 .../juneau/http/response/NotImplemented.java       |     2 +-
 .../apache/juneau/http/response/NotModified.java   |     2 +-
 .../java/org/apache/juneau/http/response/Ok.java   |     2 +-
 .../juneau/http/response/PartialContent.java       |     2 +-
 .../juneau/http/response/PayloadTooLarge.java      |     2 +-
 .../juneau/http/response/PermanentRedirect.java    |     2 +-
 .../juneau/http/response/PreconditionFailed.java   |     2 +-
 .../juneau/http/response/PreconditionRequired.java |     2 +-
 .../apache/juneau/http/response/Processing.java    |     2 +-
 .../juneau/http/response/RangeNotSatisfiable.java  |     2 +-
 .../http/response/RequestHeaderFieldsTooLarge.java |     2 +-
 .../apache/juneau/http/response/ResetContent.java  |     2 +-
 .../org/apache/juneau/http/response/SeeOther.java  |     2 +-
 .../juneau/http/response/ServiceUnavailable.java   |     2 +-
 .../juneau/http/response/SwitchingProtocols.java   |     2 +-
 .../juneau/http/response/TemporaryRedirect.java    |     2 +-
 .../juneau/http/response/TooManyRequests.java      |     2 +-
 .../apache/juneau/http/response/Unauthorized.java  |     2 +-
 .../http/response/UnavailableForLegalReasons.java  |     2 +-
 .../juneau/http/response/UnprocessableEntity.java  |     2 +-
 .../juneau/http/response/UnsupportedMediaType.java |     2 +-
 .../juneau/http/response/UpgradeRequired.java      |     2 +-
 .../apache/juneau/http/response/UriTooLong.java    |     2 +-
 .../org/apache/juneau/http/response/UseProxy.java  |     2 +-
 .../http/response/VariantAlsoNegotiates.java       |     2 +-
 .../org/apache/juneau/rest/mock/MockConsole.java   |     2 +-
 .../rest/mock/MockHttpClientConnectionManager.java |     2 +-
 .../apache/juneau/rest/mock/MockHttpSession.java   |     2 +-
 .../org/apache/juneau/rest/mock/MockLogger.java    |     2 +-
 .../apache/juneau/rest/mock/MockPathResolver.java  |     2 +-
 .../apache/juneau/rest/mock/MockRestClient.java    |     2 +-
 .../apache/juneau/rest/mock/MockRestRequest.java   |     2 +-
 .../apache/juneau/rest/mock/MockRestResponse.java  |     2 +-
 .../juneau/rest/mock/MockServletRequest.java       |     2 +-
 .../juneau/rest/mock/MockServletResponse.java      |     2 +-
 .../rest/springboot/BasicSpringRestServlet.java    |   155 +-
 .../springboot/BasicSpringRestServletGroup.java    |   107 +-
 .../juneau/rest/springboot/SpringBeanStore.java    |     2 +-
 .../juneau/rest/springboot/SpringRestServlet.java  |     4 +-
 .../java/org/apache/juneau/rest/RestChild.java     |     2 +-
 .../org/apache/juneau/rest/RestChildMatch.java     |     2 +-
 .../java/org/apache/juneau/rest/RestChildren.java  |     2 +-
 .../java/org/apache/juneau/rest/RestContext.java   | 13435 +++++++--------
 .../java/org/apache/juneau/rest/RestOpContext.java |     6 +-
 .../java/org/apache/juneau/rest/RestRequest.java   |  3223 ++--
 .../java/org/apache/juneau/rest/RestResponse.java  |  1715 +-
 .../org/apache/juneau/rest/annotation/Method.java  |   107 +-
 .../apache/juneau/rest/annotation/OpSwagger.java   |    40 +-
 .../rest/annotation/OpSwaggerAnnotation.java       |     2 +-
 .../org/apache/juneau/rest/annotation/Rest.java    |  2875 ++--
 .../juneau/rest/annotation/RestAnnotation.java     |     2 +-
 .../apache/juneau/rest/annotation/RestDelete.java  |  1263 +-
 .../rest/annotation/RestDeleteAnnotation.java      |     2 +-
 .../org/apache/juneau/rest/annotation/RestGet.java |  1453 +-
 .../juneau/rest/annotation/RestGetAnnotation.java  |     2 +-
 .../org/apache/juneau/rest/annotation/RestOp.java  |  1937 +--
 .../juneau/rest/annotation/RestOpAnnotation.java   |     2 +-
 .../apache/juneau/rest/annotation/RestOptions.java |  1453 +-
 .../rest/annotation/RestOptionsAnnotation.java     |     2 +-
 .../apache/juneau/rest/annotation/RestPatch.java   |  1765 +-
 .../rest/annotation/RestPatchAnnotation.java       |     2 +-
 .../apache/juneau/rest/annotation/RestPost.java    |  1765 +-
 .../juneau/rest/annotation/RestPostAnnotation.java |     2 +-
 .../org/apache/juneau/rest/annotation/RestPut.java |  1765 +-
 .../juneau/rest/annotation/RestPutAnnotation.java  |     2 +-
 .../org/apache/juneau/rest/annotation/Swagger.java |    34 +-
 .../juneau/rest/annotation/SwaggerAnnotation.java  |     2 +-
 .../org/apache/juneau/rest/arg/RequestBeanArg.java |     2 +-
 .../java/org/apache/juneau/rest/arg/RestOpArg.java |     2 +-
 .../org/apache/juneau/rest/arg/RestOpArgList.java  |     2 +-
 .../assertions/FluentProtocolVersionAssertion.java |     2 +-
 .../assertions/FluentRequestContentAssertion.java  |     2 +-
 .../FluentRequestFormParamAssertion.java           |     2 +-
 .../assertions/FluentRequestHeaderAssertion.java   |     2 +-
 .../assertions/FluentRequestLineAssertion.java     |     2 +-
 .../FluentRequestQueryParamAssertion.java          |     2 +-
 .../juneau/rest/config/BasicJson5Config.java       |     2 +-
 .../apache/juneau/rest/config/BasicJsonConfig.java |     2 +-
 .../juneau/rest/config/BasicJsonHtmlConfig.java    |     2 +-
 .../juneau/rest/config/BasicOpenApiConfig.java     |     2 +-
 .../juneau/rest/config/BasicUniversalConfig.java   |     2 +-
 .../juneau/rest/debug/BasicDebugEnablement.java    |     2 +-
 .../apache/juneau/rest/debug/DebugEnablement.java  |     2 +-
 .../juneau/rest/debug/DebugEnablementMap.java      |     2 +-
 .../apache/juneau/rest/httppart/RestPartType.java  |     2 +-
 .../apache/juneau/rest/logger/BasicCallLogger.java |     2 +-
 .../rest/logger/BasicDisabledCallLogger.java       |     2 +-
 .../juneau/rest/logger/BasicTestCallLogger.java    |     2 +-
 .../rest/logger/BasicTestCaptureCallLogger.java    |     2 +-
 .../org/apache/juneau/rest/logger/CallLogger.java  |     2 +-
 .../apache/juneau/rest/logger/CallLoggerRule.java  |     2 +-
 .../juneau/rest/logger/CallLoggingDetail.java      |     2 +-
 .../rest/matcher/MultipartFormDataMatcher.java     |    61 +-
 .../apache/juneau/rest/matcher/RestMatcher.java    |   186 +-
 .../juneau/rest/matcher/RestMatcherList.java       |     2 +-
 .../juneau/rest/matcher/UrlEncodedFormMatcher.java |    62 +-
 .../juneau/rest/servlet/BasicGroupOperations.java  |     2 +-
 .../juneau/rest/servlet/BasicRestObject.java       |   150 +-
 .../juneau/rest/servlet/BasicRestObjectGroup.java  |    99 +-
 .../juneau/rest/servlet/BasicRestOperations.java   |     2 +-
 .../juneau/rest/servlet/BasicRestServlet.java      |   152 +-
 .../juneau/rest/servlet/BasicRestServletGroup.java |   103 +-
 .../org/apache/juneau/rest/servlet/RestObject.java |     2 +-
 .../apache/juneau/rest/servlet/RestServlet.java    |   514 +-
 .../juneau/rest/swagger/BasicSwaggerProvider.java  |     2 +-
 .../rest/swagger/BasicSwaggerProviderSession.java  |     2 +-
 .../juneau/rest/swagger/SwaggerProvider.java       |     2 +-
 .../java/org/apache/juneau/rest/vars/FileVar.java  |     2 +-
 .../apache/juneau/rest/vars/LocalizationVar.java   |     2 +-
 .../juneau/rest/vars/RequestAttributeVar.java      |     2 +-
 .../juneau/rest/vars/RequestFormDataVar.java       |     2 +-
 .../apache/juneau/rest/vars/RequestHeaderVar.java  |     2 +-
 .../apache/juneau/rest/vars/RequestPathVar.java    |     2 +-
 .../apache/juneau/rest/vars/RequestQueryVar.java   |     2 +-
 .../apache/juneau/rest/vars/RequestSwaggerVar.java |     2 +-
 .../org/apache/juneau/rest/vars/RequestVar.java    |     2 +-
 .../juneau/rest/vars/SerializedRequestAttrVar.java |     2 +-
 .../juneau/rest/vars/ServletInitParamVar.java      |     2 +-
 .../org/apache/juneau/rest/vars/SwaggerVar.java    |     2 +-
 .../org/apache/juneau/rest/vars/UrlEncodeVar.java  |     2 +-
 .../java/org/apache/juneau/rest/vars/UrlVar.java   |     2 +-
 .../java/org/apache/juneau/rest/widget/Widget.java |     6 +-
 pom.xml                                            |    24 +
 684 files changed, 66633 insertions(+), 65845 deletions(-)

diff --git a/README.md b/README.md
index e50c0bac2..948d95afb 100644
--- a/README.md
+++ b/README.md
@@ -274,7 +274,7 @@ Apache Juneau™ is a single cohesive Java ecosystem consisting of the following
 
 * **juneau-marshall**	- A universal toolkit for marshalling POJOs to a variety of content types using a common framework with no external library dependencies.
 * **juneau-marshall-rdf**	- Additional support for various RDF languages.
-* **juneau-bean-atom, juneau-bean-common, juneau-bean-html5, juneau-bean-jsonschema, juneau-bean-openapi3**	- A variety of predefined serializable beans such as HTML5, Swagger and ATOM.
+* **juneau-bean-atom, juneau-bean-common, juneau-bean-html5, juneau-bean-jsonschema, juneau-bean-openapi-v3**	- A variety of predefined serializable beans such as HTML5, Swagger and ATOM.
 * **juneau-config**	- A sophisticated configuration file API.
 * **juneau-assertions** - Fluent-style assertions API.
 * **juneau-bct** - Bean-Centric Testing framework that extends JUnit with streamlined assertion methods for Java objects.
@@ -306,7 +306,7 @@ Juneau is packed with features that may not be obvious at first. Users are encou
 * Exhaustively tested
 * Lots of up-to-date documentation and examples
 * Minimal library dependencies:
-   * juneau-marshall, juneau-bean-atom, juneau-bean-common, juneau-bean-html5, juneau-bean-jsonschema, juneau-bean-openapi3, juneau-svl, juneau-config - No external dependencies. Entirely self-contained.
+   * juneau-marshall, juneau-bean-atom, juneau-bean-common, juneau-bean-html5, juneau-bean-jsonschema, juneau-bean-openapi-v3, juneau-svl, juneau-config - No external dependencies. Entirely self-contained.
    * juneau-marshall-rdf - Optional RDF support. Requires Apache Jena 2.7.1+.
    * juneau-rest-server - Any Servlet 3.1.0+ container.
    * juneau-rest-client - Apache HttpClient 4.5+.
diff --git a/ai-contexts/DOCS.md b/ai-contexts/DOCS.md
new file mode 100644
index 000000000..7a35f53f5
--- /dev/null
+++ b/ai-contexts/DOCS.md
@@ -0,0 +1,361 @@
+# Documentation Guidelines for Apache Juneau
+
+This document outlines the documentation conventions, formatting rules, and best practices for the Apache Juneau project.
+
+## Javadoc Formatting Standards
+
+### HTML Tags and Formatting
+
+**Java Variables in Examples**:
+- Wrap local Java variables in `<jv>` tags
+- Example: `<jv>json</jv>`, `<jv>swagger</jv>`, `<jv>result</jv>`
+
+**Static Method References**:
+- Use `<jsm>` tags for static method names
+- Example: `Json.<jsm>from</jsm>(<jv>x</jv>)`
+
+**Static Field References**:
+- Use `<jsf>` tags for static field names
+- Example: `JsonSerializer.<jsf>DEFAULT</jsf>`
+
+**Code Comments**:
+- Use `<jc>` tags for code comments
+- Example: `<jc>// Serialize using JsonSerializer.</jc>`
+
+**Class References**:
+- Use `<jk>` tags for class names in text
+- Example: `<jk>null</jk>`, `<jk>String</jk>`
+
+### Javadoc Structure
+
+**Standard Method Javadoc**:
+```java
+/**
+ * Brief description of what the method does.
+ *
+ * <p>
+ * Longer description if needed, explaining the purpose and behavior.
+ * </p>
+ *
+ * @param paramName Description of the parameter.
+ * @return Description of what is returned.
+ * @throws ExceptionType Description of when this exception is thrown.
+ */
+```
+
+**Property Documentation**:
+```java
+/**
+ * The property name.
+ *
+ * @param value The new value for this property.
+ * @return This object.
+ */
+```
+
+### Parameter Documentation
+
+**Standard Parameters**:
+- Use `value` as the parameter name for fluent setters
+- Document parameter types and constraints
+- Specify when parameters can be null
+
+**Null Parameter Handling**:
+```java
+/**
+ * Sets the property value.
+ *
+ * @param value The new value. Can be <jk>null</jk> to unset the property.
+ * @return This object.
+ */
+```
+
+**Required Parameters**:
+```java
+/**
+ * Sets the property value.
+ *
+ * @param value The new value. Must not be <jk>null</jk>.
+ * @return This object.
+ */
+```
+
+## Link and Reference Standards
+
+### Documentation Links
+
+**Juneau Documentation Site**:
+- Use hardcoded links to `https://juneau.apache.org/docs/topics/`
+- Use slug names as topic names
+- Use page titles for anchor text
+
+**Examples**:
+```java
+/**
+ * <h5 class='section'>See Also:</h5><ul>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
+ * </ul>
+ */
+```
+
+**OpenAPI/Swagger Specification Links**:
+```java
+/**
+ * <a class="doclink" href="https://swagger.io/specification/v2/#operationObject">operation</a> object.
+ */
+```
+
+### Cross-References
+
+**Internal Class References**:
+- Use `{@link ClassName}` for internal class references
+- Use `{@link ClassName#methodName}` for method references
+
+**External References**:
+- Use `<a class="doclink" href="URL">text</a>` for external links
+- Include specification links for OpenAPI/Swagger properties
+
+## Code Examples
+
+### JSON Serialization Examples
+
+**Standard Pattern**:
+```java
+/**
+ * <jc>// Serialize using JsonSerializer.</jc>
+ * String <jv>json</jv> = Json.<jsm>from</jsm>(<jv>x</jv>);
+ *
+ * <jc>// Or just use toString() which does the same as above.</jc>
+ * String <jv>json</jv> = <jv>x</jv>.toString();
+ */
+```
+
+**Consistency Requirements**:
+- Always include both `Json.from()` and `toString()` examples
+- Use consistent variable names (`<jv>json</jv>`, `<jv>x</jv>`)
+- Include explanatory comments
+
+### Method Usage Examples
+
+**Fluent Setter Examples**:
+```java
+/**
+ * <jc>// Create a link element</jc>
+ * A <jv>link</jv> = a().href("https://example.com").target("_blank");
+ */
+```
+
+**Builder Pattern Examples**:
+```java
+/**
+ * <jc>// Create a Swagger document</jc>
+ * Swagger <jv>swagger</jv> = swagger()
+ *     .info(info().title("My API").version("1.0"))
+ *     .path("/users", pathItem().get(operation().summary("Get users")));
+ */
+```
+
+## Property Documentation
+
+### HTML5 Bean Properties
+
+**Standard Attribute Documentation**:
+```java
+/**
+ * <a class="doclink" href="https://www.w3.org/TR/html5/links.html#attr-hyperlink-href">href</a> attribute.
+ *
+ * @param value The URL. Typically a {@link URL} or {@link String}.
+ * @return This object.
+ */
+```
+
+**Boolean Attribute Documentation**:
+```java
+/**
+ * <a class="doclink" href="https://www.w3.org/TR/html5/forms.html#attr-input-readonly">readonly</a> attribute.
+ *
+ * @param value The readonly value.
+ * @return This object.
+ */
+```
+
+### Swagger/OpenAPI Properties
+
+**Standard Property Documentation**:
+```java
+/**
+ * The <a class="doclink" href="https://swagger.io/specification/v2/#operationObject">operation</a> summary.
+ *
+ * @param value A brief description of the operation.
+ * @return This object.
+ */
+```
+
+## Class Documentation
+
+### Class-Level Javadoc
+
+**Standard Structure**:
+```java
+/**
+ * Brief description of the class purpose.
+ *
+ * <h5 class='section'>See Also:</h5><ul>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/ModuleName">module-name</a>
+ * </ul>
+ */
+```
+
+**Builder Classes**:
+```java
+/**
+ * Builder class for creating {@link ClassName} objects.
+ *
+ * <p>
+ * This class provides fluent methods for building complex objects.
+ * </p>
+ */
+```
+
+## Validation and Error Documentation
+
+### Parameter Validation
+
+**Null Parameter Validation**:
+```java
+/**
+ * Sets the property value.
+ *
+ * @param value The new value. Must not be <jk>null</jk>.
+ * @throws IllegalArgumentException If value is <jk>null</jk>.
+ * @return This object.
+ */
+```
+
+**String Validation**:
+```java
+/**
+ * Sets the property value.
+ *
+ * @param value The new value. Must not be <jk>null</jk> or blank.
+ * @throws IllegalArgumentException If value is <jk>null</jk> or blank.
+ * @return This object.
+ */
+```
+
+### Strict Mode Documentation
+
+**Strict Mode Behavior**:
+```java
+/**
+ * Sets the property value.
+ *
+ * <p>
+ * In strict mode, invalid values will throw {@link RuntimeException}.
+ * In non-strict mode, invalid values are ignored.
+ * </p>
+ *
+ * @param value The new value.
+ * @return This object.
+ */
+```
+
+## Special Cases
+
+### Constructor Documentation
+
+**Standard Constructor**:
+```java
+/**
+ * Constructor.
+ *
+ * @param children The child nodes.
+ */
+public ClassName(Object...children) {
+```
+
+**Parameterized Constructor**:
+```java
+/**
+ * Constructor.
+ *
+ * @param param1 Description of first parameter.
+ * @param param2 Description of second parameter.
+ */
+public ClassName(Type1 param1, Type2 param2) {
+```
+
+### Override Documentation
+
+**Method Overrides**:
+```java
+@Override /* GENERATED - org.apache.juneau.bean.html5.HtmlElement */
+public ClassName methodName(Type value) {
+```
+
+**Interface Implementations**:
+```java
+@Override /* GENERATED - org.apache.juneau.bean.html5.HtmlElement */
+public ClassName methodName(Type value) {
+```
+
+## Best Practices
+
+### Consistency
+- Use consistent parameter names (`value` for fluent setters)
+- Use consistent variable names in examples
+- Use consistent link formatting
+
+### Completeness
+- Document all public methods and constructors
+- Include parameter types and constraints
+- Include return value descriptions
+- Include exception documentation
+
+### Clarity
+- Use clear, concise descriptions
+- Include practical examples
+- Link to relevant specifications
+- Explain complex behavior
+
+### Maintenance
+- Keep documentation up-to-date with code changes
+- Use consistent formatting throughout
+- Include cross-references where helpful
+- Document edge cases and special behavior
+
+## Common Patterns
+
+### Fluent Setter Documentation
+```java
+/**
+ * Sets the property value.
+ *
+ * @param value The new value for this property.
+ * @return This object.
+ */
+public ClassName property(Type value) {
+```
+
+### Collection Setter Documentation
+```java
+/**
+ * Sets the collection of items.
+ *
+ * @param value The new collection. Can be <jk>null</jk> to unset the property.
+ * @return This object.
+ */
+public ClassName items(Collection<Item> value) {
+```
+
+### Builder Method Documentation
+```java
+/**
+ * Creates a new instance.
+ *
+ * @return A new instance.
+ */
+public static ClassName create() {
+```
+
+This document serves as the definitive guide for documentation in the Apache Juneau project, ensuring consistency, completeness, and clarity across all documentation.
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi/ui/OpenApiUI.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi/ui/OpenApiUI.java
index 4b2ea305a..f5a364fe4 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi/ui/OpenApiUI.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi/ui/OpenApiUI.java
@@ -30,7 +30,7 @@ import org.apache.juneau.swap.*;
  * Generates an OpenAPI-UI interface from an OpenAPI document.
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 public class OpenApiUI extends ObjectSwap<OpenApi,Div> {
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Callback.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Callback.java
index 1c1e023e3..d2812dc50 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Callback.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Callback.java
@@ -62,7 +62,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#callback-object">OpenAPI Specification &gt; Callback Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/callbacks/">OpenAPI Callbacks</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Components.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Components.java
index 00e2365b3..04311c470 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Components.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Components.java
@@ -74,7 +74,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#components-object">OpenAPI Specification &gt; Components Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/components/">OpenAPI Components</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Contact.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Contact.java
index 747b9fe4e..fe534ff3c 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Contact.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Contact.java
@@ -63,7 +63,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#contact-object">OpenAPI Specification &gt; Contact Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/api-general-info/">OpenAPI API General Info</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Discriminator.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Discriminator.java
index 3dc527b42..bd813e7a3 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Discriminator.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Discriminator.java
@@ -65,7 +65,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#discriminator-object">OpenAPI Specification &gt; Discriminator Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/data-models/inheritance-and-polymorphism/">OpenAPI Inheritance and Polymorphism</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Encoding.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Encoding.java
index 9c0975fba..5280b7655 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Encoding.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Encoding.java
@@ -67,7 +67,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#encoding-object">OpenAPI Specification &gt; Encoding Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/describing-request-body/">OpenAPI Describing Request Body</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Example.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Example.java
index 2ff42cc77..4d0da4630 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Example.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Example.java
@@ -64,7 +64,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#example-object">OpenAPI Specification &gt; Example Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/adding-examples/">OpenAPI Adding Examples</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/ExternalDocumentation.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/ExternalDocumentation.java
index 41690f767..d8b361972 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/ExternalDocumentation.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/ExternalDocumentation.java
@@ -51,7 +51,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#external-documentation-object">OpenAPI Specification &gt; External Documentation Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/external-documentation/">OpenAPI External Documentation</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/HeaderInfo.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/HeaderInfo.java
index 1550ab636..382421368 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/HeaderInfo.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/HeaderInfo.java
@@ -68,7 +68,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#header-object">OpenAPI Specification &gt; Header Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/describing-parameters/">OpenAPI Describing Parameters</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Info.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Info.java
index 14a7db346..42c1a5ea1 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Info.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Info.java
@@ -91,7 +91,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#info-object">OpenAPI Specification &gt; Info Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/api-general-info/">OpenAPI API General Info</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Items.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Items.java
index 890008349..b5baaf2a8 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Items.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Items.java
@@ -73,7 +73,7 @@ import org.apache.juneau.json.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#items-object">OpenAPI Specification &gt; Items Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/describing-parameters/">OpenAPI Describing Parameters</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/License.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/License.java
index 08d0956f5..b1655fcf3 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/License.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/License.java
@@ -61,7 +61,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#license-object">OpenAPI Specification &gt; License Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/api-general-info/">OpenAPI API General Info</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Link.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Link.java
index a0b2c1bf8..f942d713a 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Link.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Link.java
@@ -55,7 +55,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#link-object">OpenAPI Specification &gt; Link Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/links/">OpenAPI Links</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/MediaType.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/MediaType.java
index b36e19cb8..ecc03d544 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/MediaType.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/MediaType.java
@@ -60,7 +60,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#media-type-object">OpenAPI Specification &gt; Media Type Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/media-types/">OpenAPI Media Types</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OAuthFlow.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OAuthFlow.java
index 283dbad9b..79d707734 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OAuthFlow.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OAuthFlow.java
@@ -68,7 +68,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#oauth-flow-object">OpenAPI Specification &gt; OAuth Flow Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/authentication/oauth2/">OpenAPI OAuth2 Authentication</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OAuthFlows.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OAuthFlows.java
index 1d47647be..195704673 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OAuthFlows.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OAuthFlows.java
@@ -65,7 +65,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#oauth-flows-object">OpenAPI Specification &gt; OAuth Flows Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/authentication/oauth2/">OpenAPI OAuth2 Authentication</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApi.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApi.java
index 53359a6e8..7a820711e 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApi.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApi.java
@@ -70,7 +70,7 @@ import org.apache.juneau.objecttools.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#openapi-object">OpenAPI Specification &gt; OpenAPI Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/basic-structure/">OpenAPI Basic Structure</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApiBuilder.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApiBuilder.java
index 1ababa07e..e65806f17 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApiBuilder.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApiBuilder.java
@@ -21,7 +21,7 @@ import org.apache.juneau.common.internal.*;
  * Various useful static methods for creating OpenAPI elements.
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 public class OpenApiBuilder {
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Operation.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Operation.java
index 98032c98f..b10158eeb 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Operation.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Operation.java
@@ -82,7 +82,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#operation-object">OpenAPI Specification &gt; Operation Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/paths-and-operations/">OpenAPI Paths and Operations</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Parameter.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Parameter.java
index 02af065f8..c4ea8636e 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Parameter.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Parameter.java
@@ -71,7 +71,7 @@ import org.apache.juneau.marshaller.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#parameter-object">OpenAPI Specification &gt; Parameter Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/describing-parameters/">OpenAPI Describing Parameters</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/PathItem.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/PathItem.java
index e180171b1..82731d101 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/PathItem.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/PathItem.java
@@ -73,7 +73,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#path-item-object">OpenAPI Specification &gt; Path Item Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/paths-and-operations/">OpenAPI Paths and Operations</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/RequestBodyInfo.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/RequestBodyInfo.java
index eb394d4ff..ff0902c0a 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/RequestBodyInfo.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/RequestBodyInfo.java
@@ -58,7 +58,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#request-body-object">OpenAPI Specification &gt; Request Body Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/describing-request-body/">OpenAPI Describing Request Body</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Response.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Response.java
index b2343e3b0..70d21422e 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Response.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Response.java
@@ -68,7 +68,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#response-object">OpenAPI Specification &gt; Response Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/describing-responses/">OpenAPI Describing Responses</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/SchemaInfo.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/SchemaInfo.java
index f686be828..e2c6c606a 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/SchemaInfo.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/SchemaInfo.java
@@ -89,7 +89,7 @@ import org.apache.juneau.internal.*;
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#schema-object">OpenAPI Specification &gt; Schema Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/data-models/">OpenAPI Data Models</a>
  * 	<li class='link'><a class="doclink" href="https://json-schema.org/">JSON Schema Specification</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/SecurityRequirement.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/SecurityRequirement.java
index d08f207f7..a43a931f2 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/SecurityRequirement.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/SecurityRequirement.java
@@ -24,7 +24,7 @@ import org.apache.juneau.internal.*;
  * Lists the required security schemes for this operation.
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/SecuritySchemeInfo.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/SecuritySchemeInfo.java
index ee9792ee9..310883430 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/SecuritySchemeInfo.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/SecuritySchemeInfo.java
@@ -78,7 +78,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#security-scheme-object">OpenAPI Specification &gt; Security Scheme Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/authentication/">OpenAPI Authentication</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Server.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Server.java
index bd789bd24..65bd70f14 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Server.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Server.java
@@ -64,7 +64,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#server-object">OpenAPI Specification &gt; Server Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/api-host-and-base-path/">OpenAPI API Host and Base Path</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/ServerVariable.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/ServerVariable.java
index 5ae9b0b40..5fa844667 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/ServerVariable.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/ServerVariable.java
@@ -64,7 +64,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#server-variable-object">OpenAPI Specification &gt; Server Variable Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/api-host-and-base-path/">OpenAPI API Host and Base Path</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Tag.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Tag.java
index 19ac10253..70a147ae3 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Tag.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Tag.java
@@ -62,7 +62,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#tag-object">OpenAPI Specification &gt; Tag Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/grouping-operations-with-tags/">OpenAPI Grouping Operations with Tags</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Xml.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Xml.java
index 8627a3dd7..a795f096b 100644
--- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Xml.java
+++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Xml.java
@@ -62,7 +62,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://spec.openapis.org/oas/v3.0.0#xml-object">OpenAPI Specification &gt; XML Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/data-models/representing-xml/">OpenAPI Representing XML</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi3</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanOpenApi3">juneau-bean-openapi-v3</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Contact.java b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Contact.java
index 21eebadbc..7508b88a4 100644
--- a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Contact.java
+++ b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Contact.java
@@ -62,7 +62,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/specification/v2/#contact-object">Swagger 2.0 Specification &gt; Contact Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/2-0/api-general-info/">Swagger API General Info</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger2</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ExternalDocumentation.java b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ExternalDocumentation.java
index d2a7fd8dc..0076c494a 100644
--- a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ExternalDocumentation.java
+++ b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ExternalDocumentation.java
@@ -61,7 +61,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/specification/v2/#external-documentation-object">Swagger 2.0 Specification &gt; External Documentation Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/2-0/external-documentation/">Swagger External Documentation</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger2</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/HeaderInfo.java b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/HeaderInfo.java
index b78cbe980..d6d96af62 100644
--- a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/HeaderInfo.java
+++ b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/HeaderInfo.java
@@ -71,7 +71,7 @@ import org.apache.juneau.marshaller.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/specification/v2/#header-object">Swagger 2.0 Specification &gt; Header Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/2-0/describing-responses/">Swagger Describing Responses</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger2</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Info.java b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Info.java
index d76d00b1c..b9cb24fc2 100644
--- a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Info.java
+++ b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Info.java
@@ -82,7 +82,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/specification/v2/#info-object">Swagger 2.0 Specification &gt; Info Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/2-0/api-general-info/">Swagger API General Info</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger2</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Items.java b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Items.java
index 7a07c6871..2e207c747 100644
--- a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Items.java
+++ b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Items.java
@@ -70,7 +70,7 @@ import org.apache.juneau.marshaller.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/specification/v2/#items-object">Swagger 2.0 Specification &gt; Items Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/2-0/describing-parameters/">Swagger Describing Parameters</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger2</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/License.java b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/License.java
index 7421d61ce..7442af898 100644
--- a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/License.java
+++ b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/License.java
@@ -60,7 +60,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/specification/v2/#license-object">Swagger 2.0 Specification &gt; License Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/2-0/api-general-info/">Swagger API General Info</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger2</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Operation.java b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Operation.java
index ffb9ef52d..5c529f94d 100644
--- a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Operation.java
+++ b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Operation.java
@@ -149,7 +149,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/specification/v2/#operation-object">Swagger 2.0 Specification &gt; Operation Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/2-0/paths-and-operations/">Swagger Paths and Operations</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger2</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/OperationMap.java b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/OperationMap.java
index 895a34d69..567e6c2d4 100644
--- a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/OperationMap.java
+++ b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/OperationMap.java
@@ -78,7 +78,7 @@ import org.apache.juneau.common.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/specification/v2/#path-item-object">Swagger 2.0 Specification &gt; Path Item Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/2-0/paths-and-operations/">Swagger Paths and Operations</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger2</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
  * </ul>
  *
  * @serial exclude
diff --git a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ParameterInfo.java b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ParameterInfo.java
index 1a6964566..de6774ea2 100644
--- a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ParameterInfo.java
+++ b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ParameterInfo.java
@@ -115,7 +115,7 @@ import org.apache.juneau.marshaller.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/specification/v2/#parameter-object">Swagger 2.0 Specification &gt; Parameter Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/2-0/describing-parameters/">Swagger Describing Parameters</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger2</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ResponseInfo.java b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ResponseInfo.java
index 471f520bc..77741f82f 100644
--- a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ResponseInfo.java
+++ b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ResponseInfo.java
@@ -73,7 +73,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/specification/v2/#response-object">Swagger 2.0 Specification &gt; Response Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/2-0/describing-responses/">Swagger Describing Responses</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger2</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SchemaInfo.java b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SchemaInfo.java
index 35c4c965f..a6e355dda 100644
--- a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SchemaInfo.java
+++ b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SchemaInfo.java
@@ -89,7 +89,7 @@ import org.apache.juneau.internal.*;
  * 	<li class='link'><a class="doclink" href="https://swagger.io/specification/v2/#schema-object">Swagger 2.0 Specification &gt; Schema Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/2-0/data-models/">Swagger Data Models</a>
  * 	<li class='link'><a class="doclink" href="https://json-schema.org/">JSON Schema Specification</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger2</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SecurityScheme.java b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SecurityScheme.java
index 0820616a1..f0eb4ad20 100644
--- a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SecurityScheme.java
+++ b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SecurityScheme.java
@@ -76,7 +76,7 @@ import org.apache.juneau.marshaller.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/specification/v2/#security-scheme-object">Swagger 2.0 Specification &gt; Security Scheme Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/2-0/authentication/">Swagger Authentication</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger2</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Swagger.java b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Swagger.java
index 97b5d01ef..709a09e76 100644
--- a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Swagger.java
+++ b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Swagger.java
@@ -78,7 +78,7 @@ import org.apache.juneau.objecttools.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/specification/v2/">Swagger 2.0 Specification</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/2-0/basic-structure/">Swagger Basic Structure</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger2</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SwaggerBuilder.java b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SwaggerBuilder.java
index 2628182d1..c9c98c84c 100644
--- a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SwaggerBuilder.java
+++ b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SwaggerBuilder.java
@@ -21,7 +21,7 @@ import org.apache.juneau.common.internal.*;
  * Various useful static methods for creating Swagger elements.
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger2</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
  * </ul>
  */
 public class SwaggerBuilder {
diff --git a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SwaggerElement.java b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SwaggerElement.java
index a130dc164..7ac091e76 100644
--- a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SwaggerElement.java
+++ b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SwaggerElement.java
@@ -28,7 +28,7 @@ import org.apache.juneau.json.*;
  * Root class for all Swagger beans.
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger2</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Tag.java b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Tag.java
index f0a75e03a..deb533691 100644
--- a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Tag.java
+++ b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Tag.java
@@ -62,7 +62,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/specification/v2/#tag-object">Swagger 2.0 Specification &gt; Tag Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/2-0/grouping-operations-with-tags/">Swagger Grouping Operations with Tags</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger2</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Xml.java b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Xml.java
index f6c960cd3..1f17a4a9b 100644
--- a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Xml.java
+++ b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Xml.java
@@ -64,7 +64,7 @@ import org.apache.juneau.internal.*;
  * <h5 class='section'>See Also:</h5><ul>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/specification/v2/#xml-object">Swagger 2.0 Specification &gt; XML Object</a>
  * 	<li class='link'><a class="doclink" href="https://swagger.io/docs/specification/2-0/describing-models/">Swagger Describing Models</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger2</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ui/SwaggerUI.java b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ui/SwaggerUI.java
index 74c9c76e5..d78a5d54e 100644
--- a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ui/SwaggerUI.java
+++ b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ui/SwaggerUI.java
@@ -30,7 +30,7 @@ import org.apache.juneau.swap.*;
  * Generates a Swagger-UI interface from a Swagger document.
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger2</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
  * </ul>
  */
 public class SwaggerUI extends ObjectSwap<Swagger,Div> {
diff --git a/juneau-check-topic-links.py b/juneau-check-topic-links.py
new file mode 100644
index 000000000..e2f1bf6f8
--- /dev/null
+++ b/juneau-check-topic-links.py
@@ -0,0 +1,187 @@
+#!/usr/bin/env python3
+"""
+Script to check for correct topic links in the Juneau source tree.
+
+This script:
+1. Scans /juneau-docs/docs/topics for all markdown files
+2. Extracts slug names and titles from the frontmatter
+3. Scans the entire source tree for links to https://juneau.apache.org/docs/topics/SLUG">TITLE</a>
+4. Reports any mismatches between expected and actual slug/title combinations
+"""
+
+import os
+import re
+import sys
+from pathlib import Path
+
+def extract_topic_info(docs_dir):
+    """Extract slug and title information from all topic markdown files."""
+    topics = {}
+    topics_dir = Path(docs_dir) / "docs" / "topics"
+    
+    if not topics_dir.exists():
+        print(f"ERROR: Topics directory not found: {topics_dir}")
+        return topics
+    
+    for md_file in topics_dir.glob("*.md"):
+        if md_file.name == "README.md":
+            continue
+            
+        try:
+            with open(md_file, 'r', encoding='utf-8') as f:
+                content = f.read()
+            
+            # Extract frontmatter
+            frontmatter_match = re.search(r'^---\n(.*?)\n---', content, re.DOTALL)
+            if frontmatter_match:
+                frontmatter = frontmatter_match.group(1)
+                
+                # Extract title and slug
+                title_match = re.search(r'^title:\s*["\']?([^"\']+)["\']?', frontmatter, re.MULTILINE)
+                slug_match = re.search(r'^slug:\s*([^\s]+)', frontmatter, re.MULTILINE)
+                
+                if title_match and slug_match:
+                    title = title_match.group(1).strip()
+                    slug = slug_match.group(1).strip()
+                    topics[slug] = title
+                    print(f"Found topic: {slug} -> {title}")
+                else:
+                    print(f"WARNING: Could not extract title/slug from {md_file.name}")
+            else:
+                print(f"WARNING: No frontmatter found in {md_file.name}")
+                
+        except Exception as e:
+            print(f"ERROR: Failed to process {md_file.name}: {e}")
+    
+    return topics
+
+def find_topic_links(source_dir):
+    """Find all topic links in the source tree."""
+    links = []
+    
+    # Pattern to match topic links
+    link_pattern = re.compile(r'https://juneau\.apache\.org/docs/topics/([^"]+)">([^<]+)</a>')
+    
+    # File extensions to search
+    extensions = {'.java', '.md', '.xml', '.properties', '.txt', '.adoc', '.rst'}
+    
+    for root, dirs, files in os.walk(source_dir):
+        # Skip certain directories
+        dirs[:] = [d for d in dirs if not d.startswith('.') and d not in {'target', 'node_modules', 'build', 'dist'}]
+        
+        for file in files:
+            # Skip report files generated by this script
+            if file.startswith('topic-link-check-') and file.endswith('.txt'):
+                continue
+                
+            if any(file.endswith(ext) for ext in extensions):
+                file_path = Path(root) / file
+                try:
+                    with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:
+                        content = f.read()
+                        for match in link_pattern.finditer(content):
+                            slug = match.group(1)
+                            title = match.group(2)
+                            links.append({
+                                'file': str(file_path.relative_to(source_dir)),
+                                'line': content[:match.start()].count('\n') + 1,
+                                'slug': slug,
+                                'title': title,
+                                'full_match': match.group(0)
+                            })
+                except Exception as e:
+                    print(f"ERROR: Failed to process {file_path}: {e}")
+    
+    return links
+
+def check_links(links, topics):
+    """Check if the found links match the expected slug/title combinations."""
+    warnings = []
+    
+    for link in links:
+        slug = link['slug']
+        title = link['title']
+        
+        if slug in topics:
+            expected_title = topics[slug]
+            if title != expected_title:
+                warnings.append({
+                    'type': 'title_mismatch',
+                    'file': link['file'],
+                    'line': link['line'],
+                    'slug': slug,
+                    'expected_title': expected_title,
+                    'actual_title': title,
+                    'full_match': link['full_match']
+                })
+        else:
+            warnings.append({
+                'type': 'unknown_slug',
+                'file': link['file'],
+                'line': link['line'],
+                'slug': slug,
+                'title': title,
+                'full_match': link['full_match']
+            })
+    
+    return warnings
+
+def main():
+    # Get the script directory (should be /juneau)
+    script_dir = Path(__file__).parent
+    juneau_root = script_dir
+    docs_dir = script_dir / "juneau-docs"
+    
+    print("Juneau Topic Link Checker")
+    print("=" * 50)
+    
+    # Extract topic information
+    print("\nExtracting topic information from juneau-docs...")
+    topics = extract_topic_info(docs_dir)
+    
+    if not topics:
+        print("ERROR: No topics found. Check if juneau-docs directory exists and contains topic files.")
+        sys.exit(1)
+    
+    print(f"\nFound {len(topics)} topics")
+    
+    # Find all topic links
+    print("\nScanning source tree for topic links...")
+    links = find_topic_links(juneau_root)
+    
+    print(f"Found {len(links)} topic links")
+    
+    # Check for issues
+    print("\nChecking links for issues...")
+    warnings = check_links(links, topics)
+    
+    # Report results
+    if warnings:
+        print(f"\nWARNINGS ({len(warnings)} found):")
+        print("=" * 50)
+        
+        for warning in warnings:
+            if warning['type'] == 'title_mismatch':
+                print(f"TITLE MISMATCH:")
+                print(f"  File: {warning['file']}:{warning['line']}")
+                print(f"  Slug: {warning['slug']}")
+                print(f"  Expected title: '{warning['expected_title']}'")
+                print(f"  Actual title:   '{warning['actual_title']}'")
+                print(f"  Link: {warning['full_match']}")
+                print()
+            elif warning['type'] == 'unknown_slug':
+                print(f"UNKNOWN SLUG:")
+                print(f"  File: {warning['file']}:{warning['line']}")
+                print(f"  Slug: {warning['slug']}")
+                print(f"  Title: '{warning['title']}'")
+                print(f"  Link: {warning['full_match']}")
+                print()
+        
+        print(f"Total warnings: {len(warnings)}")
+        sys.exit(1)
+    else:
+        print("\nâś“ All topic links are correct!")
+        sys.exit(0)
+
+if __name__ == "__main__":
+    main()
diff --git a/juneau-check-topic-links.sh b/juneau-check-topic-links.sh
new file mode 100755
index 000000000..45c036eb1
--- /dev/null
+++ b/juneau-check-topic-links.sh
@@ -0,0 +1,49 @@
+#!/bin/bash
+
+# Juneau Topic Link Checker
+# This script runs the Python script to check for correct topic links
+
+set -e
+
+# Get the directory where this script is located
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+
+# Change to the juneau root directory
+cd "$SCRIPT_DIR"
+
+# Check if Python 3 is available
+if ! command -v python3 &> /dev/null; then
+    echo "ERROR: python3 is not installed or not in PATH"
+    exit 1
+fi
+
+# Check if the Python script exists
+PYTHON_SCRIPT="$SCRIPT_DIR/juneau-check-topic-links.py"
+if [ ! -f "$PYTHON_SCRIPT" ]; then
+    echo "ERROR: Python script not found: $PYTHON_SCRIPT"
+    exit 1
+fi
+
+# Check if juneau-docs directory exists
+if [ ! -d "$SCRIPT_DIR/juneau-docs" ]; then
+    echo "ERROR: juneau-docs directory not found: $SCRIPT_DIR/juneau-docs"
+    echo "Make sure you're running this from the juneau root directory"
+    exit 1
+fi
+
+echo "Running Juneau Topic Link Checker..."
+echo "Script directory: $SCRIPT_DIR"
+echo "Python script: $PYTHON_SCRIPT"
+echo
+
+# Generate output filename with timestamp
+OUTPUT_FILE="topic-link-check-$(date +%Y%m%d-%H%M%S).txt"
+
+echo "Output will be saved to: $OUTPUT_FILE"
+echo
+
+# Run the Python script and tee output to file
+python3 "$PYTHON_SCRIPT" 2>&1 | tee "$OUTPUT_FILE"
+
+# Exit with the same code as the Python script
+exit ${PIPESTATUS[0]}
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AnyAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AnyAssertion.java
index 3ca1a69d2..41e877d0c 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AnyAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AnyAssertion.java
@@ -123,7 +123,7 @@ import org.apache.juneau.serializer.*;
  *
  * <h5 class='section'>See Also:</h5>
  * <ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <T> The object type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ArrayAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ArrayAssertion.java
index 4db85069d..b876152dc 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ArrayAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ArrayAssertion.java
@@ -106,7 +106,7 @@ import org.apache.juneau.serializer.*;
  *
  * <h5 class='section'>See Also:</h5>
  * <ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <E> The element type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertion.java
index 089b10970..9351253b2 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertion.java
@@ -50,7 +50,7 @@ import org.apache.juneau.internal.*;
  * </ul>
  *
  * <ul class='seealso'>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  */
 @FluentSetters
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicate.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicate.java
index e40096f86..d7999ddfa 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicate.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicate.java
@@ -49,7 +49,7 @@ import org.apache.juneau.cp.*;
  *
  * <h5 class='section'>See Also:</h5>
  * <ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <T> the type of input being tested.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicates.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicates.java
index 5ac1a1a87..7d8da4971 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicates.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicates.java
@@ -43,7 +43,7 @@ import org.apache.juneau.cp.*;
  *
  * <h5 class='section'>See Also:</h5>
  * <ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  */
 public class AssertionPredicates {
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertions.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertions.java
index caebc5400..aec6b9910 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertions.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertions.java
@@ -66,7 +66,7 @@ import org.apache.juneau.common.utils.*;
  *
  * <h5 class='section'>See Also:</h5>
  * <ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  */
 public class Assertions {
@@ -102,7 +102,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link AnyAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link AnyAssertion} for supported operations on this type.
 	 *
 	 * @param <T> The value type.
 	 * @param value
@@ -130,7 +130,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link ArrayAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link ArrayAssertion} for supported operations on this type.
 	 *
 	 * @param <E> The value element type.
 	 * @param value
@@ -159,7 +159,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link BeanAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link BeanAssertion} for supported operations on this type.
 	 *
 	 * @param <T> The value type.
 	 * @param value
@@ -188,7 +188,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link BeanListAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link BeanListAssertion} for supported operations on this type.
 	 *
 	 * @param <E> The element type.
 	 * @param value
@@ -215,7 +215,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link BooleanAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link BooleanAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -242,7 +242,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -274,7 +274,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -305,7 +305,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link ByteArrayAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link ByteArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -331,7 +331,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link ByteArrayAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link ByteArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -359,7 +359,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -390,7 +390,7 @@ public class Assertions {
 	 * provides more functionality than {@link CollectionAssertion}.
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link CollectionAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link CollectionAssertion} for supported operations on this type.
 	 *
 	 * @param <E> The element type.
 	 * @param value
@@ -417,7 +417,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link ComparableAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link ComparableAssertion} for supported operations on this type.
 	 *
 	 * @param <T> The value type.
 	 * @param value
@@ -444,7 +444,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link DateAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link DateAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -471,7 +471,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -498,7 +498,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -525,7 +525,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -551,7 +551,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link IntegerAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link IntegerAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -578,7 +578,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link ListAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link ListAssertion} for supported operations on this type.
 	 *
 	 * @param <E> The element type.
 	 * @param value
@@ -606,7 +606,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link ListAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link ListAssertion} for supported operations on this type.
 	 *
 	 * @param <E> The element type.
 	 * @param value
@@ -635,7 +635,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link LongAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link LongAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -662,7 +662,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -689,7 +689,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link MapAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link MapAssertion} for supported operations on this type.
 	 *
 	 * @param <K> The key type.
 	 * @param <V> The value type.
@@ -719,7 +719,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link ObjectAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link ObjectAssertion} for supported operations on this type.
 	 *
 	 * @param <T> The value type.
 	 * @param value
@@ -748,7 +748,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link AnyAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link AnyAssertion} for supported operations on this type.
 	 *
 	 * @param <T> The value type.
 	 * @param value
@@ -775,7 +775,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link StringAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link StringAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -804,7 +804,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link PrimitiveArrayAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -831,7 +831,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link StringAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link StringAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -862,7 +862,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link StringListAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link StringListAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -889,7 +889,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link ThrowableAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link ThrowableAssertion} for supported operations on this type.
 	 *
 	 * @param <T> The value type.
 	 * @param value
@@ -916,7 +916,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link VersionAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link VersionAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
@@ -942,7 +942,7 @@ public class Assertions {
 	 * </p>
 	 *
 	 * <p>
-	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a> for general assertion usage and {@link ZonedDateTimeAssertion} for supported operations on this type.
+	 * See <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a> for general assertion usage and {@link ZonedDateTimeAssertion} for supported operations on this type.
 	 *
 	 * @param value
 	 * 	The object being tested.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BeanAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BeanAssertion.java
index 92c8725f1..908bc5915 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BeanAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BeanAssertion.java
@@ -89,7 +89,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <T> The bean type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BeanListAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BeanListAssertion.java
index 51f603192..99ff04e42 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BeanListAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BeanListAssertion.java
@@ -119,7 +119,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <E> The bean type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BooleanAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BooleanAssertion.java
index e46299a0a..eca0ce186 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BooleanAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/BooleanAssertion.java
@@ -87,7 +87,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  */
 @FluentSetters(returns="BooleanAssertion")
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ByteArrayAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ByteArrayAssertion.java
index 90aa58611..932ac085f 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ByteArrayAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ByteArrayAssertion.java
@@ -107,7 +107,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  */
 @FluentSetters(returns="ByteArrayAssertion")
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/CollectionAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/CollectionAssertion.java
index a63c73781..5c916e45d 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/CollectionAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/CollectionAssertion.java
@@ -96,7 +96,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <E> The element type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ComparableAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ComparableAssertion.java
index 3f0630e45..fbe009c5a 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ComparableAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ComparableAssertion.java
@@ -82,7 +82,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <T> The comparable type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/DateAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/DateAssertion.java
index 6b9303298..da4757ea9 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/DateAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/DateAssertion.java
@@ -104,7 +104,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  */
 @FluentSetters(returns="DateAssertion")
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentAnyAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentAnyAssertion.java
index 3aca20c12..e19dc8b7f 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentAnyAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentAnyAssertion.java
@@ -126,7 +126,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <T> The object type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentArrayAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentArrayAssertion.java
index a39da2d3b..cec179c44 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentArrayAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentArrayAssertion.java
@@ -104,7 +104,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <E> The entry type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentAssertion.java
index 57e252222..9abc30f83 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentAssertion.java
@@ -75,7 +75,7 @@ import org.apache.juneau.internal.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <R> The return type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java
index f41eb889c..74468fa2d 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java
@@ -84,7 +84,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <T> The bean type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanListAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanListAssertion.java
index f4ac2e5d7..35402d293 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanListAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanListAssertion.java
@@ -112,7 +112,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <E> The bean type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBooleanAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBooleanAssertion.java
index fa5e00c36..477b3d768 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBooleanAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBooleanAssertion.java
@@ -89,7 +89,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <R> The return type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentByteArrayAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentByteArrayAssertion.java
index 75328aca9..4750eac3b 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentByteArrayAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentByteArrayAssertion.java
@@ -103,7 +103,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <R> The return type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentCollectionAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentCollectionAssertion.java
index 7e82e8492..70a237c71 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentCollectionAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentCollectionAssertion.java
@@ -94,7 +94,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <E> The element type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentComparableAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentComparableAssertion.java
index 98b53ddce..b453618f2 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentComparableAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentComparableAssertion.java
@@ -84,7 +84,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <T> The value type
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentDateAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentDateAssertion.java
index 5099f6097..fda8a5034 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentDateAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentDateAssertion.java
@@ -110,7 +110,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <R> The return type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentIntegerAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentIntegerAssertion.java
index 9ea9b93ea..fa97da74c 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentIntegerAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentIntegerAssertion.java
@@ -93,7 +93,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <R> The return type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentListAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentListAssertion.java
index 8f0300871..dff0e9b34 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentListAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentListAssertion.java
@@ -110,7 +110,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <E> The element type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentLongAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentLongAssertion.java
index 5c237ceb3..cb9503b72 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentLongAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentLongAssertion.java
@@ -97,7 +97,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <R> The return type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentMapAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentMapAssertion.java
index 521dee4c2..f5c991054 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentMapAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentMapAssertion.java
@@ -95,7 +95,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <K> The key type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
index 9b7930d59..2a9b793c2 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
@@ -83,7 +83,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <T> The object type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentPrimitiveArrayAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentPrimitiveArrayAssertion.java
index bf4d35191..420dd9c49 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentPrimitiveArrayAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentPrimitiveArrayAssertion.java
@@ -98,7 +98,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <E> The array element type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringAssertion.java
index e8bb87ec3..c44fb2a8a 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringAssertion.java
@@ -122,7 +122,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <R> The return type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringListAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringListAssertion.java
index 4d7eaa75b..28bf9ab27 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringListAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringListAssertion.java
@@ -115,7 +115,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <R> The return type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java
index 542d2d007..2cecb0021 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java
@@ -92,7 +92,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <T> The throwable type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentVersionAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentVersionAssertion.java
index ae42fc766..6deaf577b 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentVersionAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentVersionAssertion.java
@@ -100,7 +100,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <R> The return type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentZonedDateTimeAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentZonedDateTimeAssertion.java
index 6eb6922b2..83f3bdc94 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentZonedDateTimeAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentZonedDateTimeAssertion.java
@@ -105,7 +105,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <R> The return type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/IntegerAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/IntegerAssertion.java
index 3929939db..b67cf9c77 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/IntegerAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/IntegerAssertion.java
@@ -88,7 +88,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  */
 @FluentSetters(returns="IntegerAssertion")
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ListAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ListAssertion.java
index 100f85ea6..2e5b913da 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ListAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ListAssertion.java
@@ -113,7 +113,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <E> The element type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/LongAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/LongAssertion.java
index e15715dbc..42cd74103 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/LongAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/LongAssertion.java
@@ -93,7 +93,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  */
 @FluentSetters(returns="LongAssertion")
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/MapAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/MapAssertion.java
index 4cfcafcb3..30291cda6 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/MapAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/MapAssertion.java
@@ -97,7 +97,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <K> The map key type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ObjectAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ObjectAssertion.java
index 1b0519983..59fb2b7b1 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ObjectAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ObjectAssertion.java
@@ -81,7 +81,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <T> The object type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/PrimitiveArrayAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/PrimitiveArrayAssertion.java
index f75682494..e5cb95cae 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/PrimitiveArrayAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/PrimitiveArrayAssertion.java
@@ -98,7 +98,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <E> The array element type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/StringAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/StringAssertion.java
index af840852c..a501746f7 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/StringAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/StringAssertion.java
@@ -114,7 +114,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  */
 @FluentSetters(returns="StringAssertion")
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/StringListAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/StringListAssertion.java
index 054f26d63..74e1d0b5a 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/StringListAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/StringListAssertion.java
@@ -112,7 +112,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  */
 @FluentSetters(returns="StringListAssertion")
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ThrowableAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ThrowableAssertion.java
index a94611a8b..17ee40355 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ThrowableAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ThrowableAssertion.java
@@ -92,7 +92,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  *
  * @param <T> The throwable type.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Verify.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Verify.java
index 0ff798c80..3563ea9dc 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Verify.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Verify.java
@@ -33,7 +33,7 @@ import org.apache.juneau.cp.*;
  * </p>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  */
 public class Verify {
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/VersionAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/VersionAssertion.java
index 54489f5d3..4816c0057 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/VersionAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/VersionAssertion.java
@@ -97,7 +97,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  */
 @FluentSetters(returns="VersionAssertion")
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ZonedDateTimeAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ZonedDateTimeAssertion.java
index 0faf6e646..5a09090ed 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ZonedDateTimeAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/ZonedDateTimeAssertion.java
@@ -100,7 +100,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Overview &gt; juneau-assertions &gt; Overview</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  */
 @FluentSetters(returns="ZonedDateTimeAssertion")
diff --git a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/Snippet.java b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/Snippet.java
index 0360bec4b..5cdda8fc1 100644
--- a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/Snippet.java
+++ b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/Snippet.java
@@ -22,7 +22,7 @@ package org.apache.juneau.common.utils;
  * See <c>Assertions.<jsm>assertThrown</jsm>(Snippet)</c> for an example.
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Fluent Assertions</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauEcosystemOverview">Juneau Ecosystem Overview</a>
  * </ul>
  */
 public interface Snippet {
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
index 9b28b4c9c..ab3f4ca6b 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
@@ -47,7 +47,7 @@ import org.apache.juneau.utils.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauConfigBasics">Overview &gt; juneau-config</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauConfigBasics">juneau-config Basics</a>
  * </ul>
  */
 public final class Config extends Context implements ConfigEventListener {
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/mod/XorEncodeMod.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/mod/XorEncodeMod.java
index 95a4398af..bef8ea14a 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/mod/XorEncodeMod.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/mod/XorEncodeMod.java
@@ -1,69 +1,69 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.config.mod;
-
-import static org.apache.juneau.common.internal.IOUtils.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
-
-/**
- * Simply XOR+Base64 encoder for obscuring passwords and other sensitive data in INI config files.
- *
- * <p>
- * This is not intended to be used as strong encryption.
- *
- * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/ModdedEntries">Overview &gt; juneau-config &gt; Modded/Encoded Entries</a>
- * </ul>
- */
-public class XorEncodeMod extends Mod {
-
-	/** Reusable XOR-ConfigEncoder instance. */
-	public static final XorEncodeMod INSTANCE = new XorEncodeMod();
-
-	private static final String KEY = System.getProperty("org.apache.juneau.config.XorEncoder.key",
-		"nuy7og796Vh6G9O6bG230SHK0cc8QYkH");	// The super-duper-secret key
-
-	/**
-	 * Constructor.
-	 */
-	public XorEncodeMod() {
-		super('*', null, null, null);
-	}
-
-	@Override
-	public String apply(String value) {
-		var b = value.getBytes(UTF8);
-		for (var i = 0; i < b.length; i++) {
-			var j = i % KEY.length();
-			b[i] = (byte)(b[i] ^ KEY.charAt(j));
-		}
-		return "{" + base64Encode(b) + "}";
-	}
-
-	@Override
-	public String remove(String value) {
-		value = value.trim();
-		value = value.substring(1, value.length()-1);
-		var b = base64Decode(value);
-		for (var i = 0; i < b.length; i++) {
-			var j = i % KEY.length();
-			b[i] = (byte)(b[i] ^ KEY.charAt(j));
-		}
-		return new String(b, UTF8);
-	}
-
-	@Override
-	public boolean isApplied(String value) {
-		return startsWith(value, '{') && endsWith(value, '}');
-	}
-}
\ No newline at end of file
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.config.mod;
+
+import static org.apache.juneau.common.internal.IOUtils.*;
+import static org.apache.juneau.common.internal.StringUtils.*;
+
+/**
+ * Simply XOR+Base64 encoder for obscuring passwords and other sensitive data in INI config files.
+ *
+ * <p>
+ * This is not intended to be used as strong encryption.
+ *
+ * <h5 class='section'>See Also:</h5><ul>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/ModdedEntries">Modded/Encoded Entries</a>
+ * </ul>
+ */
+public class XorEncodeMod extends Mod {
+
+	/** Reusable XOR-ConfigEncoder instance. */
+	public static final XorEncodeMod INSTANCE = new XorEncodeMod();
+
+	private static final String KEY = System.getProperty("org.apache.juneau.config.XorEncoder.key",
+		"nuy7og796Vh6G9O6bG230SHK0cc8QYkH");	// The super-duper-secret key
+
+	/**
+	 * Constructor.
+	 */
+	public XorEncodeMod() {
+		super('*', null, null, null);
+	}
+
+	@Override
+	public String apply(String value) {
+		var b = value.getBytes(UTF8);
+		for (var i = 0; i < b.length; i++) {
+			var j = i % KEY.length();
+			b[i] = (byte)(b[i] ^ KEY.charAt(j));
+		}
+		return "{" + base64Encode(b) + "}";
+	}
+
+	@Override
+	public String remove(String value) {
+		value = value.trim();
+		value = value.substring(1, value.length()-1);
+		var b = base64Decode(value);
+		for (var i = 0; i < b.length; i++) {
+			var j = i % KEY.length();
+			b[i] = (byte)(b[i] ^ KEY.charAt(j));
+		}
+		return new String(b, UTF8);
+	}
+
+	@Override
+	public boolean isApplied(String value) {
+		return startsWith(value, '{') && endsWith(value, '}');
+	}
+}
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/vars/ConfigVar.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/vars/ConfigVar.java
index 268faf5f5..f43cfcb34 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/vars/ConfigVar.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/vars/ConfigVar.java
@@ -46,8 +46,8 @@ import org.apache.juneau.svl.*;
  * Likewise, if the arguments contain any variables, those will be resolved before they are passed to this var.
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/SimpleVariableLanguageBasics">Overview &gt; juneau-marshall &gt; Simple Variable Language</a>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/VariableBasics">Overview &gt; juneau-config &gt; Variables</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/SimpleVariableLanguageBasics">Simple Variable Language Basics</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/VariableBasics">Variable Basics</a>
  * </ul>
  */
 public class ConfigVar extends DefaultingVar {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
index bf99724af..de41b1477 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
@@ -153,7 +153,7 @@ import org.apache.juneau.utils.*;
  * </ul>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/BeanContextBasics">Bean Contexts</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/BeanContextBasics">Bean Context Basics</a>
  * </ul>
  */
 @SuppressWarnings({"unchecked","rawtypes"})
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MediaRange.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MediaRange.java
index 6d5a6d2ca..6cec710be 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MediaRange.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MediaRange.java
@@ -25,7 +25,7 @@ import org.apache.http.message.*;
  * Section 14.1 and 14.7 of RFC2616 (the HTTP/1.1 specification).
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauRestCommonBasics">juneau-rest-common</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauRestCommonBasics">juneau-rest-common Basics</a>
  * 	<li class='extlink'><a class="doclink" href="https://www.w3.org/Protocols/rfc2616/rfc2616.html">Hypertext Transfer Protocol -- HTTP/1.1</a>
  * </ul>
  */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MediaRanges.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MediaRanges.java
index aa59bc352..1b3386db7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MediaRanges.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MediaRanges.java
@@ -46,7 +46,7 @@ import org.apache.juneau.internal.*;
  * </p>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauRestCommonBasics">juneau-rest-common</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauRestCommonBasics">juneau-rest-common Basics</a>
  * 	<li class='extlink'><a class="doclink" href="https://www.w3.org/Protocols/rfc2616/rfc2616.html">Hypertext Transfer Protocol -- HTTP/1.1</a>
  * </ul>
  */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MediaType.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MediaType.java
index 46dd81a87..cedce6188 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MediaType.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MediaType.java
@@ -30,7 +30,7 @@ import org.apache.juneau.json.*;
  * Section 14.1 and 14.7 of RFC2616 (the HTTP/1.1 specification).
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauRestCommonBasics">juneau-rest-common</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauRestCommonBasics">juneau-rest-common Basics</a>
  * 	<li class='extlink'><a class="doclink" href="https://www.w3.org/Protocols/rfc2616/rfc2616.html">Hypertext Transfer Protocol -- HTTP/1.1</a>
  * </ul>
  */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/StringRange.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/StringRange.java
index 1e2662a9c..49b789cd8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/StringRange.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/StringRange.java
@@ -1,198 +1,199 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau;
-
-import static org.apache.juneau.common.internal.Utils.*;
-
-import java.util.*;
-import java.util.function.*;
-
-import org.apache.http.*;
-import org.apache.http.message.*;
-import org.apache.juneau.annotation.*;
-import org.apache.juneau.common.internal.*;
-
-/**
- * Represents a single value in a comma-delimited header value that optionally contains a quality metric for
- * comparison and extension parameters.
- *
- * <p>
- * Similar in concept to {@link MediaRanges} except instead of media types (e.g. <js>"text/json"</js>),
- * it's a simple type (e.g. <js>"iso-8601"</js>).
- *
- * <p>
- * An example of a type range is a value in an <c>Accept-Encoding</c> header.
- *
- * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauRestCommonBasics">juneau-rest-common</a>
- * 	<li class='extlink'><a class="doclink" href="https://www.w3.org/Protocols/rfc2616/rfc2616.html">Hypertext Transfer Protocol -- HTTP/1.1</a>
- * </ul>
- */
-@BeanIgnore
-public class StringRange {
-
-	private final NameValuePair[] extensions;
-	private final Float qValue;
-	private final String name;
-	private final String string;
-
-	/**
-	 * Constructor.
-	 *
-	 * @param value
-	 * 	The raw string range string.
-	 * 	<br>A value of <jk>null</jk> gets interpreted as matching anything (e.g. <js>"*"</js>).
-	 */
-	public StringRange(String value) {
-		this(parse(value));
-	}
-
-	/**
-	 * Constructor.
-	 *
-	 * @param e The parsed string range element.
-	 */
-	public StringRange(HeaderElement e) {
-		Float qValue = 1f;
-
-		// The media type consists of everything up to the q parameter.
-		// The q parameter and stuff after is part of the range.
-		List<NameValuePair> extensions = list();
-		for (NameValuePair p : e.getParameters()) {
-			if (p.getName().equals("q")) {
-				qValue = Float.parseFloat(p.getValue());
-			} else {
-				extensions.add(new BasicNameValuePair(p.getName(), p.getValue()));
-			}
-		}
-
-		this.qValue = qValue;
-		this.extensions = extensions.toArray(new NameValuePair[extensions.size()]);
-		this.name = e.getName();
-
-		StringBuffer sb = new StringBuffer();
-		sb.append(name);
-
-		// '1' is equivalent to specifying no qValue. If there's no extensions, then we won't include a qValue.
-		if (Float.compare(qValue.floatValue(), 1f) == 0) {
-			if (this.extensions.length > 0) {
-				sb.append(";q=").append(qValue);
-				extensions.forEach(x -> sb.append(';').append(x.getName()).append('=').append(x.getValue()));
-			}
-		} else {
-			sb.append(";q=").append(qValue);
-			extensions.forEach(x -> sb.append(';').append(x.getName()).append('=').append(x.getValue()));
-		}
-		string = sb.toString();
-	}
-
-	/**
-	 * Returns the name of this string range.
-	 *
-	 * <p>
-	 * This is the primary value minus the quality or other parameters.
-	 *
-	 * @return The name of this string range.
-	 */
-	public String getName() {
-		return name;
-	}
-
-	/**
-	 * Returns the <js>'q'</js> (quality) value for this type, as described in Section 3.9 of RFC2616.
-	 *
-	 * <p>
-	 * The quality value is a float between <c>0.0</c> (unacceptable) and <c>1.0</c> (most acceptable).
-	 *
-	 * <p>
-	 * If 'q' value doesn't make sense for the context (e.g. this range was extracted from a <js>"content-*"</js>
-	 * header, as opposed to <js>"accept-*"</js> header, its value will always be <js>"1"</js>.
-	 *
-	 * @return The 'q' value for this type, never <jk>null</jk>.
-	 */
-	public Float getQValue() {
-		return qValue;
-	}
-
-	/**
-	 * Returns the optional set of custom extensions defined for this type.
-	 *
-	 * <p>
-	 * Values are lowercase and never <jk>null</jk>.
-	 *
-	 * @return The optional list of extensions, never <jk>null</jk>.
-	 */
-	public List<NameValuePair> getExtensions() {
-		return alist(extensions);
-	}
-
-	/**
-	 * Performs an action on the optional set of custom extensions defined for this type.
-	 *
-	 * @param action The action to perform.
-	 * @return This object.
-	 */
-	public StringRange forEachExtension(Consumer<NameValuePair> action) {
-		for (NameValuePair p : extensions)
-			action.accept(p);
-		return this;
-	}
-
-	/**
-	 * Returns <jk>true</jk> if the specified object is also a <c>StringRange</c>, and has the same qValue, type,
-	 * parameters, and extensions.
-	 *
-	 * @return <jk>true</jk> if object is equivalent.
-	 */
-	@Override /* Object */
-	public boolean equals(Object o) {
-		return (o instanceof StringRange) && eq(this, (StringRange)o, (x,y)->eq(x.string, y.string));
-	}
-
-	/**
-	 * Returns a hash based on this instance's <c>media-type</c>.
-	 *
-	 * @return A hash based on this instance's <c>media-type</c>.
-	 */
-	@Override /* Object */
-	public int hashCode() {
-		return string.hashCode();
-	}
-
-	/**
-	 * Performs a match of this string range against the specified name.
-	 *
-	 * @param name The name being compared against.
-	 * @return
-	 * 	0 = no match, 100 = perfect match, 50 = meta-match.
-	 */
-	public int match(String name) {
-		if (qValue == 0)
-			return 0;
-		if (eq(this.name, name))
-			return 100;
-		if (eq(this.name, "*"))
-			return 50;
-		return 0;
-	}
-
-	private static HeaderElement parse(String value) {
-		HeaderElement[] elements = BasicHeaderValueParser.parseElements(emptyIfNull(StringUtils.trim(value)), null);
-		return (elements.length > 0 ? elements[0] : new BasicHeaderElement("*", ""));
-	}
-
-	@Override /* Object */
-	public String toString() {
-		return string;
-	}
-}
\ No newline at end of file
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau;
+
+import static org.apache.juneau.common.internal.Utils.*;
+
+import java.util.*;
+import java.util.function.*;
+
+import org.apache.http.*;
+import org.apache.http.message.*;
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.common.internal.*;
+
+/**
+ * Represents a single value in a comma-delimited header value that optionally contains a quality metric for
+ * comparison and extension parameters.
+ *
+ * <p>
+ * Similar in concept to {@link MediaRanges} except instead of media types (e.g. <js>"text/json"</js>),
+ * it's a simple type (e.g. <js>"iso-8601"</js>).
+ *
+ * <p>
+ * An example of a type range is a value in an <c>Accept-Encoding</c> header.
+ *
+ * <h5 class='section'>See Also:</h5><ul>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauRestCommonBasics">juneau-rest-common Basics</a>
+ * 	<li class='extlink'><a class="doclink" href="https://www.w3.org/Protocols/rfc2616/rfc2616.html">Hypertext Transfer Protocol -- HTTP/1.1</a>
+
+ * </ul>
+ */
+@BeanIgnore
+public class StringRange {
+
+	private final NameValuePair[] extensions;
+	private final Float qValue;
+	private final String name;
+	private final String string;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param value
+	 * 	The raw string range string.
+	 * 	<br>A value of <jk>null</jk> gets interpreted as matching anything (e.g. <js>"*"</js>).
+	 */
+	public StringRange(String value) {
+		this(parse(value));
+	}
+
+	/**
+	 * Constructor.
+	 *
+	 * @param e The parsed string range element.
+	 */
+	public StringRange(HeaderElement e) {
+		Float qValue = 1f;
+
+		// The media type consists of everything up to the q parameter.
+		// The q parameter and stuff after is part of the range.
+		List<NameValuePair> extensions = list();
+		for (NameValuePair p : e.getParameters()) {
+			if (p.getName().equals("q")) {
+				qValue = Float.parseFloat(p.getValue());
+			} else {
+				extensions.add(new BasicNameValuePair(p.getName(), p.getValue()));
+			}
+		}
+
+		this.qValue = qValue;
+		this.extensions = extensions.toArray(new NameValuePair[extensions.size()]);
+		this.name = e.getName();
+
+		StringBuffer sb = new StringBuffer();
+		sb.append(name);
+
+		// '1' is equivalent to specifying no qValue. If there's no extensions, then we won't include a qValue.
+		if (Float.compare(qValue.floatValue(), 1f) == 0) {
+			if (this.extensions.length > 0) {
+				sb.append(";q=").append(qValue);
+				extensions.forEach(x -> sb.append(';').append(x.getName()).append('=').append(x.getValue()));
+			}
+		} else {
+			sb.append(";q=").append(qValue);
+			extensions.forEach(x -> sb.append(';').append(x.getName()).append('=').append(x.getValue()));
+		}
+		string = sb.toString();
+	}
+
+	/**
+	 * Returns the name of this string range.
+	 *
+	 * <p>
+	 * This is the primary value minus the quality or other parameters.
+	 *
+	 * @return The name of this string range.
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * Returns the <js>'q'</js> (quality) value for this type, as described in Section 3.9 of RFC2616.
+	 *
+	 * <p>
+	 * The quality value is a float between <c>0.0</c> (unacceptable) and <c>1.0</c> (most acceptable).
+	 *
+	 * <p>
+	 * If 'q' value doesn't make sense for the context (e.g. this range was extracted from a <js>"content-*"</js>
+	 * header, as opposed to <js>"accept-*"</js> header, its value will always be <js>"1"</js>.
+	 *
+	 * @return The 'q' value for this type, never <jk>null</jk>.
+	 */
+	public Float getQValue() {
+		return qValue;
+	}
+
+	/**
+	 * Returns the optional set of custom extensions defined for this type.
+	 *
+	 * <p>
+	 * Values are lowercase and never <jk>null</jk>.
+	 *
+	 * @return The optional list of extensions, never <jk>null</jk>.
+	 */
+	public List<NameValuePair> getExtensions() {
+		return alist(extensions);
+	}
+
+	/**
+	 * Performs an action on the optional set of custom extensions defined for this type.
+	 *
+	 * @param action The action to perform.
+	 * @return This object.
+	 */
+	public StringRange forEachExtension(Consumer<NameValuePair> action) {
+		for (NameValuePair p : extensions)
+			action.accept(p);
+		return this;
+	}
+
+	/**
+	 * Returns <jk>true</jk> if the specified object is also a <c>StringRange</c>, and has the same qValue, type,
+	 * parameters, and extensions.
+	 *
+	 * @return <jk>true</jk> if object is equivalent.
+	 */
+	@Override /* Object */
+	public boolean equals(Object o) {
+		return (o instanceof StringRange) && eq(this, (StringRange)o, (x,y)->eq(x.string, y.string));
+	}
+
+	/**
+	 * Returns a hash based on this instance's <c>media-type</c>.
+	 *
+	 * @return A hash based on this instance's <c>media-type</c>.
+	 */
+	@Override /* Object */
+	public int hashCode() {
+		return string.hashCode();
+	}
+
+	/**
+	 * Performs a match of this string range against the specified name.
+	 *
+	 * @param name The name being compared against.
+	 * @return
+	 * 	0 = no match, 100 = perfect match, 50 = meta-match.
+	 */
+	public int match(String name) {
+		if (qValue == 0)
+			return 0;
+		if (eq(this.name, name))
+			return 100;
+		if (eq(this.name, "*"))
+			return 50;
+		return 0;
+	}
+
+	private static HeaderElement parse(String value) {
+		HeaderElement[] elements = BasicHeaderValueParser.parseElements(emptyIfNull(StringUtils.trim(value)), null);
+		return (elements.length > 0 ? elements[0] : new BasicHeaderElement("*", ""));
+	}
+
+	@Override /* Object */
+	public String toString() {
+		return string;
+	}
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/StringRanges.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/StringRanges.java
index f8c12bc73..96b3a7c7b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/StringRanges.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/StringRanges.java
@@ -53,7 +53,7 @@ import org.apache.juneau.internal.*;
  * </p>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauRestCommonBasics">juneau-rest-common</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauRestCommonBasics">juneau-rest-common Basics</a>
  * 	<li class='extlink'><a class="doclink" href="https://www.w3.org/Protocols/rfc2616/rfc2616.html">Hypertext Transfer Protocol -- HTTP/1.1</a>
  * </ul>
  */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java
index e2457b0a1..4731d89fc 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java
@@ -389,7 +389,7 @@ public @interface BeanConfig {
 	 * 	<li class='ja'>{@link Beanp#dictionary()}
 	 * 	<li class='ja'>{@link BeanConfig#dictionary_replace()}
 	 * 	<li class='jm'>{@link org.apache.juneau.BeanContext.Builder#beanDictionary(Class...)}
-	 * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/BeanDictionaryBasics">Bean Names and Dictionaries</a>
+	 * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/BeanDictionaryBasics">Bean Dictionary Basics</a>
 	 * </ul>
 	 *
 	 * @return The annotation value.
@@ -855,7 +855,7 @@ public @interface BeanConfig {
 	 *
 	 * <h5 class='section'>See Also:</h5><ul>
 	 * 	<li class='jm'>{@link org.apache.juneau.BeanContext.Builder#swaps(Class...)}
-	 * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/SwapBasics">Swaps</a>
+	 * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/SwapBasics">Swap Basics</a>
 	 * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/PerMediaTypeSwaps">Per-media-type Swaps</a>
 	 * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/OneWaySwaps">One-way Swaps</a>
 	 * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/SwapAnnotation">@Swap Annotation</a>
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ExternalDocs.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ExternalDocs.java
index f5c5be323..3b21a9443 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ExternalDocs.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ExternalDocs.java
@@ -36,7 +36,7 @@ import java.lang.annotation.*;
  * </p>
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">Swagger</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
  * 	<li class='extlink'><a class="doclink" href="https://swagger.io/specification/v2#externalDocumentationObject">Swagger ExternalDocumentation Object</a>
  * </ul>
  */
@@ -55,7 +55,7 @@ public @interface ExternalDocs {
 	 * 		The format is a plain-text string.
 	 * 		<br>Multiple lines are concatenated with newlines.
 	 * 	<li class='note'>
-	 * 		Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/SvlVariables">SVL Variables</a> (e.g. <js>"$L{my.localized.variable}"</js>) for the swagger generator.
+	 * 		Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerSvlVariables">SVL Variables</a> (e.g. <js>"$L{my.localized.variable}"</js>) for the swagger generator.
 	 * </ul>
 	 *
 	 * @return The annotation value.
@@ -74,7 +74,7 @@ public @interface ExternalDocs {
 	 * 	<li class='note'>
 	 * 		The format is a URL string.
 	 * 	<li class='note'>
-	 * 		Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/SvlVariables">SVL Variables</a> (e.g. <js>"$L{my.localized.variable}"</js>) for the swagger generator.
+	 * 		Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerSvlVariables">SVL Variables</a> (e.g. <js>"$L{my.localized.variable}"</js>) for the swagger generator.
 	 * </ul>
 	 *
 	 * @return The annotation value.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Items.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Items.java
index a0a8e22b1..e119c84c5 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Items.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Items.java
@@ -1,408 +1,409 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.annotation;
-
-import static java.lang.annotation.RetentionPolicy.*;
-
-import java.lang.annotation.*;
-
-import org.apache.juneau.oapi.*;
-
-/**
- * Swagger items annotation.
- *
- * <p>
- * A limited subset of JSON-Schema's items object.
- *
- * <p>
- * Used to populate the auto-generated Swagger documentation and UI for server-side <ja>@Rest</ja>-annotated classes.
- * <br>Also used to define OpenAPI schema information for POJOs serialized through {@link OpenApiSerializer} and parsed through {@link OpenApiParser}.
- *
- * <h5 class='section'>Examples:</h5>
- * <p class='bjava'>
- * 	<jc>// Items have a specific set of enumerated string values</jc>
- * 	<ja>@Query</ja>(
- * 		name=<js>"status"</js>,
- * 		schema=<ja>@Schema</ja>(
- * 			type=<js>"array"</js>,
- * 			collectionFormat=<js>"csv"</js>,
- * 			items=<ja>@Items</ja>(
- * 				type=<js>"string"</js>,
- * 				_enum=<js>"AVAILABLE,PENDING,SOLD"</js>,
- * 				_default=<js>"AVAILABLE"</js>
- *			)
- *		)
- * 	)
- * </p>
- * <p class='bjava'>
- * 	<jc>// An array of arrays, the internal array being of type integer, numbers must be between 0 and 63 (inclusive)</jc>
- * 	<ja>@Query</ja>(
- * 		name=<js>"status"</js>,
- * 		schema=<ja>@Schema</ja>(
- * 			type=<js>"array"</js>,
- * 			collectionFormat=<js>"csv"</js>,
- * 			items=<ja>@Items</ja>(
- * 				type=<js>"array"</js>,
- * 				items=<ja>@SubItems</ja>(
- * 					type=<js>"integer"</js>,
- * 					minimum=<js>"0"</js>,
- * 					maximum=<js>"63"</js>
- * 				)
- * 			)
- *		)
- * 	)
- * </p>
- *
- * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">Swagger</a>
- * 	<li class='link'><a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>
- * </ul>
- */
-@Documented
-@Retention(RUNTIME)
-public @interface Items {
-
-	/**
-	 * <mk>default</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String[] _default() default {};
-
-    /**
-     * Optional description for the exposed API.
-     *
-     * @return The annotation value.
-     * @since 9.2.0
-     */
-    String[] description() default {};
-
-	/**
-	 * <mk>enum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		Each entry is a possible value.  Can also contain comma-delimited lists of values.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String[] _enum() default {};
-
-	/**
-	 * <mk>$ref</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String $ref() default "";
-
-	/**
-	 * Synonym for {@link #collectionFormat()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String cf() default "";
-
-	/**
-	 * <mk>collectionFormat</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String collectionFormat() default "";
-
-	/**
-	 * Synonym for {@link #_default()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String[] df() default {};
-
-	/**
-	 * Synonym for {@link #_enum()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String[] e() default {};
-
-	/**
-	 * Synonym for {@link #exclusiveMaximum()}.
-	 *
-	 * @return The annotation value.
-	 */
-	boolean emax() default false;
-
-	/**
-	 * Synonym for {@link #exclusiveMinimum()}.
-	 *
-	 * @return The annotation value.
-	 */
-	boolean emin() default false;
-
-	/**
-	 * <mk>exclusiveMaximum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	boolean exclusiveMaximum() default false;
-
-	/**
-	 * <mk>exclusiveMinimum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	boolean exclusiveMinimum() default false;
-
-	/**
-	 * Synonym for {@link #format()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String f() default "";
-
-	/**
-	 * <mk>format</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String format() default "";
-
-	/**
-	 * <mk>items</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <p>
-	 * Describes the type of items in the array.
-	 *
-	 * @return The annotation value.
-	 */
-	SubItems items() default @SubItems;
-
-	/**
-	 * Synonym for {@link #maximum()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String max() default "";
-
-	/**
-	 * Synonym for {@link #maxItems()}.
-	 *
-	 * @return The annotation value.
-	 */
-	long maxi() default -1;
-
-	/**
-	 * <mk>maximum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String maximum() default "";
-
-	/**
-	 * <mk>maxItems</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	long maxItems() default -1;
-
-	/**
-	 * Synonym for {@link #maxLength()}.
-	 *
-	 * @return The annotation value.
-	 */
-	long maxl() default -1;
-
-	/**
-	 * <mk>maxLength</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	long maxLength() default -1;
-
-	/**
-	 * Synonym for {@link #minimum()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String min() default "";
-
-	/**
-	 * Synonym for {@link #minItems()}.
-	 *
-	 * @return The annotation value.
-	 */
-	long mini() default -1;
-
-	/**
-	 * <mk>minimum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String minimum() default "";
-
-	/**
-	 * <mk>minItems</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	long minItems() default -1;
-
-	/**
-	 * Synonym for {@link #minLength()}.
-	 *
-	 * @return The annotation value.
-	 */
-	long minl() default -1;
-
-	/**
-	 * <mk>minLength</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	long minLength() default -1;
-
-	/**
-	 * Synonym for {@link #multipleOf()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String mo() default "";
-
-	/**
-	 * <mk>multipleOf</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String multipleOf() default "";
-
-	/**
-	 * Synonym for {@link #pattern()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String p() default "";
-
-	/**
-	 * <mk>pattern</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String pattern() default "";
-
-	/**
-	 * Synonym for {@link #type()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String t() default "";
-
-	/**
-	 * <mk>type</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String type() default "";
-
-	/**
-	 * Synonym for {@link #uniqueItems()}.
-	 *
-	 * @return The annotation value.
-	 */
-	boolean ui() default false;
-
-	/**
-	 * <mk>uniqueItems</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	boolean uniqueItems() default false;
-}
\ No newline at end of file
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.annotation;
+
+import static java.lang.annotation.RetentionPolicy.*;
+
+import java.lang.annotation.*;
+
+import org.apache.juneau.oapi.*;
+
+/**
+ * Swagger items annotation.
+ *
+ * <p>
+ * A limited subset of JSON-Schema's items object.
+ *
+ * <p>
+ * Used to populate the auto-generated Swagger documentation and UI for server-side <ja>@Rest</ja>-annotated classes.
+ * <br>Also used to define OpenAPI schema information for POJOs serialized through {@link OpenApiSerializer} and parsed through {@link OpenApiParser}.
+ *
+ * <h5 class='section'>Examples:</h5>
+ * <p class='bjava'>
+ * 	<jc>// Items have a specific set of enumerated string values</jc>
+ * 	<ja>@Query</ja>(
+ * 		name=<js>"status"</js>,
+ * 		schema=<ja>@Schema</ja>(
+ * 			type=<js>"array"</js>,
+ * 			collectionFormat=<js>"csv"</js>,
+ * 			items=<ja>@Items</ja>(
+ * 				type=<js>"string"</js>,
+ * 				_enum=<js>"AVAILABLE,PENDING,SOLD"</js>,
+ * 				_default=<js>"AVAILABLE"</js>
+ *			)
+ *		)
+ * 	)
+ * </p>
+ * <p class='bjava'>
+ * 	<jc>// An array of arrays, the internal array being of type integer, numbers must be between 0 and 63 (inclusive)</jc>
+ * 	<ja>@Query</ja>(
+ * 		name=<js>"status"</js>,
+ * 		schema=<ja>@Schema</ja>(
+ * 			type=<js>"array"</js>,
+ * 			collectionFormat=<js>"csv"</js>,
+ * 			items=<ja>@Items</ja>(
+ * 				type=<js>"array"</js>,
+ * 				items=<ja>@SubItems</ja>(
+ * 					type=<js>"integer"</js>,
+ * 					minimum=<js>"0"</js>,
+ * 					maximum=<js>"63"</js>
+ * 				)
+ * 			)
+ *		)
+ * 	)
+ * </p>
+ *
+ * <h5 class='section'>See Also:</h5><ul>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
+ * 	<li class='link'><a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>
+
+ * </ul>
+ */
+@Documented
+@Retention(RUNTIME)
+public @interface Items {
+
+	/**
+	 * <mk>default</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String[] _default() default {};
+
+    /**
+     * Optional description for the exposed API.
+     *
+     * @return The annotation value.
+     * @since 9.2.0
+     */
+    String[] description() default {};
+
+	/**
+	 * <mk>enum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		Each entry is a possible value.  Can also contain comma-delimited lists of values.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String[] _enum() default {};
+
+	/**
+	 * <mk>$ref</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String $ref() default "";
+
+	/**
+	 * Synonym for {@link #collectionFormat()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String cf() default "";
+
+	/**
+	 * <mk>collectionFormat</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String collectionFormat() default "";
+
+	/**
+	 * Synonym for {@link #_default()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String[] df() default {};
+
+	/**
+	 * Synonym for {@link #_enum()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String[] e() default {};
+
+	/**
+	 * Synonym for {@link #exclusiveMaximum()}.
+	 *
+	 * @return The annotation value.
+	 */
+	boolean emax() default false;
+
+	/**
+	 * Synonym for {@link #exclusiveMinimum()}.
+	 *
+	 * @return The annotation value.
+	 */
+	boolean emin() default false;
+
+	/**
+	 * <mk>exclusiveMaximum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	boolean exclusiveMaximum() default false;
+
+	/**
+	 * <mk>exclusiveMinimum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	boolean exclusiveMinimum() default false;
+
+	/**
+	 * Synonym for {@link #format()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String f() default "";
+
+	/**
+	 * <mk>format</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String format() default "";
+
+	/**
+	 * <mk>items</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <p>
+	 * Describes the type of items in the array.
+	 *
+	 * @return The annotation value.
+	 */
+	SubItems items() default @SubItems;
+
+	/**
+	 * Synonym for {@link #maximum()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String max() default "";
+
+	/**
+	 * Synonym for {@link #maxItems()}.
+	 *
+	 * @return The annotation value.
+	 */
+	long maxi() default -1;
+
+	/**
+	 * <mk>maximum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String maximum() default "";
+
+	/**
+	 * <mk>maxItems</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	long maxItems() default -1;
+
+	/**
+	 * Synonym for {@link #maxLength()}.
+	 *
+	 * @return The annotation value.
+	 */
+	long maxl() default -1;
+
+	/**
+	 * <mk>maxLength</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	long maxLength() default -1;
+
+	/**
+	 * Synonym for {@link #minimum()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String min() default "";
+
+	/**
+	 * Synonym for {@link #minItems()}.
+	 *
+	 * @return The annotation value.
+	 */
+	long mini() default -1;
+
+	/**
+	 * <mk>minimum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String minimum() default "";
+
+	/**
+	 * <mk>minItems</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	long minItems() default -1;
+
+	/**
+	 * Synonym for {@link #minLength()}.
+	 *
+	 * @return The annotation value.
+	 */
+	long minl() default -1;
+
+	/**
+	 * <mk>minLength</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	long minLength() default -1;
+
+	/**
+	 * Synonym for {@link #multipleOf()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String mo() default "";
+
+	/**
+	 * <mk>multipleOf</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String multipleOf() default "";
+
+	/**
+	 * Synonym for {@link #pattern()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String p() default "";
+
+	/**
+	 * <mk>pattern</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String pattern() default "";
+
+	/**
+	 * Synonym for {@link #type()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String t() default "";
+
+	/**
+	 * <mk>type</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String type() default "";
+
+	/**
+	 * Synonym for {@link #uniqueItems()}.
+	 *
+	 * @return The annotation value.
+	 */
+	boolean ui() default false;
+
+	/**
+	 * <mk>uniqueItems</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	boolean uniqueItems() default false;
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Schema.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Schema.java
index 2e174073d..e214b818c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Schema.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Schema.java
@@ -1,1237 +1,1238 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.annotation;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-import java.lang.annotation.*;
-import java.util.*;
-
-import org.apache.juneau.collections.*;
-import org.apache.juneau.http.annotation.*;
-import org.apache.juneau.httppart.*;
-import org.apache.juneau.oapi.*;
-
-/**
- * Swagger schema annotation.
- *
- * <p>
- * The Schema Object allows the definition of input and output data types.
- * These types can be objects, but also primitives and arrays.
- * This object is based on the JSON Schema Specification Draft 4 and uses a predefined subset of it.
- * On top of this subset, there are extensions provided by this specification to allow for more complete documentation.
- *
- * <p>
- * Used to populate the auto-generated Swagger documentation and UI for server-side <ja>@Rest</ja>-annotated classes.
- * <br>Also used to define OpenAPI schema information for POJOs serialized through {@link OpenApiSerializer} and parsed through {@link OpenApiParser}.
- *
- * <h5 class='section'>Examples:</h5>
- * <p class='bjava'>
- * 	<jc>// A response object thats a hex-encoded string</jc>
- * 	<ja>@Response</ja>(
- * 		schema=<ja>@Schema</ja>(
- * 			type=<js>"string"</js>,
- * 			format=<js>"binary"</js>
- * 		)
- * 	)
- * </p>
- * <p class='bjava'>
- * 	<jc>// A request body consisting of an array of arrays, the internal
- * 	// array being of type integer, numbers must be between 0 and 63 (inclusive)</jc>
- * 	<ja>@Content</ja>(
- * 		schema=<ja>@Schema</ja>(
- * 			items=<ja>@Items</ja>(
- * 				type=<js>"array"</js>,
- * 				items=<ja>@SubItems</ja>(
- * 					type=<js>"integer"</js>,
- * 					minimum=<js>"0"</js>,
- * 					maximum=<js>"63"</js>
- * 				)
- *			)
- * 		)
- * 	)
- * </p>
- *
- * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">Swagger</a>
- * 	<li class='extlink'><a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>
- * </ul>
- */
-@Documented
-@Target({PARAMETER,METHOD,TYPE,FIELD})
-@Retention(RUNTIME)
-@Repeatable(SchemaAnnotation.Array.class)
-@ContextApply(SchemaAnnotation.Apply.class)
-public @interface Schema {
-
-	/**
-	 * <mk>default</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <p>
-	 * Declares the value of the parameter that the server will use if none is provided, for example a "count" to control the number of results per page might default to 100 if not supplied by the client in the request.
-	 * <br>(Note: "default" has no meaning for required parameters.)
-	 *
-	 * <p>
-	 * Additionally, this value is used to create instances of POJOs that are then serialized as language-specific examples in the generated Swagger documentation
-	 * if the examples are not defined in some other way.
-	 *
-	 * <p>
-	 * The format of this value is a string.
-	 * <br>Multiple lines are concatenated with newlines.
-	 *
-	 * <h5 class='section'>Examples:</h5>
-	 * <p class='bjava'>
-	 * 	<jk>public</jk> Order placeOrder(
-	 * 		<ja>@Header</ja>(<js>"X-PetId"</js>)
-	 * 		<ja>@Schema</ja>(_default=<js>"100"</js>)
-	 * 		<jk>long</jk> <jv>petId</jv>,
-	 *
-	 * 		<ja>@Header</ja>(<js>"X-AdditionalInfo"</js>)
-	 * 		<ja>@Schema</ja>(format=<js>"uon"</js>, _default=<js>"(rushOrder=false)"</js>)
-	 * 		AdditionalInfo <jv>additionalInfo</jv>,
-	 *
-	 * 		<ja>@Header</ja>(<js>"X-Flags"</js>)
-	 * 		<ja>@Schema</ja>(collectionFormat=<js>"uon"</js>, _default=<js>"@(new-customer)"</js>)
-	 * 		String[] <jv>flags</jv>
-	 * 	) {...}
-	 * </p>
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Server-side schema-based parsing.
-	 * 	<li>
-	 * 		Server-side generated Swagger documentation.
-	 * 	<li>
-	 * 		Client-side schema-based serializing.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String[] _default() default {};
-
-	/**
-	 * <mk>enum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <p>
-	 * If specified, the input validates successfully if it is equal to one of the elements in this array.
-	 *
-	 * <p>
-	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
-	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
-	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
-	 *
-	 * <p>
-	 * The format is either individual values or a comma-delimited list.
-	 * <br>Multiple lines are concatenated with newlines.
-	 *
-	 * <h5 class='section'>Examples:</h5>
-	 * <p class='bjava'>
-	 * 	<jc>// Comma-delimited list</jc>
-	 * 	<jk>public</jk> Collection&lt;Pet&gt; findPetsByStatus(
-	 * 		<ja>@Header</ja>(<js>"X-Status"</js>)
-	 * 		<ja>@Schema</ja>(_enum=<js>"AVAILABLE,PENDING,SOLD"</js>)
-	 * 		PetStatus <jv>status</jv>
-	 * 	) {...}
-	 * </p>
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Server-side schema-based parsing validation.
-	 * 	<li>
-	 * 		Server-side generated Swagger documentation.
-	 * 	<li>
-	 * 		Client-side schema-based serializing validation.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String[] _enum() default {};
-
-	/**
-	 * <mk>$ref</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <p>
-	 * 	A JSON reference to the schema definition.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a <a href='https://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03'>JSON Reference</a>.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String $ref() default "";
-
-	/**
-	 * <mk>additionalProperties</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">Swagger</a> object.
-	 * 		<br>Multiple lines are concatenated with newlines.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String[] additionalProperties() default {};
-
-	/**
-	 * <mk>allOf</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">Swagger</a> object.
-	 * 		<br>Multiple lines are concatenated with newlines.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String[] allOf() default {};
-
-	/**
-	 * Synonym for {@link #allowEmptyValue()}.
-	 *
-	 * @return The annotation value.
-	 */
-	boolean aev() default false;
-
-	/**
-	 * <mk>allowEmptyValue</mk> field of the <a class='doclink' href='https://swagger.io/specification/v2#parameterObject'>Swagger Parameter Object</a>.
-	 *
-	 * <p>
-	 * Sets the ability to pass empty-valued heaver values.
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Server-side schema-based parsing validation.
-	 * 	<li>
-	 * 		Server-side generated Swagger documentation.
-	 * 	<li>
-	 * 		Client-side schema-based serializing validation.
-	 * </ul>
-	 *
-	 * <p>
-	 * <b>Note:</b>  This is technically only valid for either query or formData parameters, but support is provided anyway for backwards compatability.
-	 *
-	 * @return The annotation value.
-	 */
-	boolean allowEmptyValue() default false;
-
-	/**
-	 * Synonym for {@link #collectionFormat()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String cf() default "";
-
-	/**
-	 * <mk>collectionFormat</mk> field.
-	 *
-	 * <p>
-	 * Note that this field isn't part of the Swagger 2.0 specification, but the specification does not specify how
-	 * items are supposed to be represented.
-	 *
-	 * <p>
-	 * Determines the format of the array if <c>type</c> <js>"array"</js> is used.
-	 * <br>Can only be used if <c>type</c> is <js>"array"</js>.
-	 *
-	 * <p>
-	 * Static strings are defined in {@link CollectionFormatType}.
-	 *
-	 * <p>
-	 * Note that for collections/arrays parameters with POJO element types, the input is broken into a string array before being converted into POJO elements.
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Server-side schema-based parsing.
-	 * 	<li>
-	 * 		Server-side generated Swagger documentation.
-	 * 	<li>
-	 * 		Client-side schema-based serializing.
-	 * </ul>
-	 *
-	 * <p>
-	 * Note that for collections/arrays parameters with POJO element types, the input is broken into a string array before being converted into POJO elements.
-	 *
-	 * <ul class='values'>
-	 * 	<li><js>"csv"</js> (default) - Comma-separated values (e.g. <js>"foo,bar"</js>).
-	 * 	<li><js>"ssv"</js> - Space-separated values (e.g. <js>"foo bar"</js>).
-	 * 	<li><js>"tsv"</js> - Tab-separated values (e.g. <js>"foo\tbar"</js>).
-	 * 	<li><js>"pipes</js> - Pipe-separated values (e.g. <js>"foo|bar"</js>).
-	 * 	<li><js>"multi"</js> - Corresponds to multiple parameter instances instead of multiple values for a single instance (e.g. <js>"foo=bar&amp;foo=baz"</js>).
-	 * 	<li><js>"uon"</js> - UON notation (e.g. <js>"@(foo,bar)"</js>).
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String collectionFormat() default "";
-
-	/**
-	 * Synonym for {@link #description()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String[] d() default {};
-
-	/**
-	 * <mk>description</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <p>
-	 * A brief description of the body. This could contain examples of use.
-	 *
-	 * <h5 class='section'>Examples:</h5>
-	 * <p class='bjava'>
-	 * 	<jc>// Used on parameter</jc>
-	 * 	<ja>@RestPost</ja>
-	 * 	<jk>public void</jk> addPet(
-	 * 		<ja>@Content</ja> <ja>@Schema</ja>(description=<js>"Pet object to add to the store"</js>) Pet <jv>input</jv>
-	 * 	) {...}
-	 * </p>
-	 * <p class='bjava'>
-	 * 	<jc>// Used on class</jc>
-	 * 	<ja>@RestPost</ja>
-	 * 	<jk>public void</jk> addPet(Pet <jv>input</jv>) {...}
-	 *
-	 * 	<ja>@Content</ja> <ja>@Schema</ja>(description=<js>"Pet object to add to the store"</js>)
-	 * 	<jk>public class</jk> Pet {...}
-	 * </p>
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is plain text.
-	 * 		<br>Multiple lines are concatenated with newlines.
-	 * 	<li class='note'>
-	 * 		Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/SvlVariables">SVL Variables</a> (e.g. <js>"$L{my.localized.variable}"</js>) for the swagger generator.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String[] description() default {};
-
-	/**
-	 * Synonym for {@link #_default()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String[] df() default {};
-
-	/**
-	 * <mk>discriminator</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">Swagger</a> object.
-	 * 		<br>Multiple lines are concatenated with newlines.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String discriminator() default "";
-
-	/**
-	 * Synonym for {@link #_enum()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String[] e() default {};
-
-	/**
-	 * Synonym for {@link #exclusiveMaximum()}.
-	 *
-	 * @return The annotation value.
-	 */
-	boolean emax() default false;
-
-	/**
-	 * Synonym for {@link #exclusiveMinimum()}.
-	 *
-	 * @return The annotation value.
-	 */
-	boolean emin() default false;
-
-	/**
-	 * <mk>exclusiveMaximum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <p>
-	 * Defines whether the maximum is matched exclusively.
-	 *
-	 * <p>
-	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
-	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
-	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
-	 *
-	 * <p>
-	 * Only allowed for the following types: <js>"integer"</js>, <js>"number"</js>.
-	 * <br>If <jk>true</jk>, must be accompanied with <c>maximum</c>.
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Server-side schema-based parsing validation.
-	 * 	<li>
-	 * 		Server-side generated Swagger documentation.
-	 * 	<li>
-	 * 		Client-side schema-based serializing validation.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	boolean exclusiveMaximum() default false;
-
-	/**
-	 * <mk>exclusiveMinimum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <p>
-	 * Defines whether the minimum is matched exclusively.
-	 *
-	 * <p>
-	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
-	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
-	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
-	 *
-	 * <p>
-	 * Only allowed for the following types: <js>"integer"</js>, <js>"number"</js>.
-	 * <br>If <jk>true</jk>, must be accompanied with <c>minimum</c>.
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Server-side schema-based parsing validation.
-	 * 	<li>
-	 * 		Server-side generated Swagger documentation.
-	 * 	<li>
-	 * 		Client-side schema-based serializing validation.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	boolean exclusiveMinimum() default false;
-
-	/**
-	 * <mk>externalDocs</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">Swagger</a> object.
-	 * 		<br>Multiple lines are concatenated with newlines.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	ExternalDocs externalDocs() default @ExternalDocs;
-
-	/**
-	 * Synonym for {@link #format()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String f() default "";
-
-	/**
-	 * <mk>format</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <p>
-	 * The extending format for the previously mentioned <a class="doclink" href="https://swagger.io/specification/v2#parameterType">parameter type</a>.
-	 *
-	 * <p>
-	 * Static strings are defined in {@link FormatType}.
-	 *
-	 * <h5 class='section'>Examples:</h5>
-	 * <p class='bjava'>
-	 * 	<jc>// Used on parameter</jc>
-	 * 	<ja>@RestPut</ja>
-	 * 	<jk>public void</jk> setAge(
-	 * 		<ja>@Content</ja> <ja>@Schema</ja>(type=<js>"integer"</js>, format=<js>"int32"</js>) String <jv>input</jv>
-	 * 	) {...}
-	 * </p>
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Server-side schema-based parsing.
-	 * 	<li>
-	 * 		Server-side generated Swagger documentation.
-	 * 	<li>
-	 * 		Client-side schema-based serializing.
-	 * </ul>
-	 *
-	 * <ul class='values'>
-	 * 	<li>
-	 * 		<js>"int32"</js> - Signed 32 bits.
-	 * 		<br>Only valid with type <js>"integer"</js>.
-	 * 	<li>
-	 * 		<js>"int64"</js> - Signed 64 bits.
-	 * 		<br>Only valid with type <js>"integer"</js>.
-	 * 	<li>
-	 * 		<js>"float"</js> - 32-bit floating point number.
-	 * 		<br>Only valid with type <js>"number"</js>.
-	 * 	<li>
-	 * 		<js>"double"</js> - 64-bit floating point number.
-	 * 		<br>Only valid with type <js>"number"</js>.
-	 * 	<li>
-	 * 		<js>"byte"</js> - BASE-64 encoded characters.
-	 * 		<br>Only valid with type <js>"string"</js>.
-	 * 		<br>Parameters of type POJO convertible from string are converted after the string has been decoded.
-	 * 	<li>
-	 * 		<js>"binary"</js> - Hexadecimal encoded octets (e.g. <js>"00FF"</js>).
-	 * 		<br>Only valid with type <js>"string"</js>.
-	 * 		<br>Parameters of type POJO convertible from string are converted after the string has been decoded.
-	 * 	<li>
-	 * 		<js>"date"</js> - An <a href='http://xml2rfc.ietf.org/public/rfc/html/rfc3339.html#anchor14'>RFC3339 full-date</a>.
-	 * 		<br>Only valid with type <js>"string"</js>.
-	 * 	<li>
-	 * 		<js>"date-time"</js> - An <a href='http://xml2rfc.ietf.org/public/rfc/html/rfc3339.html#anchor14'>RFC3339 date-time</a>.
-	 * 		<br>Only valid with type <js>"string"</js>.
-	 * 	<li>
-	 * 		<js>"password"</js> - Used to hint UIs the input needs to be obscured.
-	 * 		<br>This format does not affect the serialization or parsing of the parameter.
-	 * 	<li>
-	 * 		<js>"uon"</js> - UON notation (e.g. <js>"(foo=bar,baz=@(qux,123))"</js>).
-	 * 		<br>Only valid with type <js>"object"</js>.
-	 * 		<br>If not specified, then the input is interpreted as plain-text and is converted to a POJO directly.
-	 * </ul>
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is plain text.
-	 * </ul>
-	 *
-	 * <h5 class='section'>See Also:</h5><ul>
-	 * 	<li class='extlink'><a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String format() default "";
-
-	/**
-	 * Specifies that schema information for this part should not be shown in the generated Swagger documentation.
-	 *
-	 * @return The annotation value.
-	 */
-	boolean ignore() default false;
-
-	/**
-	 * <mk>items</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <p>
-	 * Describes the type of items in the array.
-	 *
-	 * <p>
-	 * Required if <c>type</c> is <js>"array"</js>.
-	 * <br>Can only be used if <c>type</c> is <js>"array"</js>.
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Server-side schema-based parsing and parsing validation.
-	 * 	<li>
-	 * 		Server-side generated Swagger documentation.
-	 * 	<li>
-	 * 		Client-side schema-based serializing and serializing validation.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	Items items() default @Items;
-
-	/**
-	 * Synonym for {@link #maximum()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String max() default "";
-
-	/**
-	 * Synonym for {@link #maxItems()}.
-	 *
-	 * @return The annotation value.
-	 */
-	long maxi() default -1;
-
-	/**
-	 * <mk>maximum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <p>
-	 * Defines the maximum value for a parameter of numeric types.
-	 * <br>The value must be a valid JSON number.
-	 *
-	 * <p>
-	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
-	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
-	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
-	 *
-	 * <p>
-	 * Only allowed for the following types: <js>"integer"</js>, <js>"number"</js>.
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Server-side schema-based parsing validation.
-	 * 	<li>
-	 * 		Server-side generated Swagger documentation.
-	 * 	<li>
-	 * 		Client-side schema-based serializing validation.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String maximum() default "";
-
-	/**
-	 * <mk>maxItems</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <p>
-	 * An array or collection is valid if its size is less than, or equal to, the value of this keyword.
-	 *
-	 * <p>
-	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
-	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
-	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
-	 *
-	 * <p>
-	 * Only allowed for the following types: <js>"array"</js>.
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Server-side schema-based parsing validation.
-	 * 	<li>
-	 * 		Server-side generated Swagger documentation.
-	 * 	<li>
-	 * 		Client-side schema-based serializing validation.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	long maxItems() default -1;
-
-	/**
-	 * Synonym for {@link #maxLength()}.
-	 *
-	 * @return The annotation value.
-	 */
-	long maxl() default -1;
-
-	/**
-	 * <mk>maxLength</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <p>
-	 * A string instance is valid against this keyword if its length is less than, or equal to, the value of this keyword.
-	 * <br>The length of a string instance is defined as the number of its characters as defined by <a href='https://tools.ietf.org/html/rfc4627'>RFC 4627</a>.
-	 * <br>The value <c>-1</c> is always ignored.
-	 *
-	 * <p>
-	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
-	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
-	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
-	 *
-	 * <p>
-	 * Only allowed for the following types: <js>"string"</js>.
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Server-side schema-based parsing validation.
-	 * 	<li>
-	 * 		Server-side generated Swagger documentation.
-	 * 	<li>
-	 * 		Client-side schema-based serializing validation.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	long maxLength() default -1;
-
-	/**
-	 * Synonym for {@link #maxProperties()}.
-	 *
-	 * @return The annotation value.
-	 */
-	long maxp() default -1;
-
-	/**
-	 * <mk>maxProperties</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">Swagger</a> object.
-	 * 		<br>Multiple lines are concatenated with newlines.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	long maxProperties() default -1;
-
-	/**
-	 * Synonym for {@link #minimum()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String min() default "";
-
-	/**
-	 * Synonym for {@link #minItems()}.
-	 *
-	 * @return The annotation value.
-	 */
-	long mini() default -1;
-
-	/**
-	 * <mk>minimum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <p>
-	 * Defines the minimum value for a parameter of numeric types.
-	 * <br>The value must be a valid JSON number.
-	 *
-	 * <p>
-	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
-	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
-	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
-	 *
-	 * <p>
-	 * Only allowed for the following types: <js>"integer"</js>, <js>"number"</js>.
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Server-side schema-based parsing validation.
-	 * 	<li>
-	 * 		Server-side generated Swagger documentation.
-	 * 	<li>
-	 * 		Client-side schema-based serializing validation.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String minimum() default "";
-
-	/**
-	 * <mk>minItems</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <p>
-	 * An array or collection is valid if its size is greater than, or equal to, the value of this keyword.
-	 *
-	 * <p>
-	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
-	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
-	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
-	 *
-	 * <p>
-	 * Only allowed for the following types: <js>"array"</js>.
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Server-side schema-based parsing validation.
-	 * 	<li>
-	 * 		Server-side generated Swagger documentation.
-	 * 	<li>
-	 * 		Client-side schema-based serializing validation.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	long minItems() default -1;
-
-	/**
-	 * Synonym for {@link #minLength()}.
-	 *
-	 * @return The annotation value.
-	 */
-	long minl() default -1;
-
-	/**
-	 * <mk>minLength</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <p>
-	 * A string instance is valid against this keyword if its length is greater than, or equal to, the value of this keyword.
-	 * <br>The length of a string instance is defined as the number of its characters as defined by <a href='https://tools.ietf.org/html/rfc4627'>RFC 4627</a>.
-	 * <br>The value <c>-1</c> is always ignored.
-	 *
-	 * <p>
-	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
-	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
-	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
-	 *
-	 * <p>
-	 * Only allowed for the following types: <js>"string"</js>.
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Server-side schema-based parsing validation.
-	 * 	<li>
-	 * 		Server-side generated Swagger documentation.
-	 * 	<li>
-	 * 		Client-side schema-based serializing validation.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	long minLength() default -1;
-
-	/**
-	 * Synonym for {@link #minProperties()}.
-	 *
-	 * @return The annotation value.
-	 */
-	long minp() default -1;
-
-	/**
-	 * <mk>minProperties</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">Swagger</a> object.
-	 * 		<br>Multiple lines are concatenated with newlines.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	long minProperties() default -1;
-
-	/**
-	 * Synonym for {@link #multipleOf()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String mo() default "";
-
-	/**
-	 * <mk>multipleOf</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <p>
-	 * A numeric instance is valid if the result of the division of the instance by this keyword's value is an integer.
-	 * <br>The value must be a valid JSON number.
-	 *
-	 * <p>
-	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
-	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
-	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
-	 *
-	 * <p>
-	 * Only allowed for the following types: <js>"integer"</js>, <js>"number"</js>.
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Server-side schema-based parsing validation.
-	 * 	<li>
-	 * 		Server-side generated Swagger documentation.
-	 * 	<li>
-	 * 		Client-side schema-based serializing validation.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String multipleOf() default "";
-
-	/**
-	 * Dynamically apply this annotation to the specified classes/methods/fields.
-	 *
-	 * <p>
-	 * Used in conjunction with {@link org.apache.juneau.BeanContext.Builder#applyAnnotations(Class...)} to dynamically apply an annotation to an existing class/method/field.
-	 * It is ignored when the annotation is applied directly to classes/methods/fields.
-	 *
-	 * <h5 class='section'>Valid patterns:</h5>
-	 * <ul class='spaced-list'>
-	 *  <li>Classes:
-	 * 		<ul>
-	 * 			<li>Fully qualified:
-	 * 				<ul>
-	 * 					<li><js>"com.foo.MyClass"</js>
-	 * 				</ul>
-	 * 			<li>Fully qualified inner class:
-	 * 				<ul>
-	 * 					<li><js>"com.foo.MyClass$Inner1$Inner2"</js>
-	 * 				</ul>
-	 * 			<li>Simple:
-	 * 				<ul>
-	 * 					<li><js>"MyClass"</js>
-	 * 				</ul>
-	 * 			<li>Simple inner:
-	 * 				<ul>
-	 * 					<li><js>"MyClass$Inner1$Inner2"</js>
-	 * 					<li><js>"Inner1$Inner2"</js>
-	 * 					<li><js>"Inner2"</js>
-	 * 				</ul>
-	 * 		</ul>
-	 * 	<li>Methods:
-	 * 		<ul>
-	 * 			<li>Fully qualified with args:
-	 * 				<ul>
-	 * 					<li><js>"com.foo.MyClass.myMethod(String,int)"</js>
-	 * 					<li><js>"com.foo.MyClass.myMethod(java.lang.String,int)"</js>
-	 * 					<li><js>"com.foo.MyClass.myMethod()"</js>
-	 * 				</ul>
-	 * 			<li>Fully qualified:
-	 * 				<ul>
-	 * 					<li><js>"com.foo.MyClass.myMethod"</js>
-	 * 				</ul>
-	 * 			<li>Simple with args:
-	 * 				<ul>
-	 * 					<li><js>"MyClass.myMethod(String,int)"</js>
-	 * 					<li><js>"MyClass.myMethod(java.lang.String,int)"</js>
-	 * 					<li><js>"MyClass.myMethod()"</js>
-	 * 				</ul>
-	 * 			<li>Simple:
-	 * 				<ul>
-	 * 					<li><js>"MyClass.myMethod"</js>
-	 * 				</ul>
-	 * 			<li>Simple inner class:
-	 * 				<ul>
-	 * 					<li><js>"MyClass$Inner1$Inner2.myMethod"</js>
-	 * 					<li><js>"Inner1$Inner2.myMethod"</js>
-	 * 					<li><js>"Inner2.myMethod"</js>
-	 * 				</ul>
-	 * 		</ul>
-	 * 	<li>Fields:
-	 * 		<ul>
-	 * 			<li>Fully qualified:
-	 * 				<ul>
-	 * 					<li><js>"com.foo.MyClass.myField"</js>
-	 * 				</ul>
-	 * 			<li>Simple:
-	 * 				<ul>
-	 * 					<li><js>"MyClass.myField"</js>
-	 * 				</ul>
-	 * 			<li>Simple inner class:
-	 * 				<ul>
-	 * 					<li><js>"MyClass$Inner1$Inner2.myField"</js>
-	 * 					<li><js>"Inner1$Inner2.myField"</js>
-	 * 					<li><js>"Inner2.myField"</js>
-	 * 				</ul>
-	 * 		</ul>
-	 * 	<li>A comma-delimited list of anything on this list.
-	 * </ul>
-	 *
-	 * <h5 class='section'>See Also:</h5><ul>
-	 * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/DynamicallyAppliedAnnotations">Dynamically Applied Annotations</a>
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String[] on() default {};
-
-	/**
-	 * Dynamically apply this annotation to the specified classes.
-	 *
-	 * <p>
-	 * Identical to {@link #on()} except allows you to specify class objects instead of a strings.
-	 *
-	 * <h5 class='section'>See Also:</h5><ul>
-	 * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/DynamicallyAppliedAnnotations">Dynamically Applied Annotations</a>
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	Class<?>[] onClass() default {};
-
-	/**
-	 * Synonym for {@link #pattern()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String p() default "";
-
-	/**
-	 * <mk>pattern</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <p>
-	 * A string input is valid if it matches the specified regular expression pattern.
-	 *
-	 * <p>
-	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
-	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
-	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bjava'>
-	 * 	<ja>@RestPut</ja>
-	 * 	<jk>public void</jk> doPut(<ja>@Content</ja> <ja>@Schema</ja>(pattern=<js>"/\\w+\\.\\d+/"</js>) String <jv>input</jv>) {...}
-	 * </p>
-	 *
-	 * <p>
-	 * Only allowed for the following types: <js>"string"</js>.
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Server-side schema-based parsing validation.
-	 * 	<li>
-	 * 		Server-side generated Swagger documentation.
-	 * 	<li>
-	 * 		Client-side schema-based serializing validation.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String pattern() default "";
-
-	/**
-	 * <mk>properties</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">Swagger</a> object.
-	 * 		<br>Multiple lines are concatenated with newlines.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String[] properties() default {};
-
-	/**
-	 * Synonym for {@link #required()}.
-	 *
-	 * @return The annotation value.
-	 */
-	boolean r() default false;
-
-	/**
-	 * <mk>readOnly</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">Swagger</a> object.
-	 * 		<br>Multiple lines are concatenated with newlines.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	boolean readOnly() default false;
-
-	/**
-	 * <mk>required</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <p>
-	 * Determines whether the parameter is mandatory.
-	 *
-	 * <p>
-	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
-	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
-	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
-	 *
-	 * <h5 class='section'>Examples:</h5>
-	 * <p class='bjava'>
-	 * 	<jc>// Used on parameter</jc>
-	 * 	<ja>@RestPost</ja>
-	 * 	<jk>public void</jk> addPet(
-	 * 		<ja>@Content</ja> <ja>@Schema</ja>(required=<jk>true</jk>) Pet <jv>input</jv>
-	 * 	) {...}
-	 * </p>
-	 * <p class='bjava'>
-	 * 	<jc>// Used on class</jc>
-	 * 	<ja>@RestPost</ja>
-	 * 	<jk>public void</jk> addPet(Pet <jv>input</jv>) {...}
-	 *
-	 * 	<ja>@Content</ja>(required=<jk>true</jk>)
-	 * 	<jk>public class</jk> Pet {...}
-	 * </p>
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Server-side schema-based parsing validation.
-	 * 	<li>
-	 * 		Server-side generated Swagger documentation.
-	 * 	<li>
-	 * 		Client-side schema-based serializing validation.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	boolean required() default false;
-
-	/**
-	 * Synonym for {@link #readOnly()}.
-	 *
-	 * @return The annotation value.
-	 */
-	boolean ro() default false;
-
-	/**
-	 * Synonym for {@link #skipIfEmpty()}.
-	 *
-	 * @return The annotation value.
-	 */
-	boolean sie() default false;
-
-	/**
-	 * Skips this value during serialization if it's an empty string or empty collection/array.
-	 *
-	 * <p>
-	 * Note that <jk>null</jk> values are already ignored.
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Client-side schema-based serializing.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	boolean skipIfEmpty() default false;
-
-	/**
-	 * Synonym for {@link #type()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String t() default "";
-
-	/**
-	 * <mk>title</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is plain text.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String title() default "";
-
-	/**
-	 * <mk>type</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <p>
-	 * The type of the parameter.
-	 *
-	 * <h5 class='section'>Examples:</h5>
-	 * <p class='bjava'>
-	 * 	<jc>// Used on parameter</jc>
-	 * 	<ja>@RestPost</ja>
-	 * 	<jk>public void</jk> addPet(
-	 * 		<ja>@Content</ja> <ja>@Schema</ja>(type=<js>"object"</js>) Pet <jv>input</jv>
-	 * 	) {...}
-	 * </p>
-	 * <p class='bjava'>
-	 * 	<jc>// Used on class</jc>
-	 * 	<ja>@RestPost</ja>
-	 * 	<jk>public void</jk> addPet(Pet <jv>input</jv>) {...}
-	 *
-	 * 	<ja>@Content</ja> <ja>@Schema</ja>(type=<js>"object"</js>)
-	 * 	<jk>public class</jk> Pet {...}
-	 * </p>
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Server-side schema-based parsing.
-	 * 	<li>
-	 * 		Server-side generated Swagger documentation.
-	 * 	<li>
-	 * 		Client-side schema-based serializing.
-	 * </ul>
-	 *
-	 * <ul class='values spaced-list'>
-	 * 	<li>
-	 * 		<js>"string"</js>
-	 * 		<br>Parameter must be a string or a POJO convertible from a string.
-	 * 	<li>
-	 * 		<js>"number"</js>
-	 * 		<br>Parameter must be a number primitive or number object.
-	 * 		<br>If parameter is <c>Object</c>, creates either a <c>Float</c> or <c>Double</c> depending on the size of the number.
-	 * 	<li>
-	 * 		<js>"integer"</js>
-	 * 		<br>Parameter must be a integer/long primitive or integer/long object.
-	 * 		<br>If parameter is <c>Object</c>, creates either a <c>Short</c>, <c>Integer</c>, or <c>Long</c> depending on the size of the number.
-	 * 	<li>
-	 * 		<js>"boolean"</js>
-	 * 		<br>Parameter must be a boolean primitive or object.
-	 * 	<li>
-	 * 		<js>"array"</js>
-	 * 		<br>Parameter must be an array or collection.
-	 * 		<br>Elements must be strings or POJOs convertible from strings.
-	 * 		<br>If parameter is <c>Object</c>, creates an {@link JsonList}.
-	 * 	<li>
-	 * 		<js>"object"</js>
-	 * 		<br>Parameter must be a map or bean.
-	 * 		<br>If parameter is <c>Object</c>, creates an {@link JsonMap}.
-	 * 		<br>Note that this is an extension of the OpenAPI schema as Juneau allows for arbitrarily-complex POJOs to be serialized as HTTP parts.
-	 * 	<li>
-	 * 		<js>"file"</js>
-	 * 		<br>This type is currently not supported.
-	 * </ul>
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>Static strings are defined in {@link ParameterType}.
-	 * </ul>
-	 *
-	 * <h5 class='section'>See Also:</h5><ul>
-	 * 	<li class='extlink'><a class="doclink" href="https://swagger.io/specification#dataTypes">Swagger Data Types</a>
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String type() default "";
-
-	/**
-	 * Synonym for {@link #uniqueItems()}.
-	 *
-	 * @return The annotation value.
-	 */
-	boolean ui() default false;
-
-	/**
-	 * <mk>uniqueItems</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <p>
-	 * If <jk>true</jk> the input validates successfully if all of its elements are unique.
-	 *
-	 * <p>
-	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
-	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
-	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
-	 *
-	 * <p>
-	 * If the parameter type is a subclass of {@link Set}, this validation is skipped (since a set can only contain unique items anyway).
-	 * <br>Otherwise, the collection or array is checked for duplicate items.
-	 *
-	 * <p>
-	 * Only allowed for the following types: <js>"array"</js>.
-	 *
-	 * <h5 class='section'>Used for:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Server-side schema-based parsing validation.
-	 * 	<li>
-	 * 		Server-side generated Swagger documentation.
-	 * 	<li>
-	 * 		Client-side schema-based serializing validation.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	boolean uniqueItems() default false;
-
-	/**
-	 * <mk>xml</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">Swagger</a> object.
-	 * 		<br>Multiple lines are concatenated with newlines.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String[] xml() default {};
-}
\ No newline at end of file
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.annotation;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+import java.lang.annotation.*;
+import java.util.*;
+
+import org.apache.juneau.collections.*;
+import org.apache.juneau.http.annotation.*;
+import org.apache.juneau.httppart.*;
+import org.apache.juneau.oapi.*;
+
+/**
+ * Swagger schema annotation.
+ *
+ * <p>
+ * The Schema Object allows the definition of input and output data types.
+ * These types can be objects, but also primitives and arrays.
+ * This object is based on the JSON Schema Specification Draft 4 and uses a predefined subset of it.
+ * On top of this subset, there are extensions provided by this specification to allow for more complete documentation.
+ *
+ * <p>
+ * Used to populate the auto-generated Swagger documentation and UI for server-side <ja>@Rest</ja>-annotated classes.
+ * <br>Also used to define OpenAPI schema information for POJOs serialized through {@link OpenApiSerializer} and parsed through {@link OpenApiParser}.
+ *
+ * <h5 class='section'>Examples:</h5>
+ * <p class='bjava'>
+ * 	<jc>// A response object thats a hex-encoded string</jc>
+ * 	<ja>@Response</ja>(
+ * 		schema=<ja>@Schema</ja>(
+ * 			type=<js>"string"</js>,
+ * 			format=<js>"binary"</js>
+ * 		)
+ * 	)
+ * </p>
+ * <p class='bjava'>
+ * 	<jc>// A request body consisting of an array of arrays, the internal
+ * 	// array being of type integer, numbers must be between 0 and 63 (inclusive)</jc>
+ * 	<ja>@Content</ja>(
+ * 		schema=<ja>@Schema</ja>(
+ * 			items=<ja>@Items</ja>(
+ * 				type=<js>"array"</js>,
+ * 				items=<ja>@SubItems</ja>(
+ * 					type=<js>"integer"</js>,
+ * 					minimum=<js>"0"</js>,
+ * 					maximum=<js>"63"</js>
+ * 				)
+ *			)
+ * 		)
+ * 	)
+ * </p>
+ *
+ * <h5 class='section'>See Also:</h5><ul>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
+ * 	<li class='extlink'><a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>
+
+ * </ul>
+ */
+@Documented
+@Target({PARAMETER,METHOD,TYPE,FIELD})
+@Retention(RUNTIME)
+@Repeatable(SchemaAnnotation.Array.class)
+@ContextApply(SchemaAnnotation.Apply.class)
+public @interface Schema {
+
+	/**
+	 * <mk>default</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <p>
+	 * Declares the value of the parameter that the server will use if none is provided, for example a "count" to control the number of results per page might default to 100 if not supplied by the client in the request.
+	 * <br>(Note: "default" has no meaning for required parameters.)
+	 *
+	 * <p>
+	 * Additionally, this value is used to create instances of POJOs that are then serialized as language-specific examples in the generated Swagger documentation
+	 * if the examples are not defined in some other way.
+	 *
+	 * <p>
+	 * The format of this value is a string.
+	 * <br>Multiple lines are concatenated with newlines.
+	 *
+	 * <h5 class='section'>Examples:</h5>
+	 * <p class='bjava'>
+	 * 	<jk>public</jk> Order placeOrder(
+	 * 		<ja>@Header</ja>(<js>"X-PetId"</js>)
+	 * 		<ja>@Schema</ja>(_default=<js>"100"</js>)
+	 * 		<jk>long</jk> <jv>petId</jv>,
+	 *
+	 * 		<ja>@Header</ja>(<js>"X-AdditionalInfo"</js>)
+	 * 		<ja>@Schema</ja>(format=<js>"uon"</js>, _default=<js>"(rushOrder=false)"</js>)
+	 * 		AdditionalInfo <jv>additionalInfo</jv>,
+	 *
+	 * 		<ja>@Header</ja>(<js>"X-Flags"</js>)
+	 * 		<ja>@Schema</ja>(collectionFormat=<js>"uon"</js>, _default=<js>"@(new-customer)"</js>)
+	 * 		String[] <jv>flags</jv>
+	 * 	) {...}
+	 * </p>
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Server-side schema-based parsing.
+	 * 	<li>
+	 * 		Server-side generated Swagger documentation.
+	 * 	<li>
+	 * 		Client-side schema-based serializing.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String[] _default() default {};
+
+	/**
+	 * <mk>enum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <p>
+	 * If specified, the input validates successfully if it is equal to one of the elements in this array.
+	 *
+	 * <p>
+	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
+	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
+	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
+	 *
+	 * <p>
+	 * The format is either individual values or a comma-delimited list.
+	 * <br>Multiple lines are concatenated with newlines.
+	 *
+	 * <h5 class='section'>Examples:</h5>
+	 * <p class='bjava'>
+	 * 	<jc>// Comma-delimited list</jc>
+	 * 	<jk>public</jk> Collection&lt;Pet&gt; findPetsByStatus(
+	 * 		<ja>@Header</ja>(<js>"X-Status"</js>)
+	 * 		<ja>@Schema</ja>(_enum=<js>"AVAILABLE,PENDING,SOLD"</js>)
+	 * 		PetStatus <jv>status</jv>
+	 * 	) {...}
+	 * </p>
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Server-side schema-based parsing validation.
+	 * 	<li>
+	 * 		Server-side generated Swagger documentation.
+	 * 	<li>
+	 * 		Client-side schema-based serializing validation.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String[] _enum() default {};
+
+	/**
+	 * <mk>$ref</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <p>
+	 * 	A JSON reference to the schema definition.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a <a href='https://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03'>JSON Reference</a>.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String $ref() default "";
+
+	/**
+	 * <mk>additionalProperties</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a> object.
+	 * 		<br>Multiple lines are concatenated with newlines.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String[] additionalProperties() default {};
+
+	/**
+	 * <mk>allOf</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a> object.
+	 * 		<br>Multiple lines are concatenated with newlines.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String[] allOf() default {};
+
+	/**
+	 * Synonym for {@link #allowEmptyValue()}.
+	 *
+	 * @return The annotation value.
+	 */
+	boolean aev() default false;
+
+	/**
+	 * <mk>allowEmptyValue</mk> field of the <a class='doclink' href='https://swagger.io/specification/v2#parameterObject'>Swagger Parameter Object</a>.
+	 *
+	 * <p>
+	 * Sets the ability to pass empty-valued heaver values.
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Server-side schema-based parsing validation.
+	 * 	<li>
+	 * 		Server-side generated Swagger documentation.
+	 * 	<li>
+	 * 		Client-side schema-based serializing validation.
+	 * </ul>
+	 *
+	 * <p>
+	 * <b>Note:</b>  This is technically only valid for either query or formData parameters, but support is provided anyway for backwards compatability.
+	 *
+	 * @return The annotation value.
+	 */
+	boolean allowEmptyValue() default false;
+
+	/**
+	 * Synonym for {@link #collectionFormat()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String cf() default "";
+
+	/**
+	 * <mk>collectionFormat</mk> field.
+	 *
+	 * <p>
+	 * Note that this field isn't part of the Swagger 2.0 specification, but the specification does not specify how
+	 * items are supposed to be represented.
+	 *
+	 * <p>
+	 * Determines the format of the array if <c>type</c> <js>"array"</js> is used.
+	 * <br>Can only be used if <c>type</c> is <js>"array"</js>.
+	 *
+	 * <p>
+	 * Static strings are defined in {@link CollectionFormatType}.
+	 *
+	 * <p>
+	 * Note that for collections/arrays parameters with POJO element types, the input is broken into a string array before being converted into POJO elements.
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Server-side schema-based parsing.
+	 * 	<li>
+	 * 		Server-side generated Swagger documentation.
+	 * 	<li>
+	 * 		Client-side schema-based serializing.
+	 * </ul>
+	 *
+	 * <p>
+	 * Note that for collections/arrays parameters with POJO element types, the input is broken into a string array before being converted into POJO elements.
+	 *
+	 * <ul class='values'>
+	 * 	<li><js>"csv"</js> (default) - Comma-separated values (e.g. <js>"foo,bar"</js>).
+	 * 	<li><js>"ssv"</js> - Space-separated values (e.g. <js>"foo bar"</js>).
+	 * 	<li><js>"tsv"</js> - Tab-separated values (e.g. <js>"foo\tbar"</js>).
+	 * 	<li><js>"pipes</js> - Pipe-separated values (e.g. <js>"foo|bar"</js>).
+	 * 	<li><js>"multi"</js> - Corresponds to multiple parameter instances instead of multiple values for a single instance (e.g. <js>"foo=bar&amp;foo=baz"</js>).
+	 * 	<li><js>"uon"</js> - UON notation (e.g. <js>"@(foo,bar)"</js>).
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String collectionFormat() default "";
+
+	/**
+	 * Synonym for {@link #description()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String[] d() default {};
+
+	/**
+	 * <mk>description</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <p>
+	 * A brief description of the body. This could contain examples of use.
+	 *
+	 * <h5 class='section'>Examples:</h5>
+	 * <p class='bjava'>
+	 * 	<jc>// Used on parameter</jc>
+	 * 	<ja>@RestPost</ja>
+	 * 	<jk>public void</jk> addPet(
+	 * 		<ja>@Content</ja> <ja>@Schema</ja>(description=<js>"Pet object to add to the store"</js>) Pet <jv>input</jv>
+	 * 	) {...}
+	 * </p>
+	 * <p class='bjava'>
+	 * 	<jc>// Used on class</jc>
+	 * 	<ja>@RestPost</ja>
+	 * 	<jk>public void</jk> addPet(Pet <jv>input</jv>) {...}
+	 *
+	 * 	<ja>@Content</ja> <ja>@Schema</ja>(description=<js>"Pet object to add to the store"</js>)
+	 * 	<jk>public class</jk> Pet {...}
+	 * </p>
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is plain text.
+	 * 		<br>Multiple lines are concatenated with newlines.
+	 * 	<li class='note'>
+	 * 		Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerSvlVariables">SVL Variables</a> (e.g. <js>"$L{my.localized.variable}"</js>) for the swagger generator.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String[] description() default {};
+
+	/**
+	 * Synonym for {@link #_default()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String[] df() default {};
+
+	/**
+	 * <mk>discriminator</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a> object.
+	 * 		<br>Multiple lines are concatenated with newlines.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String discriminator() default "";
+
+	/**
+	 * Synonym for {@link #_enum()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String[] e() default {};
+
+	/**
+	 * Synonym for {@link #exclusiveMaximum()}.
+	 *
+	 * @return The annotation value.
+	 */
+	boolean emax() default false;
+
+	/**
+	 * Synonym for {@link #exclusiveMinimum()}.
+	 *
+	 * @return The annotation value.
+	 */
+	boolean emin() default false;
+
+	/**
+	 * <mk>exclusiveMaximum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <p>
+	 * Defines whether the maximum is matched exclusively.
+	 *
+	 * <p>
+	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
+	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
+	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
+	 *
+	 * <p>
+	 * Only allowed for the following types: <js>"integer"</js>, <js>"number"</js>.
+	 * <br>If <jk>true</jk>, must be accompanied with <c>maximum</c>.
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Server-side schema-based parsing validation.
+	 * 	<li>
+	 * 		Server-side generated Swagger documentation.
+	 * 	<li>
+	 * 		Client-side schema-based serializing validation.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	boolean exclusiveMaximum() default false;
+
+	/**
+	 * <mk>exclusiveMinimum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <p>
+	 * Defines whether the minimum is matched exclusively.
+	 *
+	 * <p>
+	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
+	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
+	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
+	 *
+	 * <p>
+	 * Only allowed for the following types: <js>"integer"</js>, <js>"number"</js>.
+	 * <br>If <jk>true</jk>, must be accompanied with <c>minimum</c>.
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Server-side schema-based parsing validation.
+	 * 	<li>
+	 * 		Server-side generated Swagger documentation.
+	 * 	<li>
+	 * 		Client-side schema-based serializing validation.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	boolean exclusiveMinimum() default false;
+
+	/**
+	 * <mk>externalDocs</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a> object.
+	 * 		<br>Multiple lines are concatenated with newlines.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	ExternalDocs externalDocs() default @ExternalDocs;
+
+	/**
+	 * Synonym for {@link #format()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String f() default "";
+
+	/**
+	 * <mk>format</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <p>
+	 * The extending format for the previously mentioned <a class="doclink" href="https://swagger.io/specification/v2#parameterType">parameter type</a>.
+	 *
+	 * <p>
+	 * Static strings are defined in {@link FormatType}.
+	 *
+	 * <h5 class='section'>Examples:</h5>
+	 * <p class='bjava'>
+	 * 	<jc>// Used on parameter</jc>
+	 * 	<ja>@RestPut</ja>
+	 * 	<jk>public void</jk> setAge(
+	 * 		<ja>@Content</ja> <ja>@Schema</ja>(type=<js>"integer"</js>, format=<js>"int32"</js>) String <jv>input</jv>
+	 * 	) {...}
+	 * </p>
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Server-side schema-based parsing.
+	 * 	<li>
+	 * 		Server-side generated Swagger documentation.
+	 * 	<li>
+	 * 		Client-side schema-based serializing.
+	 * </ul>
+	 *
+	 * <ul class='values'>
+	 * 	<li>
+	 * 		<js>"int32"</js> - Signed 32 bits.
+	 * 		<br>Only valid with type <js>"integer"</js>.
+	 * 	<li>
+	 * 		<js>"int64"</js> - Signed 64 bits.
+	 * 		<br>Only valid with type <js>"integer"</js>.
+	 * 	<li>
+	 * 		<js>"float"</js> - 32-bit floating point number.
+	 * 		<br>Only valid with type <js>"number"</js>.
+	 * 	<li>
+	 * 		<js>"double"</js> - 64-bit floating point number.
+	 * 		<br>Only valid with type <js>"number"</js>.
+	 * 	<li>
+	 * 		<js>"byte"</js> - BASE-64 encoded characters.
+	 * 		<br>Only valid with type <js>"string"</js>.
+	 * 		<br>Parameters of type POJO convertible from string are converted after the string has been decoded.
+	 * 	<li>
+	 * 		<js>"binary"</js> - Hexadecimal encoded octets (e.g. <js>"00FF"</js>).
+	 * 		<br>Only valid with type <js>"string"</js>.
+	 * 		<br>Parameters of type POJO convertible from string are converted after the string has been decoded.
+	 * 	<li>
+	 * 		<js>"date"</js> - An <a href='http://xml2rfc.ietf.org/public/rfc/html/rfc3339.html#anchor14'>RFC3339 full-date</a>.
+	 * 		<br>Only valid with type <js>"string"</js>.
+	 * 	<li>
+	 * 		<js>"date-time"</js> - An <a href='http://xml2rfc.ietf.org/public/rfc/html/rfc3339.html#anchor14'>RFC3339 date-time</a>.
+	 * 		<br>Only valid with type <js>"string"</js>.
+	 * 	<li>
+	 * 		<js>"password"</js> - Used to hint UIs the input needs to be obscured.
+	 * 		<br>This format does not affect the serialization or parsing of the parameter.
+	 * 	<li>
+	 * 		<js>"uon"</js> - UON notation (e.g. <js>"(foo=bar,baz=@(qux,123))"</js>).
+	 * 		<br>Only valid with type <js>"object"</js>.
+	 * 		<br>If not specified, then the input is interpreted as plain-text and is converted to a POJO directly.
+	 * </ul>
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is plain text.
+	 * </ul>
+	 *
+	 * <h5 class='section'>See Also:</h5><ul>
+	 * 	<li class='extlink'><a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String format() default "";
+
+	/**
+	 * Specifies that schema information for this part should not be shown in the generated Swagger documentation.
+	 *
+	 * @return The annotation value.
+	 */
+	boolean ignore() default false;
+
+	/**
+	 * <mk>items</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <p>
+	 * Describes the type of items in the array.
+	 *
+	 * <p>
+	 * Required if <c>type</c> is <js>"array"</js>.
+	 * <br>Can only be used if <c>type</c> is <js>"array"</js>.
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Server-side schema-based parsing and parsing validation.
+	 * 	<li>
+	 * 		Server-side generated Swagger documentation.
+	 * 	<li>
+	 * 		Client-side schema-based serializing and serializing validation.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	Items items() default @Items;
+
+	/**
+	 * Synonym for {@link #maximum()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String max() default "";
+
+	/**
+	 * Synonym for {@link #maxItems()}.
+	 *
+	 * @return The annotation value.
+	 */
+	long maxi() default -1;
+
+	/**
+	 * <mk>maximum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <p>
+	 * Defines the maximum value for a parameter of numeric types.
+	 * <br>The value must be a valid JSON number.
+	 *
+	 * <p>
+	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
+	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
+	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
+	 *
+	 * <p>
+	 * Only allowed for the following types: <js>"integer"</js>, <js>"number"</js>.
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Server-side schema-based parsing validation.
+	 * 	<li>
+	 * 		Server-side generated Swagger documentation.
+	 * 	<li>
+	 * 		Client-side schema-based serializing validation.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String maximum() default "";
+
+	/**
+	 * <mk>maxItems</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <p>
+	 * An array or collection is valid if its size is less than, or equal to, the value of this keyword.
+	 *
+	 * <p>
+	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
+	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
+	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
+	 *
+	 * <p>
+	 * Only allowed for the following types: <js>"array"</js>.
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Server-side schema-based parsing validation.
+	 * 	<li>
+	 * 		Server-side generated Swagger documentation.
+	 * 	<li>
+	 * 		Client-side schema-based serializing validation.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	long maxItems() default -1;
+
+	/**
+	 * Synonym for {@link #maxLength()}.
+	 *
+	 * @return The annotation value.
+	 */
+	long maxl() default -1;
+
+	/**
+	 * <mk>maxLength</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <p>
+	 * A string instance is valid against this keyword if its length is less than, or equal to, the value of this keyword.
+	 * <br>The length of a string instance is defined as the number of its characters as defined by <a href='https://tools.ietf.org/html/rfc4627'>RFC 4627</a>.
+	 * <br>The value <c>-1</c> is always ignored.
+	 *
+	 * <p>
+	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
+	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
+	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
+	 *
+	 * <p>
+	 * Only allowed for the following types: <js>"string"</js>.
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Server-side schema-based parsing validation.
+	 * 	<li>
+	 * 		Server-side generated Swagger documentation.
+	 * 	<li>
+	 * 		Client-side schema-based serializing validation.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	long maxLength() default -1;
+
+	/**
+	 * Synonym for {@link #maxProperties()}.
+	 *
+	 * @return The annotation value.
+	 */
+	long maxp() default -1;
+
+	/**
+	 * <mk>maxProperties</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a> object.
+	 * 		<br>Multiple lines are concatenated with newlines.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	long maxProperties() default -1;
+
+	/**
+	 * Synonym for {@link #minimum()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String min() default "";
+
+	/**
+	 * Synonym for {@link #minItems()}.
+	 *
+	 * @return The annotation value.
+	 */
+	long mini() default -1;
+
+	/**
+	 * <mk>minimum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <p>
+	 * Defines the minimum value for a parameter of numeric types.
+	 * <br>The value must be a valid JSON number.
+	 *
+	 * <p>
+	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
+	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
+	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
+	 *
+	 * <p>
+	 * Only allowed for the following types: <js>"integer"</js>, <js>"number"</js>.
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Server-side schema-based parsing validation.
+	 * 	<li>
+	 * 		Server-side generated Swagger documentation.
+	 * 	<li>
+	 * 		Client-side schema-based serializing validation.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String minimum() default "";
+
+	/**
+	 * <mk>minItems</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <p>
+	 * An array or collection is valid if its size is greater than, or equal to, the value of this keyword.
+	 *
+	 * <p>
+	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
+	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
+	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
+	 *
+	 * <p>
+	 * Only allowed for the following types: <js>"array"</js>.
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Server-side schema-based parsing validation.
+	 * 	<li>
+	 * 		Server-side generated Swagger documentation.
+	 * 	<li>
+	 * 		Client-side schema-based serializing validation.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	long minItems() default -1;
+
+	/**
+	 * Synonym for {@link #minLength()}.
+	 *
+	 * @return The annotation value.
+	 */
+	long minl() default -1;
+
+	/**
+	 * <mk>minLength</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <p>
+	 * A string instance is valid against this keyword if its length is greater than, or equal to, the value of this keyword.
+	 * <br>The length of a string instance is defined as the number of its characters as defined by <a href='https://tools.ietf.org/html/rfc4627'>RFC 4627</a>.
+	 * <br>The value <c>-1</c> is always ignored.
+	 *
+	 * <p>
+	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
+	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
+	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
+	 *
+	 * <p>
+	 * Only allowed for the following types: <js>"string"</js>.
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Server-side schema-based parsing validation.
+	 * 	<li>
+	 * 		Server-side generated Swagger documentation.
+	 * 	<li>
+	 * 		Client-side schema-based serializing validation.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	long minLength() default -1;
+
+	/**
+	 * Synonym for {@link #minProperties()}.
+	 *
+	 * @return The annotation value.
+	 */
+	long minp() default -1;
+
+	/**
+	 * <mk>minProperties</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a> object.
+	 * 		<br>Multiple lines are concatenated with newlines.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	long minProperties() default -1;
+
+	/**
+	 * Synonym for {@link #multipleOf()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String mo() default "";
+
+	/**
+	 * <mk>multipleOf</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <p>
+	 * A numeric instance is valid if the result of the division of the instance by this keyword's value is an integer.
+	 * <br>The value must be a valid JSON number.
+	 *
+	 * <p>
+	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
+	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
+	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
+	 *
+	 * <p>
+	 * Only allowed for the following types: <js>"integer"</js>, <js>"number"</js>.
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Server-side schema-based parsing validation.
+	 * 	<li>
+	 * 		Server-side generated Swagger documentation.
+	 * 	<li>
+	 * 		Client-side schema-based serializing validation.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String multipleOf() default "";
+
+	/**
+	 * Dynamically apply this annotation to the specified classes/methods/fields.
+	 *
+	 * <p>
+	 * Used in conjunction with {@link org.apache.juneau.BeanContext.Builder#applyAnnotations(Class...)} to dynamically apply an annotation to an existing class/method/field.
+	 * It is ignored when the annotation is applied directly to classes/methods/fields.
+	 *
+	 * <h5 class='section'>Valid patterns:</h5>
+	 * <ul class='spaced-list'>
+	 *  <li>Classes:
+	 * 		<ul>
+	 * 			<li>Fully qualified:
+	 * 				<ul>
+	 * 					<li><js>"com.foo.MyClass"</js>
+	 * 				</ul>
+	 * 			<li>Fully qualified inner class:
+	 * 				<ul>
+	 * 					<li><js>"com.foo.MyClass$Inner1$Inner2"</js>
+	 * 				</ul>
+	 * 			<li>Simple:
+	 * 				<ul>
+	 * 					<li><js>"MyClass"</js>
+	 * 				</ul>
+	 * 			<li>Simple inner:
+	 * 				<ul>
+	 * 					<li><js>"MyClass$Inner1$Inner2"</js>
+	 * 					<li><js>"Inner1$Inner2"</js>
+	 * 					<li><js>"Inner2"</js>
+	 * 				</ul>
+	 * 		</ul>
+	 * 	<li>Methods:
+	 * 		<ul>
+	 * 			<li>Fully qualified with args:
+	 * 				<ul>
+	 * 					<li><js>"com.foo.MyClass.myMethod(String,int)"</js>
+	 * 					<li><js>"com.foo.MyClass.myMethod(java.lang.String,int)"</js>
+	 * 					<li><js>"com.foo.MyClass.myMethod()"</js>
+	 * 				</ul>
+	 * 			<li>Fully qualified:
+	 * 				<ul>
+	 * 					<li><js>"com.foo.MyClass.myMethod"</js>
+	 * 				</ul>
+	 * 			<li>Simple with args:
+	 * 				<ul>
+	 * 					<li><js>"MyClass.myMethod(String,int)"</js>
+	 * 					<li><js>"MyClass.myMethod(java.lang.String,int)"</js>
+	 * 					<li><js>"MyClass.myMethod()"</js>
+	 * 				</ul>
+	 * 			<li>Simple:
+	 * 				<ul>
+	 * 					<li><js>"MyClass.myMethod"</js>
+	 * 				</ul>
+	 * 			<li>Simple inner class:
+	 * 				<ul>
+	 * 					<li><js>"MyClass$Inner1$Inner2.myMethod"</js>
+	 * 					<li><js>"Inner1$Inner2.myMethod"</js>
+	 * 					<li><js>"Inner2.myMethod"</js>
+	 * 				</ul>
+	 * 		</ul>
+	 * 	<li>Fields:
+	 * 		<ul>
+	 * 			<li>Fully qualified:
+	 * 				<ul>
+	 * 					<li><js>"com.foo.MyClass.myField"</js>
+	 * 				</ul>
+	 * 			<li>Simple:
+	 * 				<ul>
+	 * 					<li><js>"MyClass.myField"</js>
+	 * 				</ul>
+	 * 			<li>Simple inner class:
+	 * 				<ul>
+	 * 					<li><js>"MyClass$Inner1$Inner2.myField"</js>
+	 * 					<li><js>"Inner1$Inner2.myField"</js>
+	 * 					<li><js>"Inner2.myField"</js>
+	 * 				</ul>
+	 * 		</ul>
+	 * 	<li>A comma-delimited list of anything on this list.
+	 * </ul>
+	 *
+	 * <h5 class='section'>See Also:</h5><ul>
+	 * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/DynamicallyAppliedAnnotations">Dynamically Applied Annotations</a>
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String[] on() default {};
+
+	/**
+	 * Dynamically apply this annotation to the specified classes.
+	 *
+	 * <p>
+	 * Identical to {@link #on()} except allows you to specify class objects instead of a strings.
+	 *
+	 * <h5 class='section'>See Also:</h5><ul>
+	 * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/DynamicallyAppliedAnnotations">Dynamically Applied Annotations</a>
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	Class<?>[] onClass() default {};
+
+	/**
+	 * Synonym for {@link #pattern()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String p() default "";
+
+	/**
+	 * <mk>pattern</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <p>
+	 * A string input is valid if it matches the specified regular expression pattern.
+	 *
+	 * <p>
+	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
+	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
+	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bjava'>
+	 * 	<ja>@RestPut</ja>
+	 * 	<jk>public void</jk> doPut(<ja>@Content</ja> <ja>@Schema</ja>(pattern=<js>"/\\w+\\.\\d+/"</js>) String <jv>input</jv>) {...}
+	 * </p>
+	 *
+	 * <p>
+	 * Only allowed for the following types: <js>"string"</js>.
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Server-side schema-based parsing validation.
+	 * 	<li>
+	 * 		Server-side generated Swagger documentation.
+	 * 	<li>
+	 * 		Client-side schema-based serializing validation.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String pattern() default "";
+
+	/**
+	 * <mk>properties</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a> object.
+	 * 		<br>Multiple lines are concatenated with newlines.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String[] properties() default {};
+
+	/**
+	 * Synonym for {@link #required()}.
+	 *
+	 * @return The annotation value.
+	 */
+	boolean r() default false;
+
+	/**
+	 * <mk>readOnly</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a> object.
+	 * 		<br>Multiple lines are concatenated with newlines.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	boolean readOnly() default false;
+
+	/**
+	 * <mk>required</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <p>
+	 * Determines whether the parameter is mandatory.
+	 *
+	 * <p>
+	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
+	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
+	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
+	 *
+	 * <h5 class='section'>Examples:</h5>
+	 * <p class='bjava'>
+	 * 	<jc>// Used on parameter</jc>
+	 * 	<ja>@RestPost</ja>
+	 * 	<jk>public void</jk> addPet(
+	 * 		<ja>@Content</ja> <ja>@Schema</ja>(required=<jk>true</jk>) Pet <jv>input</jv>
+	 * 	) {...}
+	 * </p>
+	 * <p class='bjava'>
+	 * 	<jc>// Used on class</jc>
+	 * 	<ja>@RestPost</ja>
+	 * 	<jk>public void</jk> addPet(Pet <jv>input</jv>) {...}
+	 *
+	 * 	<ja>@Content</ja>(required=<jk>true</jk>)
+	 * 	<jk>public class</jk> Pet {...}
+	 * </p>
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Server-side schema-based parsing validation.
+	 * 	<li>
+	 * 		Server-side generated Swagger documentation.
+	 * 	<li>
+	 * 		Client-side schema-based serializing validation.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	boolean required() default false;
+
+	/**
+	 * Synonym for {@link #readOnly()}.
+	 *
+	 * @return The annotation value.
+	 */
+	boolean ro() default false;
+
+	/**
+	 * Synonym for {@link #skipIfEmpty()}.
+	 *
+	 * @return The annotation value.
+	 */
+	boolean sie() default false;
+
+	/**
+	 * Skips this value during serialization if it's an empty string or empty collection/array.
+	 *
+	 * <p>
+	 * Note that <jk>null</jk> values are already ignored.
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Client-side schema-based serializing.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	boolean skipIfEmpty() default false;
+
+	/**
+	 * Synonym for {@link #type()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String t() default "";
+
+	/**
+	 * <mk>title</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is plain text.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String title() default "";
+
+	/**
+	 * <mk>type</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <p>
+	 * The type of the parameter.
+	 *
+	 * <h5 class='section'>Examples:</h5>
+	 * <p class='bjava'>
+	 * 	<jc>// Used on parameter</jc>
+	 * 	<ja>@RestPost</ja>
+	 * 	<jk>public void</jk> addPet(
+	 * 		<ja>@Content</ja> <ja>@Schema</ja>(type=<js>"object"</js>) Pet <jv>input</jv>
+	 * 	) {...}
+	 * </p>
+	 * <p class='bjava'>
+	 * 	<jc>// Used on class</jc>
+	 * 	<ja>@RestPost</ja>
+	 * 	<jk>public void</jk> addPet(Pet <jv>input</jv>) {...}
+	 *
+	 * 	<ja>@Content</ja> <ja>@Schema</ja>(type=<js>"object"</js>)
+	 * 	<jk>public class</jk> Pet {...}
+	 * </p>
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Server-side schema-based parsing.
+	 * 	<li>
+	 * 		Server-side generated Swagger documentation.
+	 * 	<li>
+	 * 		Client-side schema-based serializing.
+	 * </ul>
+	 *
+	 * <ul class='values spaced-list'>
+	 * 	<li>
+	 * 		<js>"string"</js>
+	 * 		<br>Parameter must be a string or a POJO convertible from a string.
+	 * 	<li>
+	 * 		<js>"number"</js>
+	 * 		<br>Parameter must be a number primitive or number object.
+	 * 		<br>If parameter is <c>Object</c>, creates either a <c>Float</c> or <c>Double</c> depending on the size of the number.
+	 * 	<li>
+	 * 		<js>"integer"</js>
+	 * 		<br>Parameter must be a integer/long primitive or integer/long object.
+	 * 		<br>If parameter is <c>Object</c>, creates either a <c>Short</c>, <c>Integer</c>, or <c>Long</c> depending on the size of the number.
+	 * 	<li>
+	 * 		<js>"boolean"</js>
+	 * 		<br>Parameter must be a boolean primitive or object.
+	 * 	<li>
+	 * 		<js>"array"</js>
+	 * 		<br>Parameter must be an array or collection.
+	 * 		<br>Elements must be strings or POJOs convertible from strings.
+	 * 		<br>If parameter is <c>Object</c>, creates an {@link JsonList}.
+	 * 	<li>
+	 * 		<js>"object"</js>
+	 * 		<br>Parameter must be a map or bean.
+	 * 		<br>If parameter is <c>Object</c>, creates an {@link JsonMap}.
+	 * 		<br>Note that this is an extension of the OpenAPI schema as Juneau allows for arbitrarily-complex POJOs to be serialized as HTTP parts.
+	 * 	<li>
+	 * 		<js>"file"</js>
+	 * 		<br>This type is currently not supported.
+	 * </ul>
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>Static strings are defined in {@link ParameterType}.
+	 * </ul>
+	 *
+	 * <h5 class='section'>See Also:</h5><ul>
+	 * 	<li class='extlink'><a class="doclink" href="https://swagger.io/specification#dataTypes">Swagger Data Types</a>
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String type() default "";
+
+	/**
+	 * Synonym for {@link #uniqueItems()}.
+	 *
+	 * @return The annotation value.
+	 */
+	boolean ui() default false;
+
+	/**
+	 * <mk>uniqueItems</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <p>
+	 * If <jk>true</jk> the input validates successfully if all of its elements are unique.
+	 *
+	 * <p>
+	 * If validation fails during serialization or parsing, the part serializer/parser will throw a {@link SchemaValidationException}.
+	 * <br>On the client-side, this gets converted to a <c>RestCallException</c> which is thrown before the connection is made.
+	 * <br>On the server-side, this gets converted to a <c>BadRequest</c> (400).
+	 *
+	 * <p>
+	 * If the parameter type is a subclass of {@link Set}, this validation is skipped (since a set can only contain unique items anyway).
+	 * <br>Otherwise, the collection or array is checked for duplicate items.
+	 *
+	 * <p>
+	 * Only allowed for the following types: <js>"array"</js>.
+	 *
+	 * <h5 class='section'>Used for:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Server-side schema-based parsing validation.
+	 * 	<li>
+	 * 		Server-side generated Swagger documentation.
+	 * 	<li>
+	 * 		Client-side schema-based serializing validation.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	boolean uniqueItems() default false;
+
+	/**
+	 * <mk>xml</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#schemaObject">Swagger Schema Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a> object.
+	 * 		<br>Multiple lines are concatenated with newlines.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String[] xml() default {};
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SubItems.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SubItems.java
index fb488a1cc..afeef80c0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SubItems.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SubItems.java
@@ -1,375 +1,376 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.annotation;
-
-import static java.lang.annotation.RetentionPolicy.*;
-
-import java.lang.annotation.*;
-
-/**
- * Swagger items annotation.
- *
- * <p>
- * This class is essentially identical to {@link Items} except it's used for defining items of items.
- *
- * <p>
- * Since annotations cannot be nested, we're forced to create a separate annotation for it.
- * <br>If you want to nest items further, you have to define them free-form using {@link #items()} as free-form JSON.
- *
- * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">Swagger</a>
- * 	<li class='extlink'><a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>
- * </ul>
- */
-@Documented
-@Retention(RUNTIME)
-public @interface SubItems {
-
-	/**
-	 * <mk>default</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String[] _default() default {};
-
-    /**
-     * Optional description for the exposed API.
-     *
-     * @return The annotation value.
-     * @since 9.2.0
-     */
-    String[] description() default {};
-
-	/**
-	 * <mk>enum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String[] _enum() default {};
-
-	/**
-	 * <mk>$ref</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String $ref() default "";
-
-	/**
-	 * Synonym for {@link #collectionFormat()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String cf() default "";
-
-	/**
-	 * <mk>collectionFormat</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String collectionFormat() default "";
-
-	/**
-	 * Synonym for {@link #_default()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String[] df() default {};
-
-	/**
-	 * Synonym for {@link #_enum()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String[] e() default {};
-
-	/**
-	 * Synonym for {@link #exclusiveMaximum()}.
-	 *
-	 * @return The annotation value.
-	 */
-	boolean emax() default false;
-
-	/**
-	 * Synonym for {@link #exclusiveMinimum()}.
-	 *
-	 * @return The annotation value.
-	 */
-	boolean emin() default false;
-
-	/**
-	 * <mk>exclusiveMaximum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	boolean exclusiveMaximum() default false;
-
-	/**
-	 * <mk>exclusiveMinimum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	boolean exclusiveMinimum() default false;
-
-	/**
-	 * Synonym for {@link #format()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String f() default "";
-
-	/**
-	 * <mk>format</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String format() default "";
-
-	/**
-	 * <mk>items</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <p>
-	 * Describes the type of items in the array.
-	 *
-	 * <p>
-	 * This is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">Swagger</a> object.
-	 * <br>It must be declared free-form because it's not possible to nest annotations in Java.
-	 *
-	 * @return The annotation value.
-	 */
-	String[] items() default {};
-
-	/**
-	 * Synonym for {@link #maximum()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String max() default "";
-
-	/**
-	 * Synonym for {@link #maxItems()}.
-	 *
-	 * @return The annotation value.
-	 */
-	long maxi() default -1;
-
-	/**
-	 * <mk>maximum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String maximum() default "";
-
-	/**
-	 * <mk>maxItems</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	long maxItems() default -1;
-
-	/**
-	 * Synonym for {@link #maxLength()}.
-	 *
-	 * @return The annotation value.
-	 */
-	long maxl() default -1;
-
-	/**
-	 * <mk>maxLength</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	long maxLength() default -1;
-
-	/**
-	 * Synonym for {@link #minimum()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String min() default "";
-
-	/**
-	 * Synonym for {@link #minItems()}.
-	 *
-	 * @return The annotation value.
-	 */
-	long mini() default -1;
-
-	/**
-	 * <mk>minimum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String minimum() default "";
-
-	/**
-	 * <mk>minItems</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	long minItems() default -1;
-
-	/**
-	 * Synonym for {@link #minLength()}.
-	 *
-	 * @return The annotation value.
-	 */
-	long minl() default -1;
-
-	/**
-	 * <mk>minLength</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	long minLength() default -1;
-
-	/**
-	 * Synonym for {@link #multipleOf()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String mo() default "";
-
-	/**
-	 * <mk>multipleOf</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String multipleOf() default "";
-
-	/**
-	 * Synonym for {@link #pattern()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String p() default "";
-
-	/**
-	 * <mk>pattern</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String pattern() default "";
-
-	/**
-	 * Synonym for {@link #type()}.
-	 *
-	 * @return The annotation value.
-	 */
-	String t() default "";
-
-	/**
-	 * <mk>type</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	String type() default "";
-
-	/**
-	 * Synonym for {@link #uniqueItems()}.
-	 *
-	 * @return The annotation value.
-	 */
-	boolean ui() default false;
-
-	/**
-	 * <mk>uniqueItems</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
-	 *
-	 * <h5 class='section'>Notes:</h5><ul>
-	 * 	<li class='note'>
-	 * 		The format is a plain-text string.
-	 * </ul>
-	 *
-	 * @return The annotation value.
-	 */
-	boolean uniqueItems() default false;
-}
\ No newline at end of file
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.annotation;
+
+import static java.lang.annotation.RetentionPolicy.*;
+
+import java.lang.annotation.*;
+
+/**
+ * Swagger items annotation.
+ *
+ * <p>
+ * This class is essentially identical to {@link Items} except it's used for defining items of items.
+ *
+ * <p>
+ * Since annotations cannot be nested, we're forced to create a separate annotation for it.
+ * <br>If you want to nest items further, you have to define them free-form using {@link #items()} as free-form JSON.
+ *
+ * <h5 class='section'>See Also:</h5><ul>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a>
+ * 	<li class='extlink'><a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>
+
+ * </ul>
+ */
+@Documented
+@Retention(RUNTIME)
+public @interface SubItems {
+
+	/**
+	 * <mk>default</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String[] _default() default {};
+
+    /**
+     * Optional description for the exposed API.
+     *
+     * @return The annotation value.
+     * @since 9.2.0
+     */
+    String[] description() default {};
+
+	/**
+	 * <mk>enum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String[] _enum() default {};
+
+	/**
+	 * <mk>$ref</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String $ref() default "";
+
+	/**
+	 * Synonym for {@link #collectionFormat()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String cf() default "";
+
+	/**
+	 * <mk>collectionFormat</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String collectionFormat() default "";
+
+	/**
+	 * Synonym for {@link #_default()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String[] df() default {};
+
+	/**
+	 * Synonym for {@link #_enum()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String[] e() default {};
+
+	/**
+	 * Synonym for {@link #exclusiveMaximum()}.
+	 *
+	 * @return The annotation value.
+	 */
+	boolean emax() default false;
+
+	/**
+	 * Synonym for {@link #exclusiveMinimum()}.
+	 *
+	 * @return The annotation value.
+	 */
+	boolean emin() default false;
+
+	/**
+	 * <mk>exclusiveMaximum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	boolean exclusiveMaximum() default false;
+
+	/**
+	 * <mk>exclusiveMinimum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	boolean exclusiveMinimum() default false;
+
+	/**
+	 * Synonym for {@link #format()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String f() default "";
+
+	/**
+	 * <mk>format</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String format() default "";
+
+	/**
+	 * <mk>items</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <p>
+	 * Describes the type of items in the array.
+	 *
+	 * <p>
+	 * This is a <a class="doclink" href="https://juneau.apache.org/docs/topics/JuneauBeanSwagger2">juneau-bean-swagger-v2</a> object.
+	 * <br>It must be declared free-form because it's not possible to nest annotations in Java.
+	 *
+	 * @return The annotation value.
+	 */
+	String[] items() default {};
+
+	/**
+	 * Synonym for {@link #maximum()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String max() default "";
+
+	/**
+	 * Synonym for {@link #maxItems()}.
+	 *
+	 * @return The annotation value.
+	 */
+	long maxi() default -1;
+
+	/**
+	 * <mk>maximum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String maximum() default "";
+
+	/**
+	 * <mk>maxItems</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	long maxItems() default -1;
+
+	/**
+	 * Synonym for {@link #maxLength()}.
+	 *
+	 * @return The annotation value.
+	 */
+	long maxl() default -1;
+
+	/**
+	 * <mk>maxLength</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	long maxLength() default -1;
+
+	/**
+	 * Synonym for {@link #minimum()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String min() default "";
+
+	/**
+	 * Synonym for {@link #minItems()}.
+	 *
+	 * @return The annotation value.
+	 */
+	long mini() default -1;
+
+	/**
+	 * <mk>minimum</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String minimum() default "";
+
+	/**
+	 * <mk>minItems</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	long minItems() default -1;
+
+	/**
+	 * Synonym for {@link #minLength()}.
+	 *
+	 * @return The annotation value.
+	 */
+	long minl() default -1;
+
+	/**
+	 * <mk>minLength</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	long minLength() default -1;
+
+	/**
+	 * Synonym for {@link #multipleOf()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String mo() default "";
+
+	/**
+	 * <mk>multipleOf</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String multipleOf() default "";
+
+	/**
+	 * Synonym for {@link #pattern()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String p() default "";
+
+	/**
+	 * <mk>pattern</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String pattern() default "";
+
+	/**
+	 * Synonym for {@link #type()}.
+	 *
+	 * @return The annotation value.
+	 */
+	String t() default "";
+
+	/**
+	 * <mk>type</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	String type() default "";
+
+	/**
+	 * Synonym for {@link #uniqueItems()}.
+	 *
+	 * @return The annotation value.
+	 */
+	boolean ui() default false;
+
+	/**
+	 * <mk>uniqueItems</mk> field of the <a class="doclink" href="https://swagger.io/specification/v2#itemsObject">Swagger Items Object</a>.
+	 *
+	 * <h5 class='section'>Notes:</h5><ul>
+	 * 	<li class='note'>
+	 * 		The format is a plain-text string.
+	 * </ul>
+	 *
+	 * @return The annotation value.
+	 */
+	boolean uniqueItems() default false;
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/Encoder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/Encoder.java
index 0589cbf05..73369f05e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/Encoder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/Encoder.java
@@ -1,62 +1,63 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.encoders;
-
-import java.io.*;
-
-/**
- * Used for enabling decompression on requests and compression on responses, such as support for GZIP compression.
- *
- * <h5 class='topic'>Description</h5>
- *
- * Used to wrap input and output streams within compression/decompression streams.
- *
- * <p>
- * Encoders are registered with <c>RestServlets</c> through the <ja>@Rest(encoders)</ja> annotation.
- *
- * <h5 class='section'>Notes:</h5><ul>
- * 	<li class='note'>This class is thread safe and reusable.
- * </ul>
- *
- * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/Encoders">Encoders</a>
- * </ul>
- */
-public abstract class Encoder {
-
-	/**
-	 * Converts the specified compressed input stream into an uncompressed stream.
-	 *
-	 * @param is The compressed stream.
-	 * @return The uncompressed stream.
-	 * @throws IOException If any errors occur, such as on a stream that's not a valid GZIP input stream.
-	 */
-	public abstract InputStream getInputStream(InputStream is) throws IOException;
-
-	/**
-	 * Converts the specified uncompressed output stream into an uncompressed stream.
-	 *
-	 * @param os The uncompressed stream.
-	 * @return The compressed stream stream.
-	 * @throws IOException If any errors occur.
-	 */
-	public abstract OutputStream getOutputStream(OutputStream os) throws IOException;
-
-	/**
-	 * Returns the codings in <c>Content-Encoding</c> and <c>Accept-Encoding</c> headers that this encoder
-	 * handles (e.g. <js>"gzip"</js>).
-	 *
-	 * @return The codings that this encoder handles.
-	 */
-	public abstract String[] getCodings();
-}
\ No newline at end of file
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.encoders;
+
+import java.io.*;
+
+/**
+ * Used for enabling decompression on requests and compression on responses, such as support for GZIP compression.
+ *
+ * <h5 class='topic'>Description</h5>
+ *
+ * Used to wrap input and output streams within compression/decompression streams.
+ *
+ * <p>
+ * Encoders are registered with <c>RestServlets</c> through the <ja>@Rest(encoders)</ja> annotation.
+ *
+ * <h5 class='section'>Notes:</h5><ul>
+ * 	<li class='note'>This class is thread safe and reusable.
+ * </ul>
+ *
+ * <h5 class='section'>See Also:</h5><ul>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerEncoders">Encoders</a>
+
+ * </ul>
+ */
+public abstract class Encoder {
+
+	/**
+	 * Converts the specified compressed input stream into an uncompressed stream.
+	 *
+	 * @param is The compressed stream.
+	 * @return The uncompressed stream.
+	 * @throws IOException If any errors occur, such as on a stream that's not a valid GZIP input stream.
+	 */
+	public abstract InputStream getInputStream(InputStream is) throws IOException;
+
+	/**
+	 * Converts the specified uncompressed output stream into an uncompressed stream.
+	 *
+	 * @param os The uncompressed stream.
+	 * @return The compressed stream stream.
+	 * @throws IOException If any errors occur.
+	 */
+	public abstract OutputStream getOutputStream(OutputStream os) throws IOException;
+
+	/**
+	 * Returns the codings in <c>Content-Encoding</c> and <c>Accept-Encoding</c> headers that this encoder
+	 * handles (e.g. <js>"gzip"</js>).
+	 *
+	 * @return The codings that this encoder handles.
+	 */
+	public abstract String[] getCodings();
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderMatch.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderMatch.java
index 7f2659f20..573985b1f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderMatch.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderMatch.java
@@ -16,7 +16,7 @@ package org.apache.juneau.encoders;
  * Represents a encoder and encoding that matches an HTTP <c>Accept-Encoding</c> header value.
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/Encoders">Encoders</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerEncoders">Encoders</a>
  * </ul>
  */
 public final class EncoderMatch {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderSet.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderSet.java
index ef29f0981..4ca51915f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderSet.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderSet.java
@@ -1,268 +1,269 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.encoders;
-
-import static org.apache.juneau.common.internal.ThrowableUtils.*;
-import static org.apache.juneau.common.internal.Utils.*;
-import static org.apache.juneau.internal.CollectionUtils.*;
-import static java.util.stream.Collectors.*;
-import java.util.*;
-import java.util.concurrent.*;
-
-import org.apache.juneau.*;
-import org.apache.juneau.common.internal.*;
-import org.apache.juneau.cp.*;
-import org.apache.juneau.internal.*;
-
-/**
- * Represents the set of {@link Encoder encoders} keyed by codings.
- *
- * <h5 class='topic'>Description</h5>
- *
- * Maintains a set of encoders and the codings that they can handle.
- *
- * <p>
- * The {@link #getEncoderMatch(String)} and {@link #getEncoder(String)} methods are then used to find appropriate
- * encoders for specific <c>Accept-Encoding</c> and <c>Content-Encoding</c> header values.
- *
- * <h5 class='topic'>Match ordering</h5>
- *
- * Encoders are matched against <c>Accept-Encoding</c> strings in the order they exist in this group.
- *
- * <p>
- * Encoders are tried in the order they appear in the set.  The {@link Builder#add(Class...)}/{@link Builder#add(Encoder...)}
- * methods prepend the values to the list to allow them the opportunity to override encoders already in the list.
- *
- * <p>
- * For example, calling <code>groupBuilder.add(E1.<jk>class</jk>,E2.<jk>class</jk>).add(E3.<jk>class</jk>,
- * E4.<jk>class</jk>)</code> will result in the order <c>E3, E4, E1, E2</c>.
- *
- * <h5 class='section'>Example:</h5>
- * <p class='bjava'>
- * 	<jc>// Create an encoder group with support for gzip compression.</jc>
- * 	EncoderSet <jv>encoders</jv> = EncoderSet
- * 		.<jsm>create</jsm>()
- * 		.add(GzipEncoder.<jk>class</jk>)
- * 		.build();
- *
- * 	<jc>// Should return "gzip"</jc>
- * 	String <jv>matchedCoding</jv> = <jv>encoders</jv>.findMatch(<js>"compress;q=1.0, gzip;q=0.8, identity;q=0.5, *;q=0"</js>);
- *
- * 	<jc>// Get the encoder</jc>
- * 	Encoder <jv>encoder</jv> = <jv>encoders</jv>.getEncoder(<jv>matchedCoding</jv>);
- * </p>
- *
- * <h5 class='section'>Notes:</h5><ul>
- * 	<li class='note'>This class is thread safe and reusable.
- * </ul>
- *
- * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/Encoders">Encoders</a>
- * </ul>
- */
-public final class EncoderSet {
-
-	//-----------------------------------------------------------------------------------------------------------------
-	// Static
-	//-----------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * An identifier that the previous encoders in this group should be inherited.
-	 * <p>
-	 * Used by {@link Builder#set(Class...)}
-	 */
-	public static abstract class Inherit extends Encoder {}
-
-	/**
-	 * An identifier that the previous encoders in this group should not be inherited.
-	 * <p>
-	 * Used by {@link Builder#add(Class...)}
-	 */
-	public static abstract class NoInherit extends Encoder {}
-
-	/**
-	 * Static creator.
-	 *
-	 * @param beanStore The bean store to use for creating beans.
-	 * @return A new builder for this object.
-	 */
-	public static Builder create(BeanStore beanStore) {
-		return new Builder(beanStore);
-	}
-
-	/**
-	 * Static creator.
-	 *
-	 * @return A new builder for this object.
-	 */
-	public static Builder create() {
-		return new Builder(BeanStore.INSTANCE);
-	}
-
-	//-----------------------------------------------------------------------------------------------------------------
-	// Builder
-	//-----------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Builder class.
-	 */
-	@FluentSetters
-	public static class Builder extends BeanBuilder<EncoderSet> {
-		List<Object> entries;
-		Builder inheritFrom;
-
-		/**
-		 * Constructor.
-		 *
-		 * @param beanStore The bean store to use for creating beans.
-		 */
-		protected Builder(BeanStore beanStore) {
-			super(EncoderSet.class, beanStore);
-			entries = Utils.list();
-		}
-
-		/**
-		 * Copy constructor.
-		 *
-		 * @param copyFrom The builder being copied.
-		 */
-		protected Builder(Builder copyFrom) {
-			super(copyFrom);
-			entries = copyOf(copyFrom.entries);
-		}
-
-		@Override /* BeanBuilder */
-		protected EncoderSet buildDefault() {
-			return new EncoderSet(this);
-		}
-
-		/**
-		 * Makes a copy of this builder.
-		 *
-		 * @return A new copy of this builder.
-		 */
-		public Builder copy() {
-			return new Builder(this);
-		}
-
-		//-------------------------------------------------------------------------------------------------------------
-		// Properties
-		//-------------------------------------------------------------------------------------------------------------
-
-		/**
-		 * Registers the specified encoders with this group.
-		 *
-		 * <p>
-		 * Entries are added in-order to the beginning of the list.
-		 *
-		 * @param values The encoders to add to this group.
-		 * @return This object.
-		 * @throws IllegalArgumentException if any class does not extend from {@link Encoder}.
-		 */
-		public Builder add(Class<?>...values) {
-			List<Object> l = Utils.list();
-			for (Class<?> v : values)
-				if (v.getSimpleName().equals("NoInherit"))
-					clear();
-			for (Class<?> v : values) {
-				if (Encoder.class.isAssignableFrom(v)) {
-					l.add(v);
-				} else if (! v.getSimpleName().equals("NoInherit")) {
-					throw new IllegalArgumentException("Invalid type passed to EncoderSet.Builder.add(): " + v.getName());
-				}
-			}
-			entries.addAll(0, l);
-			return this;
-		}
-
-		/**
-		 * Sets the encoders in this group.
-		 *
-		 * <p>
-		 * All encoders in this group are replaced with the specified values.
-		 *
-		 * <p>
-		 * If {@link Inherit} is specified (or any other class whose simple name is <js>"Inherit"</js>, the existing values are preserved
-		 * and inserted into the position in the values array.
-		 *
-		 * @param values The encoders to add to this group.
-		 * @return This object.
-		 * @throws IllegalArgumentException if any class does not extend from {@link Encoder}.
-		 */
-		public Builder set(Class<?>...values) {
-			List<Object> l = Utils.list();
-			for (Class<?> v : values) {
-				if (v.getSimpleName().equals("Inherit")) {
-					l.addAll(entries);
-				} else if (Encoder.class.isAssignableFrom(v)) {
-					l.add(v);
-				} else {
-					throw new IllegalArgumentException("Invalid type passed to EncoderSet.Builder.set(): " + v.getName());
-				}
-			}
-			entries = l;
-			return this;
-		}
-
-		/**
-		 * Registers the specified encoders with this group.
-		 *
-		 * <p>
-		 * Entries are added to the beginning of the list.
-		 *
-		 * @param values The encoders to add to this group.
-		 * @return This object.
-		 */
-		public Builder add(Encoder...values) {
-			prependAll(entries, (Object[])values);
-			return this;
-		}
-
-		/**
-		 * Clears out any existing encoders in this group.
-		 *
-		 * @return This object.
-		 */
-		public Builder clear() {
-			entries.clear();
-			return this;
-		}
-
-		/**
-		 * Returns <jk>true</jk> if this builder is empty.
-		 *
-		 * @return <jk>true</jk> if this builder is empty.
-		 */
-		public boolean isEmpty() {
-			return entries.isEmpty();
-		}
-
-		/**
-		 * Returns direct access to the {@link Encoder} objects and classes in this builder.
-		 *
-		 * <p>
-		 * Provided to allow for any extraneous modifications to the list not accomplishable via other methods on this builder such
-		 * as re-ordering/adding/removing entries.
-		 *
-		 * <p>
-		 * Note that it is up to the user to ensure that the list only contains {@link Encoder} objects and classes.
-		 *
-		 * @return The inner list of entries in this builder.
-		 */
-		public List<Object> inner() {
-			return entries;
-		}
-
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.encoders;
+
+import static org.apache.juneau.common.internal.ThrowableUtils.*;
+import static org.apache.juneau.common.internal.Utils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
+import static java.util.stream.Collectors.*;
+import java.util.*;
+import java.util.concurrent.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.common.internal.*;
+import org.apache.juneau.cp.*;
+import org.apache.juneau.internal.*;
+
+/**
+ * Represents the set of {@link Encoder encoders} keyed by codings.
+ *
+ * <h5 class='topic'>Description</h5>
+ *
+ * Maintains a set of encoders and the codings that they can handle.
+ *
+ * <p>
+ * The {@link #getEncoderMatch(String)} and {@link #getEncoder(String)} methods are then used to find appropriate
+ * encoders for specific <c>Accept-Encoding</c> and <c>Content-Encoding</c> header values.
+ *
+ * <h5 class='topic'>Match ordering</h5>
+ *
+ * Encoders are matched against <c>Accept-Encoding</c> strings in the order they exist in this group.
+ *
+ * <p>
+ * Encoders are tried in the order they appear in the set.  The {@link Builder#add(Class...)}/{@link Builder#add(Encoder...)}
+ * methods prepend the values to the list to allow them the opportunity to override encoders already in the list.
+ *
+ * <p>
+ * For example, calling <code>groupBuilder.add(E1.<jk>class</jk>,E2.<jk>class</jk>).add(E3.<jk>class</jk>,
+ * E4.<jk>class</jk>)</code> will result in the order <c>E3, E4, E1, E2</c>.
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bjava'>
+ * 	<jc>// Create an encoder group with support for gzip compression.</jc>
+ * 	EncoderSet <jv>encoders</jv> = EncoderSet
+ * 		.<jsm>create</jsm>()
+ * 		.add(GzipEncoder.<jk>class</jk>)
+ * 		.build();
+ *
+ * 	<jc>// Should return "gzip"</jc>
+ * 	String <jv>matchedCoding</jv> = <jv>encoders</jv>.findMatch(<js>"compress;q=1.0, gzip;q=0.8, identity;q=0.5, *;q=0"</js>);
+ *
+ * 	<jc>// Get the encoder</jc>
+ * 	Encoder <jv>encoder</jv> = <jv>encoders</jv>.getEncoder(<jv>matchedCoding</jv>);
+ * </p>
+ *
+ * <h5 class='section'>Notes:</h5><ul>
+ * 	<li class='note'>This class is thread safe and reusable.
+ * </ul>
+ *
+ * <h5 class='section'>See Also:</h5><ul>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerEncoders">Encoders</a>
+
+ * </ul>
+ */
+public final class EncoderSet {
+
+	//-----------------------------------------------------------------------------------------------------------------
+	// Static
+	//-----------------------------------------------------------------------------------------------------------------
+
+	/**
+	 * An identifier that the previous encoders in this group should be inherited.
+	 * <p>
+	 * Used by {@link Builder#set(Class...)}
+	 */
+	public static abstract class Inherit extends Encoder {}
+
+	/**
+	 * An identifier that the previous encoders in this group should not be inherited.
+	 * <p>
+	 * Used by {@link Builder#add(Class...)}
+	 */
+	public static abstract class NoInherit extends Encoder {}
+
+	/**
+	 * Static creator.
+	 *
+	 * @param beanStore The bean store to use for creating beans.
+	 * @return A new builder for this object.
+	 */
+	public static Builder create(BeanStore beanStore) {
+		return new Builder(beanStore);
+	}
+
+	/**
+	 * Static creator.
+	 *
+	 * @return A new builder for this object.
+	 */
+	public static Builder create() {
+		return new Builder(BeanStore.INSTANCE);
+	}
+
+	//-----------------------------------------------------------------------------------------------------------------
+	// Builder
+	//-----------------------------------------------------------------------------------------------------------------
+
+	/**
+	 * Builder class.
+	 */
+	@FluentSetters
+	public static class Builder extends BeanBuilder<EncoderSet> {
+		List<Object> entries;
+		Builder inheritFrom;
+
+		/**
+		 * Constructor.
+		 *
+		 * @param beanStore The bean store to use for creating beans.
+		 */
+		protected Builder(BeanStore beanStore) {
+			super(EncoderSet.class, beanStore);
+			entries = Utils.list();
+		}
+
+		/**
+		 * Copy constructor.
+		 *
+		 * @param copyFrom The builder being copied.
+		 */
+		protected Builder(Builder copyFrom) {
+			super(copyFrom);
+			entries = copyOf(copyFrom.entries);
+		}
+
+		@Override /* BeanBuilder */
+		protected EncoderSet buildDefault() {
+			return new EncoderSet(this);
+		}
+
+		/**
+		 * Makes a copy of this builder.
+		 *
+		 * @return A new copy of this builder.
+		 */
+		public Builder copy() {
+			return new Builder(this);
+		}
+
+		//-------------------------------------------------------------------------------------------------------------
+		// Properties
+		//-------------------------------------------------------------------------------------------------------------
+
+		/**
+		 * Registers the specified encoders with this group.
+		 *
+		 * <p>
+		 * Entries are added in-order to the beginning of the list.
+		 *
+		 * @param values The encoders to add to this group.
+		 * @return This object.
+		 * @throws IllegalArgumentException if any class does not extend from {@link Encoder}.
+		 */
+		public Builder add(Class<?>...values) {
+			List<Object> l = Utils.list();
+			for (Class<?> v : values)
+				if (v.getSimpleName().equals("NoInherit"))
+					clear();
+			for (Class<?> v : values) {
+				if (Encoder.class.isAssignableFrom(v)) {
+					l.add(v);
+				} else if (! v.getSimpleName().equals("NoInherit")) {
+					throw new IllegalArgumentException("Invalid type passed to EncoderSet.Builder.add(): " + v.getName());
+				}
+			}
+			entries.addAll(0, l);
+			return this;
+		}
+
+		/**
+		 * Sets the encoders in this group.
+		 *
+		 * <p>
+		 * All encoders in this group are replaced with the specified values.
+		 *
+		 * <p>
+		 * If {@link Inherit} is specified (or any other class whose simple name is <js>"Inherit"</js>, the existing values are preserved
+		 * and inserted into the position in the values array.
+		 *
+		 * @param values The encoders to add to this group.
+		 * @return This object.
+		 * @throws IllegalArgumentException if any class does not extend from {@link Encoder}.
+		 */
+		public Builder set(Class<?>...values) {
+			List<Object> l = Utils.list();
+			for (Class<?> v : values) {
+				if (v.getSimpleName().equals("Inherit")) {
+					l.addAll(entries);
+				} else if (Encoder.class.isAssignableFrom(v)) {
+					l.add(v);
+				} else {
+					throw new IllegalArgumentException("Invalid type passed to EncoderSet.Builder.set(): " + v.getName());
+				}
+			}
+			entries = l;
+			return this;
+		}
+
+		/**
+		 * Registers the specified encoders with this group.
+		 *
+		 * <p>
+		 * Entries are added to the beginning of the list.
+		 *
+		 * @param values The encoders to add to this group.
+		 * @return This object.
+		 */
+		public Builder add(Encoder...values) {
+			prependAll(entries, (Object[])values);
+			return this;
+		}
+
+		/**
+		 * Clears out any existing encoders in this group.
+		 *
+		 * @return This object.
+		 */
+		public Builder clear() {
+			entries.clear();
+			return this;
+		}
+
+		/**
+		 * Returns <jk>true</jk> if this builder is empty.
+		 *
+		 * @return <jk>true</jk> if this builder is empty.
+		 */
+		public boolean isEmpty() {
+			return entries.isEmpty();
+		}
+
+		/**
+		 * Returns direct access to the {@link Encoder} objects and classes in this builder.
+		 *
+		 * <p>
+		 * Provided to allow for any extraneous modifications to the list not accomplishable via other methods on this builder such
+		 * as re-ordering/adding/removing entries.
+		 *
+		 * <p>
+		 * Note that it is up to the user to ensure that the list only contains {@link Encoder} objects and classes.
+		 *
+		 * @return The inner list of entries in this builder.
+		 */
+		public List<Object> inner() {
+			return entries;
+		}
+
 		// <FluentSetters>
 
 		@Override /* GENERATED - org.apache.juneau.BeanBuilder */
@@ -277,114 +278,114 @@ public final class EncoderSet {
 			return this;
 		}
 
-		// </FluentSetters>
-
-		//-------------------------------------------------------------------------------------------------------------
-		// Other methods
-		//-------------------------------------------------------------------------------------------------------------
-
-		@Override /* Object */
-		public String toString() {
-			return entries.stream().map(Builder::toString).collect(joining(",","[","]"));
-		}
-
-		private static String toString(Object o) {
-			if (o == null)
-				return "null";
-			if (o instanceof Class)
-				return "class:" + ((Class<?>)o).getSimpleName();
-			return "object:" + o.getClass().getSimpleName();
-		}
-	}
-
-	//-----------------------------------------------------------------------------------------------------------------
-	// Instance
-	//-----------------------------------------------------------------------------------------------------------------
-
-	// Maps Accept-Encoding headers to matching encoders.
-	private final ConcurrentHashMap<String,EncoderMatch> cache = new ConcurrentHashMap<>();
-
-	private final List<String> encodings;
-	private final Encoder[] encodingsEncoders;
-	private final Encoder[] entries;
-
-	/**
-	 * Constructor.
-	 *
-	 * @param builder The builder for this object.
-	 */
-	protected EncoderSet(Builder builder) {
-		entries = builder.entries.stream().map(x -> instantiate(builder.beanStore(), x)).toArray(Encoder[]::new);
-
-		List<String> lc = Utils.list();
-		List<Encoder> l = Utils.list();
-		for (Encoder e : entries) {
-			for (String c: e.getCodings()) {
-				lc.add(c);
-				l.add(e);
-			}
-		}
-
-		this.encodings = u(lc);
-		this.encodingsEncoders = l.toArray(new Encoder[l.size()]);
-	}
-
-	private static Encoder instantiate(BeanStore bs, Object o) {
-		if (o instanceof Encoder)
-			return (Encoder)o;
-		try {
-			return bs.createBean(Encoder.class).type((Class<?>)o).run();
-		} catch (ExecutableException e) {
-			throw asRuntimeException(e);
-		}
-	}
-
-	/**
-	 * Returns the coding string for the matching encoder that can handle the specified <c>Accept-Encoding</c>
-	 * or <c>Content-Encoding</c> header value.
-	 *
-	 * <p>
-	 * Returns <jk>null</jk> if no encoders can handle it.
-	 *
-	 * <p>
-	 * This method is fully compliant with the RFC2616/14.3 and 14.11 specifications.
-	 *
-	 * @param acceptEncoding The <c>Accept-Encoding</c> or <c>Content-Encoding</c> value.
-	 * @return The coding value (e.g. <js>"gzip"</js>).
-	 */
-	public EncoderMatch getEncoderMatch(String acceptEncoding) {
-		EncoderMatch em = cache.get(acceptEncoding);
-		if (em != null)
-			return em;
-
-		StringRanges ae = StringRanges.of(acceptEncoding);
-		int match = ae.match(encodings);
-
-		if (match >= 0) {
-			em = new EncoderMatch(encodings.get(match), encodingsEncoders[match]);
-			cache.putIfAbsent(acceptEncoding, em);
-		}
-
-		return cache.get(acceptEncoding);
-	}
-
-	/**
-	 * Returns the encoder registered with the specified coding (e.g. <js>"gzip"</js>).
-	 *
-	 * @param encoding The coding string.
-	 * @return The encoder, or <jk>null</jk> if encoder isn't registered with that coding.
-	 */
-	public Encoder getEncoder(String encoding) {
-		EncoderMatch em = getEncoderMatch(encoding);
-		return (em == null ? null : em.getEncoder());
-	}
-
-	/**
-	 * Returns the set of codings supported by all encoders in this group.
-	 *
-	 * @return An unmodifiable list of codings supported by all encoders in this group.  Never <jk>null</jk>.
-	 */
-	public List<String> getSupportedEncodings() {
-		return encodings;
-	}
-}
\ No newline at end of file
+		// </FluentSetters>
+
+		//-------------------------------------------------------------------------------------------------------------
+		// Other methods
+		//-------------------------------------------------------------------------------------------------------------
+
+		@Override /* Object */
+		public String toString() {
+			return entries.stream().map(Builder::toString).collect(joining(",","[","]"));
+		}
+
+		private static String toString(Object o) {
+			if (o == null)
+				return "null";
+			if (o instanceof Class)
+				return "class:" + ((Class<?>)o).getSimpleName();
+			return "object:" + o.getClass().getSimpleName();
+		}
+	}
+
+	//-----------------------------------------------------------------------------------------------------------------
+	// Instance
+	//-----------------------------------------------------------------------------------------------------------------
+
+	// Maps Accept-Encoding headers to matching encoders.
+	private final ConcurrentHashMap<String,EncoderMatch> cache = new ConcurrentHashMap<>();
+
+	private final List<String> encodings;
+	private final Encoder[] encodingsEncoders;
+	private final Encoder[] entries;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param builder The builder for this object.
+	 */
+	protected EncoderSet(Builder builder) {
+		entries = builder.entries.stream().map(x -> instantiate(builder.beanStore(), x)).toArray(Encoder[]::new);
+
+		List<String> lc = Utils.list();
+		List<Encoder> l = Utils.list();
+		for (Encoder e : entries) {
+			for (String c: e.getCodings()) {
+				lc.add(c);
+				l.add(e);
+			}
+		}
+
+		this.encodings = u(lc);
+		this.encodingsEncoders = l.toArray(new Encoder[l.size()]);
+	}
+
+	private static Encoder instantiate(BeanStore bs, Object o) {
+		if (o instanceof Encoder)
+			return (Encoder)o;
+		try {
+			return bs.createBean(Encoder.class).type((Class<?>)o).run();
+		} catch (ExecutableException e) {
+			throw asRuntimeException(e);
+		}
+	}
+
+	/**
+	 * Returns the coding string for the matching encoder that can handle the specified <c>Accept-Encoding</c>
+	 * or <c>Content-Encoding</c> header value.
+	 *
+	 * <p>
+	 * Returns <jk>null</jk> if no encoders can handle it.
+	 *
+	 * <p>
+	 * This method is fully compliant with the RFC2616/14.3 and 14.11 specifications.
+	 *
+	 * @param acceptEncoding The <c>Accept-Encoding</c> or <c>Content-Encoding</c> value.
+	 * @return The coding value (e.g. <js>"gzip"</js>).
+	 */
+	public EncoderMatch getEncoderMatch(String acceptEncoding) {
+		EncoderMatch em = cache.get(acceptEncoding);
+		if (em != null)
+			return em;
+
+		StringRanges ae = StringRanges.of(acceptEncoding);
+		int match = ae.match(encodings);
+
+		if (match >= 0) {
+			em = new EncoderMatch(encodings.get(match), encodingsEncoders[match]);
+			cache.putIfAbsent(acceptEncoding, em);
+		}
+
+		return cache.get(acceptEncoding);
+	}
+
+	/**
+	 * Returns the encoder registered with the specified coding (e.g. <js>"gzip"</js>).
+	 *
+	 * @param encoding The coding string.
+	 * @return The encoder, or <jk>null</jk> if encoder isn't registered with that coding.
+	 */
+	public Encoder getEncoder(String encoding) {
+		EncoderMatch em = getEncoderMatch(encoding);
+		return (em == null ? null : em.getEncoder());
+	}
+
+	/**
+	 * Returns the set of codings supported by all encoders in this group.
+	 *
+	 * @return An unmodifiable list of codings supported by all encoders in this group.  Never <jk>null</jk>.
+	 */
+	public List<String> getSupportedEncodings() {
+		return encodings;
+	}
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/Finishable.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/Finishable.java
index 2409e288a..cfc1aace1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/Finishable.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/Finishable.java
@@ -18,7 +18,7 @@ import java.io.*;
  * Interface that identifies an output stream has having a <c>finish()</c> method.
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/Encoders">Encoders</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerEncoders">Encoders</a>
  * </ul>
  */
 public interface Finishable {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/GzipEncoder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/GzipEncoder.java
index ed5f1f653..7f722327f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/GzipEncoder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/GzipEncoder.java
@@ -1,54 +1,55 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.encoders;
-
-import java.io.*;
-import java.util.zip.*;
-
-/**
- * Encoder for handling <js>"gzip"</js> encoding and decoding.
- *
- * <h5 class='section'>Notes:</h5><ul>
- * 	<li class='note'>This class is thread safe and reusable.
- * </ul>
- *
- * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/Encoders">Encoders</a>
- * </ul>
- */
-public class GzipEncoder extends Encoder {
-
-	@Override /* Encoder */
-	public OutputStream getOutputStream(OutputStream os) throws IOException {
-		return new FinishableGZIPOutputStream(os);
-	}
-
-	@Override /* Encoder */
-	public InputStream getInputStream(InputStream is) throws IOException {
-		return new GZIPInputStream(is);
-	}
-
-	/**
-	 * Returns <code>[<js>"gzip"</js>]</code>.
-	 */
-	@Override /* Encoder */
-	public String[] getCodings() {
-		return new String[]{"gzip"};
-	}
-
-	private static class FinishableGZIPOutputStream extends GZIPOutputStream implements Finishable {
-		FinishableGZIPOutputStream(OutputStream out) throws IOException {
-			super(out);
-		}
-	}
-}
\ No newline at end of file
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.encoders;
+
+import java.io.*;
+import java.util.zip.*;
+
+/**
+ * Encoder for handling <js>"gzip"</js> encoding and decoding.
+ *
+ * <h5 class='section'>Notes:</h5><ul>
+ * 	<li class='note'>This class is thread safe and reusable.
+ * </ul>
+ *
+ * <h5 class='section'>See Also:</h5><ul>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerEncoders">Encoders</a>
+
+ * </ul>
+ */
+public class GzipEncoder extends Encoder {
+
+	@Override /* Encoder */
+	public OutputStream getOutputStream(OutputStream os) throws IOException {
+		return new FinishableGZIPOutputStream(os);
+	}
+
+	@Override /* Encoder */
+	public InputStream getInputStream(InputStream is) throws IOException {
+		return new GZIPInputStream(is);
+	}
+
+	/**
+	 * Returns <code>[<js>"gzip"</js>]</code>.
+	 */
+	@Override /* Encoder */
+	public String[] getCodings() {
+		return new String[]{"gzip"};
+	}
+
+	private static class FinishableGZIPOutputStream extends GZIPOutputStream implements Finishable {
+		FinishableGZIPOutputStream(OutputStream out) throws IOException {
+			super(out);
+		}
+	}
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/IdentityEncoder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/IdentityEncoder.java
index aae894221..1259aaf22 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/IdentityEncoder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/IdentityEncoder.java
@@ -1,56 +1,57 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.encoders;
-
-import java.io.*;
-
-/**
- * Encoder for handling <js>"identity"</js> encoding and decoding.
- *
- * <p>
- * Identity encoding is just another name for no encoding at all.
- *
- * <h5 class='section'>Notes:</h5><ul>
- * 	<li class='note'>This class is thread safe and reusable.
- * </ul>
- *
- * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/Encoders">Encoders</a>
- * </ul>
- */
-public class IdentityEncoder extends Encoder {
-
-	/** Singleton */
-	public static final IdentityEncoder INSTANCE = new IdentityEncoder();
-
-	/** Constructor. */
-	public IdentityEncoder() {}
-
-	@Override /* Encoder */
-	public InputStream getInputStream(InputStream is) throws IOException {
-		return is;
-	}
-
-	@Override /* Encoder */
-	public OutputStream getOutputStream(OutputStream os) throws IOException {
-		return os;
-	}
-
-	/**
-	 * Returns <code>[<js>"identity"</js>]</code>.
-	 */
-	@Override /* Encoder */
-	public String[] getCodings() {
-		return new String[]{"identity"};
-	}
-}
\ No newline at end of file
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.encoders;
+
+import java.io.*;
+
+/**
+ * Encoder for handling <js>"identity"</js> encoding and decoding.
+ *
+ * <p>
+ * Identity encoding is just another name for no encoding at all.
+ *
+ * <h5 class='section'>Notes:</h5><ul>
+ * 	<li class='note'>This class is thread safe and reusable.
+ * </ul>
+ *
+ * <h5 class='section'>See Also:</h5><ul>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/RestServerEncoders">Encoders</a>
+
+ * </ul>
+ */
+public class IdentityEncoder extends Encoder {
+
+	/** Singleton */
+	public static final IdentityEncoder INSTANCE = new IdentityEncoder();
+
+	/** Constructor. */
+	public IdentityEncoder() {}
+
+	@Override /* Encoder */
+	public InputStream getInputStream(InputStream is) throws IOException {
+		return is;
+	}
+
+	@Override /* Encoder */
+	public OutputStream getOutputStream(OutputStream os) throws IOException {
+		return os;
+	}
+
+	/**
+	 * Returns <code>[<js>"identity"</js>]</code>.
+	 */
+	@Override /* Encoder */
+	public String[] getCodings() {
+		return new String[]{"identity"};
+	}
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/AnchorText.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/AnchorText.java
index 88b4aa7c7..166595d75 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/AnchorText.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/AnchorText.java
@@ -16,7 +16,7 @@ package org.apache.juneau.html;
  * Identifies possible values for the {@link HtmlSerializer.Builder#uriAnchorText(AnchorText)} setting.
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/HtmlBasics">HTML Details</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/HtmlBasics">HTML Basics</a>
  * </ul>
  */
 public enum AnchorText {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/AsideFloat.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/AsideFloat.java
index 307b8cfcd..cd2d3f881 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/AsideFloat.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/AsideFloat.java
@@ -16,7 +16,7 @@ package org.apache.juneau.html;
  * Identifies possible float values for {@link HtmlDocSerializer.Builder#asideFloat(AsideFloat)}.
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/HtmlBasics">HTML Details</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/HtmlBasics">HTML Basics</a>
  * </ul>
  */
 public enum AsideFloat {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/BasicHtmlDocTemplate.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/BasicHtmlDocTemplate.java
index 455f8244e..a1c2bfda5 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/BasicHtmlDocTemplate.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/BasicHtmlDocTemplate.java
@@ -25,7 +25,7 @@ import org.apache.juneau.internal.*;
  * This class can be subclassed to customize page rendering.
  *
  * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/HtmlBasics">HTML Details</a>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/HtmlBasics">HTML Basics</a>
  * </ul>
  */
 public class BasicHtmlDocTemplate implements HtmlDocTemplate {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
index 50a795ed4..be95beb3d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
@@ -1,209 +1,210 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.html;
-
-import org.apache.juneau.*;
-import org.apache.juneau.cp.*;
-import org.apache.juneau.html.annotation.*;
-
-/**
- * Metadata on bean properties specific to the HTML serializers and parsers pulled from the {@link Html @Html}
- * annotation on the bean property.
- *
- * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/HtmlBasics">HTML Details</a>
- * </ul>
- */
-@SuppressWarnings("rawtypes")
-public final class HtmlBeanPropertyMeta extends ExtendedBeanPropertyMeta {
-
-	/**
-	 * Default instance.
-	 */
-	public static final HtmlBeanPropertyMeta DEFAULT = new HtmlBeanPropertyMeta();
-
-	private final boolean noTables, noTableHeaders;
-	private final HtmlFormat format;
-	private final HtmlRender render;
-	private final String link, anchorText;
-
-	/**
-	 * Constructor.
-	 *
-	 * @param bpm The metadata of the bean property of this additional metadata.
-	 * @param mp HTML metadata provider (for finding information about other artifacts).
-	 */
-	public HtmlBeanPropertyMeta(BeanPropertyMeta bpm, HtmlMetaProvider mp) {
-		super(bpm);
-
-		Builder b = new Builder();
-		if (bpm.getInnerField() != null)
-			mp.forEachAnnotation(Html.class, bpm.getInnerField(), x-> true, x -> b.findHtmlInfo(x));
-		if (bpm.getGetter() != null)
-			mp.forEachAnnotation(Html.class, bpm.getGetter(), x-> true, x -> b.findHtmlInfo(x));
-		if (bpm.getSetter() != null)
-			mp.forEachAnnotation(Html.class, bpm.getSetter(), x-> true, x -> b.findHtmlInfo(x));
-
-		this.format = b.format;
-		this.noTables = b.noTables;
-		this.noTableHeaders = b.noTableHeaders;
-		this.render = b.render.orElse(null);
-		this.link = b.link;
-		this.anchorText = b.anchorText;
-	}
-
-	private HtmlBeanPropertyMeta() {
-		super(null);
-		this.format = HtmlFormat.HTML;
-		this.noTables = false;
-		this.noTableHeaders = false;
-		this.render = null;
-		this.link = null;
-		this.anchorText = null;
-	}
-
-	static final class Builder {
-		boolean noTables, noTableHeaders;
-		HtmlFormat format = HtmlFormat.HTML;
-		BeanCreator<HtmlRender> render = BeanCreator.of(HtmlRender.class);
-		String link, anchorText;
-
-		void findHtmlInfo(Html html) {
-			if (html == null)
-				return;
-			format = html.format();
-			if (html.noTables())
-				noTables = html.noTables();
-			if (html.noTableHeaders())
-				noTableHeaders = html.noTableHeaders();
-			if (html.render() != HtmlRender.class)
-				render.type(html.render());
-			if (! html.link().isEmpty())
-				link = html.link();
-			if (! html.anchorText().isEmpty())
-				anchorText = html.anchorText();
-		}
-	}
-
-	/**
-	 * Returns the format of this bean property
-	 *
-	 * @return The value of the {@link Html#format()} annotation.
-	 */
-	protected HtmlFormat getFormat() {
-		return format;
-	}
-
-	/**
-	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#XML}.
-	 *
-	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#XML}.
-	 */
-	protected boolean isXml() {
-		return format == HtmlFormat.XML;
-	}
-
-	/**
-	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#PLAIN_TEXT}.
-	 *
-	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#PLAIN_TEXT}.
-	 */
-	protected boolean isPlainText() {
-		return format == HtmlFormat.PLAIN_TEXT;
-	}
-
-	/**
-	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML}.
-	 *
-	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML}.
-	 */
-	protected boolean isHtml() {
-		return format == HtmlFormat.HTML;
-	}
-
-	/**
-	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML_CDC}.
-	 *
-	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML_CDC}.
-	 */
-	protected boolean isHtmlCdc() {
-		return format == HtmlFormat.HTML_CDC;
-	}
-
-	/**
-	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML_SDC}.
-	 *
-	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML_SDC}.
-	 */
-	protected boolean isHtmlSdc() {
-		return format == HtmlFormat.HTML_SDC;
-	}
-
-	/**
-	 * Returns whether this bean property should not be serialized as an HTML table.
-	 *
-	 * @return
-	 * 	<jk>true</jk> if the the {@link Html @Html} annotation is specified, and {@link Html#noTables() @Html(noTables)} is
-	 * 	<jk>true</jk>.
-	 */
-	protected boolean isNoTables() {
-		return noTables;
-	}
-
-	/**
-	 * Returns whether this bean property should not include table headers when serialized as an HTML table.
-	 *
-	 * @return
-	 * 	<jk>true</jk> if the the {@link Html @Html} annotation is specified, and {@link Html#noTableHeaders() @Html(noTableHeaders)} is
-	 * 	<jk>true</jk>.
-	 */
-	public boolean isNoTableHeaders() {
-		return noTableHeaders;
-	}
-
-	/**
-	 * Returns the render class for rendering the style and contents of this property value in HTML.
-	 *
-	 * <p>
-	 * This value is specified via the {@link Html#render() @Html(render)} annotation.
-	 *
-	 * @return The render class, never <jk>null</jk>.
-	 */
-	public HtmlRender getRender() {
-		return render;
-	}
-
-	/**
-	 * Adds a hyperlink to this value in HTML.
-	 *
-	 * <p>
-	 * This value is specified via the {@link Html#link() @Html(link)} annotation.
-	 *
-	 * @return The link string, or <jk>null</jk> if not specified.
-	 */
-	public String getLink() {
-		return link;
-	}
-
-	/**
-	 * Specifies the anchor text for this property.
-	 *
-	 * <p>
-	 * This value is specified via the {@link Html#anchorText() @Html(anchorText)} annotation.
-	 *
-	 * @return The link string, or <jk>null</jk> if not specified.
-	 */
-	public String getAnchorText() {
-		return anchorText;
-	}
-}
\ No newline at end of file
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.html;
+
+import org.apache.juneau.*;
+import org.apache.juneau.cp.*;
+import org.apache.juneau.html.annotation.*;
+
+/**
+ * Metadata on bean properties specific to the HTML serializers and parsers pulled from the {@link Html @Html}
+ * annotation on the bean property.
+ *
+ * <h5 class='section'>See Also:</h5><ul>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/HtmlBasics">HTML Basics</a>
+
+ * </ul>
+ */
+@SuppressWarnings("rawtypes")
+public final class HtmlBeanPropertyMeta extends ExtendedBeanPropertyMeta {
+
+	/**
+	 * Default instance.
+	 */
+	public static final HtmlBeanPropertyMeta DEFAULT = new HtmlBeanPropertyMeta();
+
+	private final boolean noTables, noTableHeaders;
+	private final HtmlFormat format;
+	private final HtmlRender render;
+	private final String link, anchorText;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param bpm The metadata of the bean property of this additional metadata.
+	 * @param mp HTML metadata provider (for finding information about other artifacts).
+	 */
+	public HtmlBeanPropertyMeta(BeanPropertyMeta bpm, HtmlMetaProvider mp) {
+		super(bpm);
+
+		Builder b = new Builder();
+		if (bpm.getInnerField() != null)
+			mp.forEachAnnotation(Html.class, bpm.getInnerField(), x-> true, x -> b.findHtmlInfo(x));
+		if (bpm.getGetter() != null)
+			mp.forEachAnnotation(Html.class, bpm.getGetter(), x-> true, x -> b.findHtmlInfo(x));
+		if (bpm.getSetter() != null)
+			mp.forEachAnnotation(Html.class, bpm.getSetter(), x-> true, x -> b.findHtmlInfo(x));
+
+		this.format = b.format;
+		this.noTables = b.noTables;
+		this.noTableHeaders = b.noTableHeaders;
+		this.render = b.render.orElse(null);
+		this.link = b.link;
+		this.anchorText = b.anchorText;
+	}
+
+	private HtmlBeanPropertyMeta() {
+		super(null);
+		this.format = HtmlFormat.HTML;
+		this.noTables = false;
+		this.noTableHeaders = false;
+		this.render = null;
+		this.link = null;
+		this.anchorText = null;
+	}
+
+	static final class Builder {
+		boolean noTables, noTableHeaders;
+		HtmlFormat format = HtmlFormat.HTML;
+		BeanCreator<HtmlRender> render = BeanCreator.of(HtmlRender.class);
+		String link, anchorText;
+
+		void findHtmlInfo(Html html) {
+			if (html == null)
+				return;
+			format = html.format();
+			if (html.noTables())
+				noTables = html.noTables();
+			if (html.noTableHeaders())
+				noTableHeaders = html.noTableHeaders();
+			if (html.render() != HtmlRender.class)
+				render.type(html.render());
+			if (! html.link().isEmpty())
+				link = html.link();
+			if (! html.anchorText().isEmpty())
+				anchorText = html.anchorText();
+		}
+	}
+
+	/**
+	 * Returns the format of this bean property
+	 *
+	 * @return The value of the {@link Html#format()} annotation.
+	 */
+	protected HtmlFormat getFormat() {
+		return format;
+	}
+
+	/**
+	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#XML}.
+	 *
+	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#XML}.
+	 */
+	protected boolean isXml() {
+		return format == HtmlFormat.XML;
+	}
+
+	/**
+	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#PLAIN_TEXT}.
+	 *
+	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#PLAIN_TEXT}.
+	 */
+	protected boolean isPlainText() {
+		return format == HtmlFormat.PLAIN_TEXT;
+	}
+
+	/**
+	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML}.
+	 *
+	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML}.
+	 */
+	protected boolean isHtml() {
+		return format == HtmlFormat.HTML;
+	}
+
+	/**
+	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML_CDC}.
+	 *
+	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML_CDC}.
+	 */
+	protected boolean isHtmlCdc() {
+		return format == HtmlFormat.HTML_CDC;
+	}
+
+	/**
+	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML_SDC}.
+	 *
+	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML_SDC}.
+	 */
+	protected boolean isHtmlSdc() {
+		return format == HtmlFormat.HTML_SDC;
+	}
+
+	/**
+	 * Returns whether this bean property should not be serialized as an HTML table.
+	 *
+	 * @return
+	 * 	<jk>true</jk> if the the {@link Html @Html} annotation is specified, and {@link Html#noTables() @Html(noTables)} is
+	 * 	<jk>true</jk>.
+	 */
+	protected boolean isNoTables() {
+		return noTables;
+	}
+
+	/**
+	 * Returns whether this bean property should not include table headers when serialized as an HTML table.
+	 *
+	 * @return
+	 * 	<jk>true</jk> if the the {@link Html @Html} annotation is specified, and {@link Html#noTableHeaders() @Html(noTableHeaders)} is
+	 * 	<jk>true</jk>.
+	 */
+	public boolean isNoTableHeaders() {
+		return noTableHeaders;
+	}
+
+	/**
+	 * Returns the render class for rendering the style and contents of this property value in HTML.
+	 *
+	 * <p>
+	 * This value is specified via the {@link Html#render() @Html(render)} annotation.
+	 *
+	 * @return The render class, never <jk>null</jk>.
+	 */
+	public HtmlRender getRender() {
+		return render;
+	}
+
+	/**
+	 * Adds a hyperlink to this value in HTML.
+	 *
+	 * <p>
+	 * This value is specified via the {@link Html#link() @Html(link)} annotation.
+	 *
+	 * @return The link string, or <jk>null</jk> if not specified.
+	 */
+	public String getLink() {
+		return link;
+	}
+
+	/**
+	 * Specifies the anchor text for this property.
+	 *
+	 * <p>
+	 * This value is specified via the {@link Html#anchorText() @Html(anchorText)} annotation.
+	 *
+	 * @return The link string, or <jk>null</jk> if not specified.
+	 */
+	public String getAnchorText() {
+		return anchorText;
+	}
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlClassMeta.java
index df44ac193..29e37aaab 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlClassMeta.java
@@ -1,152 +1,153 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.html;
-
-import static org.apache.juneau.common.internal.ThrowableUtils.*;
-
-import java.util.function.*;
-
-import org.apache.juneau.*;
-import org.apache.juneau.html.annotation.*;
-
-/**
- * Metadata on classes specific to the HTML serializers and parsers pulled from the {@link Html @Html} annotation on
- * the class.
- *
- * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/HtmlBasics">HTML Details</a>
- * </ul>
- */
-public class HtmlClassMeta extends ExtendedClassMeta {
-
-	private final boolean noTables, noTableHeaders;
-	private final HtmlFormat format;
-	private final HtmlRender<?> render;
-
-	/**
-	 * Constructor.
-	 *
-	 * @param cm The class that this annotation is defined on.
-	 * @param mp HTML metadata provider (for finding information about other artifacts).
-	 */
-	public HtmlClassMeta(ClassMeta<?> cm, HtmlMetaProvider mp) {
-		super(cm);
-
-		Value<Boolean> noTables = Value.empty(), noTableHeaders = Value.empty();
-		Value<HtmlFormat> format = Value.empty();
-		Value<HtmlRender<?>> render = Value.empty();
-
-		Consumer<Html> c = x -> {
-			if (x.noTables())
-				noTables.set(true);
-			if (x.noTableHeaders())
-				noTableHeaders.set(true);
-			if (x.format() != HtmlFormat.HTML)
-				format.set(x.format());
-			if (x.render() != HtmlRender.class) {
-				try {
-					render.set(x.render().getDeclaredConstructor().newInstance());
-				} catch (Exception e) {
-					throw asRuntimeException(e);
-				}
-			}
-		};
-		cm.forEachAnnotation(Html.class, x -> true, c);
-
-		this.noTables = noTables.orElse(false);
-		this.noTableHeaders = noTableHeaders.orElse(false);
-		this.render = render.orElse(null);
-		this.format = format.orElse(HtmlFormat.HTML);
-	}
-
-	/**
-	 * Returns the {@link Html#format() @Html(format)} annotation defined on the class.
-	 *
-	 * @return The value of the annotation.
-	 */
-	protected HtmlFormat getFormat() {
-		return format;
-	}
-
-	/**
-	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#XML}.
-	 *
-	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#XML}.
-	 */
-	protected boolean isXml() {
-		return format == HtmlFormat.XML;
-	}
-
-	/**
-	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#PLAIN_TEXT}.
-	 *
-	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#PLAIN_TEXT}.
-	 */
-	protected boolean isPlainText() {
-		return format == HtmlFormat.PLAIN_TEXT;
-	}
-
-	/**
-	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML}.
-	 *
-	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML}.
-	 */
-	protected boolean isHtml() {
-		return format == HtmlFormat.HTML;
-	}
-
-	/**
-	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML_CDC}.
-	 *
-	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML_CDC}.
-	 */
-	protected boolean isHtmlCdc() {
-		return format == HtmlFormat.HTML_CDC;
-	}
-
-	/**
-	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML_SDC}.
-	 *
-	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML_SDC}.
-	 */
-	protected boolean isHtmlSdc() {
-		return format == HtmlFormat.HTML_SDC;
-	}
-
-	/**
-	 * Returns the {@link Html#noTables() @Html(noTables)} annotation defined on the class.
-	 *
-	 * @return The value of the annotation.
-	 */
-	protected boolean isNoTables() {
-		return noTables;
-	}
-
-	/**
-	 * Returns the {@link Html#noTableHeaders() @Html(noTableHeaders)} annotation defined on the class.
-	 *
-	 * @return The value of the annotation.
-	 */
-	public boolean isNoTableHeaders() {
-		return noTableHeaders;
-	}
-
-	/**
-	 * Returns the {@link Html#render() @Html(render)} annotation defined on the class.
-	 *
-	 * @return The value of the annotation.
-	 */
-	public HtmlRender<?> getRender() {
-		return render;
-	}
-}
\ No newline at end of file
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.html;
+
+import static org.apache.juneau.common.internal.ThrowableUtils.*;
+
+import java.util.function.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.html.annotation.*;
+
+/**
+ * Metadata on classes specific to the HTML serializers and parsers pulled from the {@link Html @Html} annotation on
+ * the class.
+ *
+ * <h5 class='section'>See Also:</h5><ul>
+ * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/HtmlBasics">HTML Basics</a>
+
+ * </ul>
+ */
+public class HtmlClassMeta extends ExtendedClassMeta {
+
+	private final boolean noTables, noTableHeaders;
+	private final HtmlFormat format;
+	private final HtmlRender<?> render;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param cm The class that this annotation is defined on.
+	 * @param mp HTML metadata provider (for finding information about other artifacts).
+	 */
+	public HtmlClassMeta(ClassMeta<?> cm, HtmlMetaProvider mp) {
+		super(cm);
+
+		Value<Boolean> noTables = Value.empty(), noTableHeaders = Value.empty();
+		Value<HtmlFormat> format = Value.empty();
+		Value<HtmlRender<?>> render = Value.empty();
+
+		Consumer<Html> c = x -> {
+			if (x.noTables())
+				noTables.set(true);
+			if (x.noTableHeaders())
+				noTableHeaders.set(true);
+			if (x.format() != HtmlFormat.HTML)
+				format.set(x.format());
+			if (x.render() != HtmlRender.class) {
+				try {
+					render.set(x.render().getDeclaredConstructor().newInstance());
+				} catch (Exception e) {
+					throw asRuntimeException(e);
+				}
+			}
+		};
+		cm.forEachAnnotation(Html.class, x -> true, c);
+
+		this.noTables = noTables.orElse(false);
+		this.noTableHeaders = noTableHeaders.orElse(false);
+		this.render = render.orElse(null);
+		this.format = format.orElse(HtmlFormat.HTML);
+	}
+
+	/**
+	 * Returns the {@link Html#format() @Html(format)} annotation defined on the class.
+	 *
+	 * @return The value of the annotation.
+	 */
+	protected HtmlFormat getFormat() {
+		return format;
+	}
+
+	/**
+	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#XML}.
+	 *
+	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#XML}.
+	 */
+	protected boolean isXml() {
+		return format == HtmlFormat.XML;
+	}
+
+	/**
+	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#PLAIN_TEXT}.
+	 *
+	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#PLAIN_TEXT}.
+	 */
+	protected boolean isPlainText() {
+		return format == HtmlFormat.PLAIN_TEXT;
+	}
+
+	/**
+	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML}.
+	 *
+	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML}.
+	 */
+	protected boolean isHtml() {
+		return format == HtmlFormat.HTML;
+	}
+
+	/**
+	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML_CDC}.
+	 *
+	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML_CDC}.
+	 */
+	protected boolean isHtmlCdc() {
+		return format == HtmlFormat.HTML_CDC;
+	}
+
+	/**
+	 * Returns <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML_SDC}.
+	 *
+	 * @return <jk>true</jk> if {@link #getFormat()} returns {@link HtmlFormat#HTML_SDC}.
+	 */
+	protected boolean isHtmlSdc() {
+		return format == HtmlFormat.HTML_SDC;
+	}
+
+	/**
+	 * Returns the {@link Html#noTables() @Html(noTables)} annotation defined on the class.
+	 *
+	 * @return The value of the annotation.
+	 */
+	protected boolean isNoTables() {
+		return noTables;
+	}
+
+	/**
+	 * Returns the {@link Html#noTableHeaders() @Html(noTableHeaders)} annotation defined on the class.
+	 *
+	 * @return The value of the annotation.
+	 */
+	public boolean isNoTableHeaders() {
+		return noTableHeaders;
+	}
+
+	/**
+	 * Returns the {@link Html#render() @Html(render)} annotation defined on the class.
+	 *
+	 * @return The value of the annotation.
+	 */
+	public HtmlRender<?> getRender() {
+		return render;
+	}
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
index 07463ae47..a7d9fe066 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
@@ -1,837 +1,838 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.html;
-
-import static org.apache.juneau.collections.JsonMap.*;
-import static org.apache.juneau.common.internal.ThrowableUtils.*;
-import static org.apache.juneau.common.internal.Utils.*;
-import static org.apache.juneau.internal.CollectionUtils.*;
-
-import java.lang.annotation.*;
-import java.nio.charset.*;
-import java.util.*;
-import java.util.function.*;
-import java.util.regex.*;
-
-import org.apache.juneau.*;
-import org.apache.juneau.collections.*;
-import org.apache.juneau.common.internal.*;
-import org.apache.juneau.internal.*;
-import org.apache.juneau.svl.*;
-import org.apache.juneau.utils.*;
-import org.apache.juneau.xml.*;
-
-/**
- * Serializes POJOs to HTTP responses as HTML documents.
- *
- * <h5 class='topic'>Media types</h5>
- * <p>
- * Handles <c>Accept</c> types:  <bc>text/html</bc>
- * <p>
- * Produces <c>Content-Type</c> types:  <bc>text/html</bc>
- *
- * <h5 class='topic'>Description</h5>
- * <p>
- * Same as {@link HtmlSerializer}, except wraps the response in <code><xt>&lt;html&gt;</code>,
- * <code><xt>&lt;head&gt;</code>, and <code><xt>&lt;body&gt;</code> tags so that it can be rendered in a browser.
- *
- * <p>
- * Configurable properties are typically specified via <ja>@HtmlDocConfig</ja>.
- *
- * <h5 class='section'>Example:</h5>
- * <p class='bjava'>
- * 	<ja>@Rest</ja>(
- * 		messages=<js>"nls/AddressBookResource"</js>,
- * 		title=<js>"$L{title}"</js>,
- * 		description=<js>"$L{description}"</js>
- * 	)
- * 	<ja>@HtmlDocConfig</ja>(
- * 		navlinks={
- * 			<js>"api: servlet:/api"</js>,
- * 			<js>"doc: doc"</js>
- * 		}
- * 	)
- * 	<jk>public class</jk> AddressBookResource <jk>extends</jk> BasicRestServlet {
- * </p>
- *
- * <p>
- * The <c>$L{...}</c> variable represent localized strings pulled from the resource bundle identified by the
- * <c>messages</c> annotation.
- * <br>These variables are replaced at runtime based on the HTTP request locale.
- * <br>Several built-in runtime variable types are defined, and the API can be extended to include user-defined variables.
- *
- * <h5 class='section'>Notes:</h5><ul>
- * 	<li class='note'>This class is thread safe and reusable.
- * </ul>
- *
- * <h5 class='section'>See Also:</h5><ul>
- * 	<li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/HtmlBasics">HTML Details</a>
- * </ul>
- */
-public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
-
-	//-------------------------------------------------------------------------------------------------------------------
-	// Static
-	//-------------------------------------------------------------------------------------------------------------------
-
-	private static final String[] EMPTY_ARRAY = {};
-
-	/** Default serializer, all default settings. */
-	public static final HtmlDocSerializer DEFAULT = new HtmlDocSerializer(create());
-
-	/**
-	 * Creates a new builder for this object.
-	 *
-	 * @return A new builder.
-	 */
-	public static Builder create() {
-		return new Builder();
-	}
-
-	//-------------------------------------------------------------------------------------------------------------------
-	// Builder
-	//-------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Builder class.
-	 */
-	@FluentSetters
-	public static class Builder extends HtmlStrippedDocSerializer.Builder {
-
-		private static final Cache<HashKey,HtmlDocSerializer> CACHE = Cache.of(HashKey.class, HtmlDocSerializer.class).build();
-
-		List<String> aside, footer, head, header, nav, navlinks, script, style, stylesheet;
-		AsideFloat asideFloat;
-		String noResultsMessage;
-		boolean nowrap, resolveBodyVars;
-		Class<? extends HtmlDocTemplate> template;
-		List<Class<? extends HtmlWidget>> widgets;
-
-		/**
-		 * Constructor, default settings.
-		 */
-		protected Builder() {
-			produces("text/html");
-			accept("text/html");
-			asideFloat = AsideFloat.RIGHT;
-			noResultsMessage = "<p>no results</p>";
-			template = BasicHtmlDocTemplate.class;
-		}
-
-		/**
-		 * Copy constructor.
-		 *
-		 * @param copyFrom The bean to copy from.
-		 */
-		protected Builder(HtmlDocSerializer copyFrom) {
-			super(copyFrom);
-			aside = copy(copyFrom.aside);
-			footer = copy(copyFrom.footer);
-			head = copy(copyFrom.head);
-			header = copy(copyFrom.header);
-			nav = copy(copyFrom.nav);
-			navlinks = copy(copyFrom.navlinks);
-			script = copy(copyFrom.script);
-			style = copy(copyFrom.style);
-			stylesheet = copy(copyFrom.stylesheet);
-			asideFloat = copyFrom.asideFloat;
-			noResultsMessage = copyFrom.noResultsMessage;
-			nowrap = copyFrom.nowrap;
-			resolveBodyVars = copyFrom.resolveBodyVars;
-			template = copyFrom.template;
-			widgets = copy(copyFrom.widgets);
-		}
-
-		/**
-		 * Copy constructor.
-		 *
-		 * @param copyFrom The builder to copy from.
-		 */
-		protected Builder(Builder copyFrom) {
-			super(copyFrom);
-			aside = copy(copyFrom.aside);
-			footer = copy(copyFrom.footer);
-			head = copy(copyFrom.head);
-			header = copy(copyFrom.header);
-			nav = copy(copyFrom.nav);
-			navlinks = copy(copyFrom.navlinks);
-			script = copy(copyFrom.script);
-			style = copy(copyFrom.style);
-			stylesheet = copy(copyFrom.stylesheet);
-			asideFloat = copyFrom.asideFloat;
-			noResultsMessage = copyFrom.noResultsMessage;
-			nowrap = copyFrom.nowrap;
-			resolveBodyVars = copyFrom.resolveBodyVars;
-			template = copyFrom.template;
-			widgets = copy(copyFrom.widgets);
-		}
-
-		@Override /* Context.Builder */
-		public Builder copy() {
-			return new Builder(this);
-		}
-
-		@Override /* Context.Builder */
-		public HtmlDocSerializer build() {
-			return cache(CACHE).build(HtmlDocSerializer.class);
-		}
-
-		@Override /* Context.Builder */
-		public HashKey hashKey() {
-			return HashKey.of(
-				super.hashKey(),
-				aside,
-				footer,
-				head,
-				header,
-				nav,
-				navlinks,
-				script,
-				style,
-				stylesheet,
-				asideFloat,
-				noResultsMessage,
-				nowrap,
-				resolveBodyVars,
-				template,
-				widgets
-			);
-		}
-
-		//-----------------------------------------------------------------------------------------------------------------
-		// Properties
-		//-----------------------------------------------------------------------------------------------------------------
-
-		/**
-		 * Aside section contents.
-		 *
-		 * <p>
-		 * Allows you to specify the contents of the aside section on the HTML page.
-		 * The aside section floats on the right of the page for providing content supporting the serialized content of
-		 * the page.
-		 *
-		 * <p>
-		 * By default, the aside section is empty.
-		 *
-		 * <h5 class='section'>Example:</h5>
-		 * <p class='bjava'>
-		 * 	WriterSerializer <jv>serializer</jv> = HtmlDocSerializer
-		 * 		.<jsm>create</jsm>()
-		 * 		.aside(
-		 * 			<js>"&lt;ul&gt;"</js>,
-		 * 			<js>"	&lt;li&gt;Item 1"</js>,
-		 * 			<js>"	&lt;li&gt;Item 2"</js>,
-		 * 			<js>"	&lt;li&gt;Item 3"</js>,
-		 * 			<js>"&lt;/ul&gt;"</js>
-		 * 		)
-		 * 		.build();
-		 * </p>
-		 *
-		 * <h5 class='section'>Notes:</h5><ul>
-		 * 	<li class='note'>
-		 * 		Format: HTML
-		 * 	<li class='note'>
-		 * 		Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/SvlVariables">SVL Variables</a>
-		 * 		(e.g. <js>"$L{my.localized.variable}"</js>).
-		 * 	<li class='note'>
-		 * 		A value of <js>"NONE"</js> can be used to force no value.
-		 * 	<li class='note'>
-		 * 		The parent value can be included by adding the literal <js>"INHERIT"</js> as a value.
-		 * 	<li class='note'>
-		 * 		Multiple values are combined with newlines into a single string.
-		 * 	<li class='note'>
-		 * 		On methods, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the servlet/resource class.
-		 * 	<li class='note'>
-		 * 		On servlet/resource classes, this value is inherited from the <ja>@HtmlDocConfig</ja> annotation on the
-		 * 		parent class.
-		 * </ul>
-		 *
-		 * @param value
-		 * 	The new value for this property.
-		 * @return This object.
-		 */
-		@FluentSetter
-		public Builder aside(String...value) {
-			aside = merge(aside, value);
-			return this;
-		}
-
-		/**
-		 * Returns the list of aside section contents.
-		 *
-		 * <p>
-		 * Gives access to the inner list if you need to make more than simple additions via {@link #aside(String...)}.
-		 *
-		 * @return The list of aside section contents.
-		 * @see #aside(String...)
-		 */
-		public List<String> aside() {
-			if (aside == null)
-				aside = list();
-			return aside;
-		}
-
-		/**
-		 * Float aside section contents.
-		 *
-		 * <p>
-		 * Allows you to position the aside contents of the page around the main contents.
-		 *
-		 * <p>
-		 * By default, the aside section is floated to the right.
-		 *
-		 * <h5 class='section'>Example:</h5>
-		 * <p class='bjava'>
-		 * 	WriterSerializer <jv>serializer</jv> = HtmlDocSerializer
-		 * 		.<jsm>create</jsm>()
-		 * 		.aside(
-		 * 			<js>"&lt;ul&gt;"</js>,
-		 * 			<js>"	&lt;li&gt;Item 1"</js>,
-		 * 			<js>"	&lt;li&gt;Item 2"</js>,
-		 * 			<js>"	&lt;li&gt;Item 3"</js>,
-		 * 			<js>"&lt;/ul&gt;"</js>
-		 * 		)
-		 * 		.asideFloat(<jsf>RIGHT</jsf>)
-		 * 		.build();
-		 * </p>
-		 *
-		 * @param value
-		 * 	The new value for this property.
-		 * @return This object.
-		 */
-		@FluentSetter
-		public Builder asideFloat(AsideFloat value) {
-			asideFloat = value;
-			return this;
-		}
-
-		/**
-		 * Footer section contents.
-		 *
-		 * <p>
-		 * Allows you to specify the contents of the footer section on the HTML page.
-		 *
-		 * <p>
-		 * By default, the footer section is empty.
-		 *
-		 * <h5 class='section'>Example:</h5>
-		 * <p class='bjava'>
-		 * 	WriterSerializer <jv>serializer</jv> = HtmlDocSerializer
-		 * 		.<jsm>create</jsm>()
-		 * 		.footer(
-		 * 			<js>"&lt;b&gt;This interface is great!&lt;/b&gt;"</js>
-		 * 		)
-		 * 		.build();
-		 * </p>
-		 *
-		 * @param value
-		 * 	The new value for this property.
-		 * @return This object.
-		 */
-		@FluentSetter
-		public Builder footer(String...value) {
-			footer = merge(footer, value);
-			return this;
-		}
-
-		/**
-		 * Returns the list of footer section contents.
-		 *
-		 * <p>
-		 * Gives access to the inner list if you need to make more than simple additions via {@link #footer(String...)}.
-		 *
-		 * @return The list of footer section contents.
-		 * @see #footer(String...)
-		 */
-		public List<String> footer() {
-			if (footer == null)
-				footer = list();
-			return footer;
-		}
-
-		/**
-		 * Additional head section content.
-		 *
-		 * <p>
-		 * Adds the specified HTML content to the head section of the page.
-		 *
-		 * <h5 class='section'>Example:</h5>
-		 * <p class='bjava'>
-		 * 	WriterSerializer <jv>serializer</jv> = HtmlDocSerializer
-		 * 		.<jsm>create</jsm>()
-		 * 		.head(
-		 * 			<js>"&lt;link rel='icon' href='$U{servlet:/htdocs/mypageicon.ico}'&gt;"</js>
-		 * 		)
-		 * 		.build();
-		 * </p>
-		 *
-		 * @param value
-		 * 	The new value for this property.
-		 * @return This object.
-		 */
-		@FluentSetter
-		public Builder head(String...value) {
-			head = merge(head, value);
-			return this;
-		}
-
-		/**
-		 * Returns the list of head section contents.
-		 *
-		 * <p>
-		 * Gives access to the inner list if you need to make more than simple additions via {@link #head(String...)}.
-		 *
-		 * @return The list of head section contents.
-		 * @see #head(String...)
-		 */
-		public List<String> head() {
-			if (head == null)
-				head = list();
-			return head;
-		}
-
-		/**
-		 * Header section contents.
-		 *
-		 * <p>
-		 * Allows you to override the contents of the header section on the HTML page.
-		 * The header section normally contains the title and description at the top of the page.
-		 *
-		 * <h5 class='section'>Example:</h5>
-		 * <p class='bjava'>
-		 * 	WriterSerializer <jv>serializer</jv> = HtmlDocSerializer
-		 * 		.<jsm>create</jsm>()
-		 * 		.header(
-		 * 			<js>"&lt;h1&gt;My own header&lt;/h1&gt;"</js>
-		 * 		)
-		 * 		.build()
-		 * </p>
-		 *
-		 * @param value
-		 * 	The new value for this property.
-		 * @return This object.
-		 */
-		@FluentSetter
-		public Builder header(String...value) {
-			header = merge(header, value);
-			return this;
-		}
-
-		/**
-		 * Returns the list of header section contents.
-		 *
-		 * <p>
-		 * Gives access to the inner list if you need to make more than simple additions via {@link #header(String...)}.
-		 *
-		 * @return The list of header section contents.
-		 * @see #header(String...)
-		 */
-		public List<String> header() {
-			if (header == null)
-				header = list();
-			return header;
-		}
-
-		/**
-		 * Nav section contents.
-		 *
-		 * <p>
-		 * Allows you to override the contents of the nav section on the HTML page.
-		 * The nav section normally contains the page links at the top of the page.
-		 *
... 131281 lines suppressed ...