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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > juneau-assertions > 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 > 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 > juneau-config > 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 > juneau-marshall > Simple Variable Language</a>
- * <li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/VariableBasics">Overview > juneau-config > 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<Pet> 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&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<Pet> 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&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><html></code>,
- * <code><xt><head></code>, and <code><xt><body></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>"<ul>"</js>,
- * <js>" <li>Item 1"</js>,
- * <js>" <li>Item 2"</js>,
- * <js>" <li>Item 3"</js>,
- * <js>"</ul>"</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>"<ul>"</js>,
- * <js>" <li>Item 1"</js>,
- * <js>" <li>Item 2"</js>,
- * <js>" <li>Item 3"</js>,
- * <js>"</ul>"</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>"<b>This interface is great!</b>"</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>"<link rel='icon' href='$U{servlet:/htdocs/mypageicon.ico}'>"</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>"<h1>My own header</h1>"</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 ...