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 588e224ac7 org.apache.juneau.common.reflect API improvements
588e224ac7 is described below

commit 588e224ac7f64a68fc54e2e894fb5d92a79b0bd8
Author: James Bognar <[email protected]>
AuthorDate: Mon Nov 24 09:06:51 2025 -0500

    org.apache.juneau.common.reflect API improvements
---
 .../juneau/common/annotation/AnnotationObject.java |  39 +-------
 .../apache/juneau/common/utils/ThrowableUtils.java |   4 +-
 .../juneau/jena/annotation/RdfAnnotation.java      |  12 +++
 .../main/java/org/apache/juneau/UriResolver.java   |   8 +-
 .../apache/juneau/annotation/BeanAnnotation.java   |  19 ++++
 .../juneau/annotation/BeanIgnoreAnnotation.java    |  21 ++++
 .../apache/juneau/annotation/BeancAnnotation.java  |  21 +++-
 .../apache/juneau/annotation/BeanpAnnotation.java  |  19 ++++
 .../juneau/annotation/ExampleAnnotation.java       |  19 ++++
 .../juneau/annotation/ExternalDocsAnnotation.java  |  21 ++++
 .../apache/juneau/annotation/ItemsAnnotation.java  |  19 ++++
 .../juneau/annotation/MarshalledAnnotation.java    |  19 ++++
 .../juneau/annotation/NamePropertyAnnotation.java  |  20 ++++
 .../annotation/ParentPropertyAnnotation.java       |  20 ++++
 .../apache/juneau/annotation/SchemaAnnotation.java |  18 ++++
 .../juneau/annotation/SubItemsAnnotation.java      |  19 ++++
 .../apache/juneau/annotation/SwapAnnotation.java   |  19 ++++
 .../apache/juneau/annotation/UriAnnotation.java    |  20 ++++
 .../juneau/csv/annotation/CsvAnnotation.java       |  20 ++++
 .../apache/juneau/html/HtmlSerializerSession.java  |  50 +++++-----
 .../juneau/html/annotation/HtmlAnnotation.java     |  25 ++++-
 .../juneau/html/annotation/HtmlLinkAnnotation.java |  19 ++++
 .../juneau/http/annotation/ContactAnnotation.java  |  21 ++++
 .../juneau/http/annotation/ContentAnnotation.java  |  15 ++-
 .../juneau/http/annotation/FormDataAnnotation.java |  19 ++++
 .../http/annotation/HasFormDataAnnotation.java     |  21 ++++
 .../juneau/http/annotation/HasQueryAnnotation.java |  21 ++++
 .../juneau/http/annotation/HeaderAnnotation.java   |  19 ++++
 .../juneau/http/annotation/LicenseAnnotation.java  |  21 ++++
 .../juneau/http/annotation/PathAnnotation.java     |  19 ++++
 .../http/annotation/PathRemainderAnnotation.java   |  17 ++--
 .../juneau/http/annotation/QueryAnnotation.java    |  19 ++++
 .../juneau/http/annotation/RequestAnnotation.java  |  19 ++++
 .../juneau/http/annotation/ResponseAnnotation.java |  19 ++++
 .../http/annotation/StatusCodeAnnotation.java      |  19 ++++
 .../juneau/http/annotation/TagAnnotation.java      |  21 ++++
 .../juneau/httppart/bean/ResponseBeanMeta.java     |   4 +-
 .../juneau/json/annotation/JsonAnnotation.java     |  19 ++++
 .../msgpack/annotation/MsgPackAnnotation.java      |  20 ++++
 .../apache/juneau/oapi/OpenApiParserSession.java   | 108 ++++++++++-----------
 .../juneau/oapi/annotation/OpenApiAnnotation.java  |  20 ++++
 .../juneau/objecttools/StringMatcherFactory.java   |   4 +-
 .../plaintext/annotation/PlainTextAnnotation.java  |  20 ++++
 .../juneau/soap/annotation/SoapXmlAnnotation.java  |  20 ++++
 .../juneau/uon/annotation/UonAnnotation.java       |  20 ++++
 .../annotation/UrlEncodingAnnotation.java          |  19 ++++
 .../org/apache/juneau/xml/XmlParserSession.java    |   6 +-
 .../juneau/xml/annotation/XmlAnnotation.java       |  19 ++++
 .../rest/annotation/OpSwaggerAnnotation.java       |  21 ++++
 .../juneau/rest/annotation/RestAnnotation.java     |  19 ++++
 .../rest/annotation/RestDeleteAnnotation.java      |  19 ++++
 .../rest/annotation/RestDestroyAnnotation.java     |  23 +++++
 .../rest/annotation/RestEndCallAnnotation.java     |  23 +++++
 .../juneau/rest/annotation/RestGetAnnotation.java  |  19 ++++
 .../juneau/rest/annotation/RestInitAnnotation.java |  23 +++++
 .../rest/annotation/RestInjectAnnotation.java      |  24 ++++-
 .../juneau/rest/annotation/RestOpAnnotation.java   |  19 ++++
 .../rest/annotation/RestOptionsAnnotation.java     |  19 ++++
 .../rest/annotation/RestPatchAnnotation.java       |  18 ++++
 .../juneau/rest/annotation/RestPostAnnotation.java |  19 ++++
 .../rest/annotation/RestPostCallAnnotation.java    |  23 +++++
 .../rest/annotation/RestPostInitAnnotation.java    |  21 ++++
 .../rest/annotation/RestPreCallAnnotation.java     |  23 +++++
 .../juneau/rest/annotation/RestPutAnnotation.java  |  19 ++++
 .../rest/annotation/RestStartCallAnnotation.java   |  23 +++++
 .../juneau/rest/annotation/SwaggerAnnotation.java  |  19 ++++
 66 files changed, 1224 insertions(+), 150 deletions(-)

diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/annotation/AnnotationObject.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/annotation/AnnotationObject.java
index 8af987eed6..09795dbaa4 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/annotation/AnnotationObject.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/annotation/AnnotationObject.java
@@ -53,7 +53,6 @@ public class AnnotationObject implements Annotation {
        public static class Builder<B> {
 
                Class<? extends Annotation> annotationType;
-               String[] description = {};
 
                /**
                 * Constructor.
@@ -64,32 +63,12 @@ public class AnnotationObject implements Annotation {
                        this.annotationType = annotationType;
                }
 
-       /**
-        * Sets the {@link AnnotationObject#description()} property on the 
target annotation.
-        *
-        * @param value The new value for this property.
-        * @return This object.
-        * @since 9.2.0
-        */
-       @SuppressWarnings("unchecked")
-       public B description(final String...value) {
-               description = value;
-               return (B)this;
-       }
-
-       /**
-        * Returns the annotation type being built.
-        *
-        * @return The annotation type being built.
-        */
-       public Class<? extends Annotation> getAnnotationType() { return 
annotationType; }
-
                /**
-                * Returns the description of this annotation builder.
+                * Returns the annotation type being built.
                 *
-                * @return The description array, or <jk>null</jk> if not set.
+                * @return The annotation type being built.
                 */
-               public String[] getDescription() { return description; }
+               public Class<? extends Annotation> getAnnotationType() { return 
annotationType; }
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
@@ -97,7 +76,6 @@ public class AnnotationObject implements Annotation {
        
//-----------------------------------------------------------------------------------------------------------------
 
        private final Class<? extends Annotation> annotationType;
-       private final String[] description;
        private int hashCode = -1;
 
        /**
@@ -107,7 +85,6 @@ public class AnnotationObject implements Annotation {
         */
        public AnnotationObject(Builder<?> b) {
                this.annotationType = b.getAnnotationType();
-               this.description = copyOf(b.getDescription());
        }
 
        /**
@@ -120,16 +97,6 @@ public class AnnotationObject implements Annotation {
                return annotationType;
        }
 
-       /**
-        * Returns the annotation description.
-        *
-        * @return the annotation description.
-        * @since 9.2.0
-        */
-       public String[] description() {
-               return description;
-       }
-
        @Override /* Overridden from Object */
        public boolean equals(Object o) {
                if (! annotationType.isInstance(o))
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/ThrowableUtils.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/ThrowableUtils.java
index fbf5870c9b..f5138187e3 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/ThrowableUtils.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/ThrowableUtils.java
@@ -74,9 +74,9 @@ public class ThrowableUtils {
                        if (cause.isInstance(e))
                                return opt(cause.cast(e));
                        e = e.getCause();
+               }
+               return opte();
        }
-       return opte();
-}
 
        /**
         * Convenience method for getting a stack trace as a string.
diff --git 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/annotation/RdfAnnotation.java
 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/annotation/RdfAnnotation.java
index 337c786322..a211c40916 100644
--- 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/annotation/RdfAnnotation.java
+++ 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/annotation/RdfAnnotation.java
@@ -63,6 +63,7 @@ public class RdfAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMF<Builder> {
 
+               String[] description = {};
                String namespace = "", prefix = "";
                boolean beanUri;
                RdfCollectionFormat collectionFormat = 
RdfCollectionFormat.DEFAULT;
@@ -94,6 +95,17 @@ public class RdfAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Rdf#collectionFormat} property on this 
annotation.
                 *
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/UriResolver.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/UriResolver.java
index 6bde56e2f7..be2f8d1edc 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/UriResolver.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/UriResolver.java
@@ -131,10 +131,10 @@ public class UriResolver {
         */
        public Appendable append(Appendable a, Object o) {
 
-       try {
-               var uri = s(o);
-               uri = nullIfEmpty(uri);
-               var needsNormalize = hasDotSegments(uri) && nn(resolution);
+               try {
+                       var uri = s(o);
+                       uri = nullIfEmpty(uri);
+                       var needsNormalize = hasDotSegments(uri) && 
nn(resolution);
 
                        // Absolute paths are not changed.
                        if (isAbsoluteUri(uri))
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanAnnotation.java
index 7681e312d2..d02cc58255 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanAnnotation.java
@@ -82,6 +82,7 @@ public class BeanAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderT<Builder> {
 
+               String[] description = {};
                Class<?>[] dictionary = new Class[0];
                Class<?> implClass = void.class;
                Class<?> interfaceClass = void.class;
@@ -107,6 +108,17 @@ public class BeanAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Bean#dictionary()} property on this 
annotation.
                 *
@@ -320,6 +332,7 @@ public class BeanAnnotation {
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements Bean {
 
+               private final String[] description;
                private final boolean findFluentSetters, sort;
                private final Class<? extends BeanInterceptor<?>> interceptor;
                private final Class<? extends PropertyNamer> propertyNamer;
@@ -329,6 +342,7 @@ public class BeanAnnotation {
 
                Object(BeanAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.dictionary = copyOf(b.dictionary);
                        this.example = b.example;
                        this.excludeProperties = b.excludeProperties;
@@ -445,6 +459,11 @@ public class BeanAnnotation {
                public String xp() {
                        return xp;
                }
+
+               @Override /* Overridden from Bean */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanIgnoreAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanIgnoreAnnotation.java
index bd88329f8f..2d01a72a79 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanIgnoreAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanIgnoreAnnotation.java
@@ -81,6 +81,8 @@ public class BeanIgnoreAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMFC<Builder> {
 
+               String[] description = {};
+
                /**
                 * Constructor.
                 */
@@ -97,14 +99,33 @@ public class BeanIgnoreAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
        }
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements BeanIgnore {
 
+               private final String[] description;
+
                Object(BeanIgnoreAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        postConstruct();
                }
+
+               @Override /* Overridden from BeanIgnore */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeancAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeancAnnotation.java
index d0cfaff615..4f7143fdf6 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeancAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeancAnnotation.java
@@ -81,6 +81,7 @@ public class BeancAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderC<Builder> {
 
+               String[] description = {};
                String properties = "";
 
                /**
@@ -99,6 +100,17 @@ public class BeancAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Beanc#properties()}  property on this 
annotation.
                 *
@@ -114,14 +126,21 @@ public class BeancAnnotation {
 
        private static class Object extends AppliedAnnotationObject implements 
Beanc {
 
-               private String properties = "";
+               private final String[] description;
+               private final String properties;
 
                Object(BeancAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.properties = b.properties;
                        postConstruct();
                }
 
+               @Override /* Overridden from Beanc */
+               public String[] description() {
+                       return description;
+               }
+
                @Override /* Overridden from Beanc */
                public String properties() {
                        return properties;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanpAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanpAnnotation.java
index f78e24c8ca..5e001c52f3 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanpAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanpAnnotation.java
@@ -81,6 +81,7 @@ public class BeanpAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderMF<Builder> {
 
+               String[] description = {};
                Class<?> type = void.class;
                Class<?>[] dictionary = new Class[0], params = new Class[0];
                String format = "", name = "", properties = "", ro = "", value 
= "", wo = "";
@@ -101,6 +102,17 @@ public class BeanpAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Beanp#dictionary()} property on this 
annotation.
                 *
@@ -204,12 +216,14 @@ public class BeanpAnnotation {
 
        private static class Object extends AppliedAnnotationObject implements 
Beanp {
 
+               private final String[] description;
                private final Class<?> type;
                private final Class<?>[] params, dictionary;
                private final String name, value, properties, format, ro, wo;
 
                Object(BeanpAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.dictionary = copyOf(b.dictionary);
                        this.format = b.format;
                        this.name = b.name;
@@ -266,6 +280,11 @@ public class BeanpAnnotation {
                public String wo() {
                        return wo;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ExampleAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ExampleAnnotation.java
index 89e7cbc965..96d7df9dc7 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ExampleAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ExampleAnnotation.java
@@ -81,6 +81,7 @@ public class ExampleAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMF<Builder> {
 
+               String[] description = {};
                String value = "";
 
                /**
@@ -99,6 +100,17 @@ public class ExampleAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the <c>value</c> property on this annotation.
                 *
@@ -114,10 +126,12 @@ public class ExampleAnnotation {
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements Example {
 
+               private final String[] description;
                private final String value;
 
                Object(ExampleAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.value = b.value;
                        postConstruct();
                }
@@ -126,6 +140,11 @@ public class ExampleAnnotation {
                public String value() {
                        return value;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ExternalDocsAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ExternalDocsAnnotation.java
index 72cf314473..9011d698c0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ExternalDocsAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ExternalDocsAnnotation.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.annotation;
 
+import static org.apache.juneau.common.utils.CollectionUtils.*;
+
 import static org.apache.juneau.jsonschema.SchemaUtils.*;
 
 import java.lang.annotation.*;
@@ -40,6 +42,7 @@ public class ExternalDocsAnnotation {
         */
        public static class Builder extends AnnotationObject.Builder<Builder> {
 
+               String[] description = {};
                String url = "";
 
                /**
@@ -58,6 +61,17 @@ public class ExternalDocsAnnotation {
                        return new Impl(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link ExternalDocs#url} property on this 
annotation.
                 *
@@ -73,10 +87,12 @@ public class ExternalDocsAnnotation {
 
        private static class Impl extends AnnotationObject implements 
ExternalDocs {
 
+               private final String[] description;
                private final String url;
 
                Impl(ExternalDocsAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.url = b.url;
                        postConstruct();
                }
@@ -85,6 +101,11 @@ public class ExternalDocsAnnotation {
                public String url() {
                        return url;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ItemsAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ItemsAnnotation.java
index d5b33c5d84..ad9929206a 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ItemsAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ItemsAnnotation.java
@@ -36,6 +36,7 @@ public class ItemsAnnotation {
         */
        public static class Builder extends AnnotationObject.Builder<Builder> {
 
+               String[] description = {};
                boolean emax, emin, exclusiveMaximum, exclusiveMinimum, ui, 
uniqueItems;
                long maxItems = -1, maxLength = -1, maxi = -1, maxl = -1, 
minItems = -1, minLength = -1, mini = -1, minl = -1;
                String $ref = "", cf = "", collectionFormat = "", f = "", 
format = "", max = "", maximum = "", min = "", minimum = "", mo = "", 
multipleOf = "", p = "", pattern = "", t = "", type = "";
@@ -91,6 +92,17 @@ public class ItemsAnnotation {
                        return new Impl(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Items#cf} property on this annotation.
                 *
@@ -436,6 +448,7 @@ public class ItemsAnnotation {
 
        private static class Impl extends AnnotationObject implements Items {
 
+               private final String[] description;
                private final boolean emax, emin, exclusiveMaximum, 
exclusiveMinimum, ui, uniqueItems;
                private final long maxi, maxItems, maxl, maxLength, mini, 
minItems, minl, minLength;
                private final String $ref, cf, collectionFormat, f, format, 
max, maximum, min, minimum, mo, multipleOf, p, pattern, t, type;
@@ -444,6 +457,7 @@ public class ItemsAnnotation {
 
                Impl(ItemsAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.$ref = b.$ref;
                        this._default = copyOf(b._default);
                        this._enum = copyOf(b._enum);
@@ -650,6 +664,11 @@ public class ItemsAnnotation {
                public boolean uniqueItems() {
                        return uniqueItems;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/MarshalledAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/MarshalledAnnotation.java
index 71dfe6a7dd..84e95d902e 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/MarshalledAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/MarshalledAnnotation.java
@@ -81,6 +81,7 @@ public class MarshalledAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderT<Builder> {
 
+               String[] description = {};
                Class<?> implClass = void.class;
                String example = "";
 
@@ -100,6 +101,17 @@ public class MarshalledAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Marshalled#example()} property on this 
annotation.
                 *
@@ -126,11 +138,13 @@ public class MarshalledAnnotation {
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements Marshalled {
 
+               private final String[] description;
                private final Class<?> implClass;
                private final String example;
 
                Object(MarshalledAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.example = b.example;
                        this.implClass = b.implClass;
                        postConstruct();
@@ -145,6 +159,11 @@ public class MarshalledAnnotation {
                public Class<?> implClass() {
                        return implClass;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/NamePropertyAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/NamePropertyAnnotation.java
index fcc05179ce..bfc9b07a54 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/NamePropertyAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/NamePropertyAnnotation.java
@@ -81,6 +81,8 @@ public class NamePropertyAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderMF<Builder> {
 
+               String[] description = {};
+
                /**
                 * Constructor.
                 */
@@ -97,14 +99,32 @@ public class NamePropertyAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
        }
 
        private static class Object extends AppliedAnnotationObject implements 
NameProperty {
 
+               private final String[] description;
+
                Object(NamePropertyAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        postConstruct();
                }
+
+               @Override /* Overridden from NameProperty */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ParentPropertyAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ParentPropertyAnnotation.java
index e12c436b0c..e2174da493 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ParentPropertyAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ParentPropertyAnnotation.java
@@ -81,6 +81,8 @@ public class ParentPropertyAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderMF<Builder> {
 
+               String[] description = {};
+
                /**
                 * Constructor.
                 */
@@ -97,14 +99,32 @@ public class ParentPropertyAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
        }
 
        private static class Object extends AppliedAnnotationObject implements 
ParentProperty {
 
+               private final String[] description;
+
                Object(ParentPropertyAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        postConstruct();
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SchemaAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SchemaAnnotation.java
index ee1c645696..0af383c220 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SchemaAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SchemaAnnotation.java
@@ -270,6 +270,17 @@ public class SchemaAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Schema#cf} property on this annotation.
                 *
@@ -927,6 +938,7 @@ public class SchemaAnnotation {
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements Schema {
 
+               private final String[] description;
                private final boolean aev, allowEmptyValue, exclusiveMaximum, 
emax, exclusiveMinimum, emin, uniqueItems, ui, required, r, readOnly, ro, sie, 
skipIfEmpty, ignore;
                private final ExternalDocs externalDocs;
                private final Items items;
@@ -940,6 +952,7 @@ public class SchemaAnnotation {
 
                Object(SchemaAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.$ref = b.$ref;
                        this._default = copyOf(b._default);
                        this._enum = copyOf(b._enum);
@@ -1385,6 +1398,11 @@ public class SchemaAnnotation {
                public String[] xml() {
                        return xml;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SubItemsAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SubItemsAnnotation.java
index dad707eb54..bc4a6918e7 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SubItemsAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SubItemsAnnotation.java
@@ -42,6 +42,7 @@ public class SubItemsAnnotation {
         */
        public static class Builder extends AnnotationObject.Builder<Builder> {
 
+               String[] description = {};
                String $ref = "", cf = "", collectionFormat = "", f = "", 
format = "", max = "", maximum = "", min = "", minimum = "", mo = "", 
multipleOf = "", p = "", pattern = "", t = "", type = "";
                long maxItems = -1, maxLength = -1, maxi = -1, maxl = -1, 
minItems = -1, minLength = -1, mini = -1, minl = -1;
                boolean emax, emin, exclusiveMaximum, exclusiveMinimum, ui, 
uniqueItems;
@@ -96,6 +97,17 @@ public class SubItemsAnnotation {
                        return new Impl(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the <c>cf</c> property on this annotation.
                 *
@@ -441,6 +453,7 @@ public class SubItemsAnnotation {
 
        private static class Impl extends AnnotationObject implements SubItems {
 
+               private final String[] description;
                private final boolean emax, emin, exclusiveMaximum, 
exclusiveMinimum, ui, uniqueItems;
                private final long maxi, maxItems, maxl, maxLength, mini, 
minItems, minl, minLength;
                private final String $ref, cf, collectionFormat, f, format, 
max, maximum, min, minimum, mo, multipleOf, p, pattern, t, type;
@@ -448,6 +461,7 @@ public class SubItemsAnnotation {
 
                Impl(SubItemsAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.$ref = b.$ref;
                        this._default = copyOf(b._default);
                        this._enum = copyOf(b._enum);
@@ -654,6 +668,11 @@ public class SubItemsAnnotation {
                public boolean uniqueItems() {
                        return uniqueItems;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SwapAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SwapAnnotation.java
index 078c79483d..4594ddc1f0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SwapAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SwapAnnotation.java
@@ -81,6 +81,7 @@ public class SwapAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMF<Builder> {
 
+               String[] description = {};
                Class<?> impl = void.class;
                Class<?> value = void.class;
                String template = "";
@@ -102,6 +103,17 @@ public class SwapAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Swap#impl()} property on this annotation.
                 *
@@ -150,12 +162,14 @@ public class SwapAnnotation {
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements Swap {
 
+               private final String[] description;
                private final Class<?> impl, value;
                private final String template;
                private final String[] mediaTypes;
 
                Object(SwapAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.impl = b.impl;
                        this.mediaTypes = copyOf(b.mediaTypes);
                        this.template = b.template;
@@ -182,6 +196,11 @@ public class SwapAnnotation {
                public Class<?> value() {
                        return value;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/UriAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/UriAnnotation.java
index e2adf6a146..8ab305063d 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/UriAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/UriAnnotation.java
@@ -81,6 +81,8 @@ public class UriAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMF<Builder> {
 
+               String[] description = {};
+
                /**
                 * Constructor.
                 */
@@ -97,14 +99,32 @@ public class UriAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
        }
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements Uri {
 
+               private final String[] description;
+
                Object(UriAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        postConstruct();
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/annotation/CsvAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/annotation/CsvAnnotation.java
index a16e34eabd..6e30c0bfbc 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/annotation/CsvAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/annotation/CsvAnnotation.java
@@ -81,6 +81,8 @@ public class CsvAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMF<Builder> {
 
+               String[] description = {};
+
                /**
                 * Constructor.
                 */
@@ -97,14 +99,32 @@ public class CsvAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
        }
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements Csv {
 
+               private final String[] description;
+
                Object(CsvAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        postConstruct();
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
index 795729f4dc..06e39d885d 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
@@ -232,31 +232,31 @@ public class HtmlSerializerSession extends 
XmlSerializerSession {
                        if (m.find())
                                return urlDecode(m.group(1));
                }
-       return switch (getUriAnchorText()) {
-               case LAST_TOKEN -> {
-                       s = resolveUri(s);
-                       if (s.indexOf('/') != -1)
-                               s = s.substring(s.lastIndexOf('/') + 1);
-                       if (s.indexOf('?') != -1)
-                               s = s.substring(0, s.indexOf('?'));
-                       if (s.indexOf('#') != -1)
-                               s = s.substring(0, s.indexOf('#'));
-                       if (s.isEmpty())
-                               s = "/";
-                       yield urlDecode(s);
-               }
-               case URI_ANCHOR -> {
-                       if (s.indexOf('#') != -1)
-                               s = s.substring(s.lastIndexOf('#') + 1);
-                       yield urlDecode(s);
-               }
-               case PROPERTY_NAME -> pMeta == null ? s : pMeta.getName();
-               case URI -> resolveUri(s);
-               case CONTEXT_RELATIVE -> relativizeUri("context:/", s);
-               case SERVLET_RELATIVE -> relativizeUri("servlet:/", s);
-               case PATH_RELATIVE -> relativizeUri("request:/", s);
-               default /* TO_STRING */ -> s;
-       };
+               return switch (getUriAnchorText()) {
+                       case LAST_TOKEN -> {
+                               s = resolveUri(s);
+                               if (s.indexOf('/') != -1)
+                                       s = s.substring(s.lastIndexOf('/') + 1);
+                               if (s.indexOf('?') != -1)
+                                       s = s.substring(0, s.indexOf('?'));
+                               if (s.indexOf('#') != -1)
+                                       s = s.substring(0, s.indexOf('#'));
+                               if (s.isEmpty())
+                                       s = "/";
+                               yield urlDecode(s);
+                       }
+                       case URI_ANCHOR -> {
+                               if (s.indexOf('#') != -1)
+                                       s = s.substring(s.lastIndexOf('#') + 1);
+                               yield urlDecode(s);
+                       }
+                       case PROPERTY_NAME -> pMeta == null ? s : 
pMeta.getName();
+                       case URI -> resolveUri(s);
+                       case CONTEXT_RELATIVE -> relativizeUri("context:/", s);
+                       case SERVLET_RELATIVE -> relativizeUri("servlet:/", s);
+                       case PATH_RELATIVE -> relativizeUri("request:/", s);
+                       default /* TO_STRING */ -> s;
+               };
        }
 
        @Override /* Overridden from XmlSerializer */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlAnnotation.java
index 6a8e7b7c56..a1e46ee3de 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlAnnotation.java
@@ -86,6 +86,7 @@ public class HtmlAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMF<Builder> {
 
+               String[] description = {};
                String anchorText = "", link = "", style = "";
                HtmlFormat format = HtmlFormat.HTML;
                boolean noTableHeaders, noTables;
@@ -118,6 +119,17 @@ public class HtmlAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Html#format()} property on this annotation.
                 *
@@ -188,13 +200,15 @@ public class HtmlAnnotation {
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements Html {
 
-               private boolean noTableHeaders, noTables;
-               private Class<? extends HtmlRender> render;
+               private final String[] description;
+               private final boolean noTableHeaders, noTables;
+               private final Class<? extends HtmlRender> render;
                private final String anchorText, link, style;
-               private HtmlFormat format;
+               private final HtmlFormat format;
 
                Object(HtmlAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.anchorText = b.anchorText;
                        this.format = b.format;
                        this.link = b.link;
@@ -239,6 +253,11 @@ public class HtmlAnnotation {
                public String style() {
                        return style;
                }
+
+               @Override /* Overridden from Html */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLinkAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLinkAnnotation.java
index 0ee99c4ddb..e985ddb267 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLinkAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLinkAnnotation.java
@@ -84,6 +84,7 @@ public class HtmlLinkAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderT<Builder> {
 
+               String[] description = {};
                String nameProperty = "", uriProperty = "";
 
                /**
@@ -102,6 +103,17 @@ public class HtmlLinkAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link HtmlLink#nameProperty()} property on this 
annotation.
                 *
@@ -128,10 +140,12 @@ public class HtmlLinkAnnotation {
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements HtmlLink {
 
+               private final String[] description;
                private final String nameProperty, uriProperty;
 
                Object(HtmlLinkAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.nameProperty = b.nameProperty;
                        this.uriProperty = b.uriProperty;
                        postConstruct();
@@ -146,6 +160,11 @@ public class HtmlLinkAnnotation {
                public String uriProperty() {
                        return uriProperty;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/ContactAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/ContactAnnotation.java
index 22c2660895..80ec9101d0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/ContactAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/ContactAnnotation.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.http.annotation;
 
+import static org.apache.juneau.common.utils.CollectionUtils.*;
+
 import java.lang.annotation.*;
 
 import org.apache.juneau.common.annotation.*;
@@ -34,6 +36,7 @@ public class ContactAnnotation {
         */
        public static class Builder extends AnnotationObject.Builder<Builder> {
 
+               String[] description = {};
                String email = "", name = "", url = "";
 
                /**
@@ -52,6 +55,17 @@ public class ContactAnnotation {
                        return new Impl(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Contact#email} property on this annotation.
                 *
@@ -89,10 +103,12 @@ public class ContactAnnotation {
 
        private static class Impl extends AnnotationObject implements Contact {
 
+               private final String[] description;
                private final String email, name, url;
 
                Impl(ContactAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.email = b.email;
                        this.name = b.name;
                        this.url = b.url;
@@ -113,6 +129,11 @@ public class ContactAnnotation {
                public String url() {
                        return url;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/ContentAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/ContentAnnotation.java
index 3a6d13fa3a..84ad05ba15 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/ContentAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/ContentAnnotation.java
@@ -119,7 +119,6 @@ public class ContentAnnotation {
                 * @param value The new value for this property.
                 * @return This object.
                 */
-               @Override
                public Builder description(String...value) {
                        this.description = value;
                        return this;
@@ -140,14 +139,14 @@ public class ContentAnnotation {
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements Content {
 
-               private final String def;
                private final String[] description;
+               private final String def;
                private final Schema schema;
 
                Object(ContentAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.def = b.def;
-                       this.description = b.description;
                        this.schema = b.schema;
                        postConstruct();
                }
@@ -157,15 +156,15 @@ public class ContentAnnotation {
                        return def;
                }
 
-               @Override /* Overridden from Content */
-               public String[] description() {
-                       return description;
-               }
-
                @Override /* Overridden from Content */
                public Schema schema() {
                        return schema;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/FormDataAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/FormDataAnnotation.java
index 9965ac88c4..de39c25ba6 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/FormDataAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/FormDataAnnotation.java
@@ -89,6 +89,7 @@ public class FormDataAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMF<Builder> {
 
+               String[] description = {};
                Class<? extends HttpPartParser> parser = 
HttpPartParser.Void.class;
                Class<? extends HttpPartSerializer> serializer = 
HttpPartSerializer.Void.class;
                Schema schema = SchemaAnnotation.DEFAULT;
@@ -110,6 +111,17 @@ public class FormDataAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link FormData#def} property on this annotation.
                 *
@@ -180,6 +192,7 @@ public class FormDataAnnotation {
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements FormData {
 
+               private final String[] description;
                private final Class<? extends HttpPartParser> parser;
                private final Class<? extends HttpPartSerializer> serializer;
                private final String name, value, def;
@@ -187,6 +200,7 @@ public class FormDataAnnotation {
 
                Object(FormDataAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.def = b.def;
                        this.name = b.name;
                        this.parser = b.parser;
@@ -225,6 +239,11 @@ public class FormDataAnnotation {
                public String value() {
                        return value;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HasFormDataAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HasFormDataAnnotation.java
index 2884d18c45..6ee4f205a2 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HasFormDataAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HasFormDataAnnotation.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.http.annotation;
 
+import static org.apache.juneau.common.utils.CollectionUtils.*;
+
 import java.lang.annotation.*;
 
 import org.apache.juneau.common.annotation.*;
@@ -34,6 +36,7 @@ public class HasFormDataAnnotation {
         */
        public static class Builder extends AnnotationObject.Builder<Builder> {
 
+               String[] description = {};
                String name = "", value = "";
 
                /**
@@ -52,6 +55,17 @@ public class HasFormDataAnnotation {
                        return new Impl(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link HasFormData#name} property on this 
annotation.
                 *
@@ -78,10 +92,12 @@ public class HasFormDataAnnotation {
 
        private static class Impl extends AnnotationObject implements 
HasFormData {
 
+               private final String[] description;
                private final String name, value;
 
                Impl(HasFormDataAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.name = b.name;
                        this.value = b.value;
                        postConstruct();
@@ -96,6 +112,11 @@ public class HasFormDataAnnotation {
                public String value() {
                        return value;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HasQueryAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HasQueryAnnotation.java
index 6b2613e384..af337a69d6 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HasQueryAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HasQueryAnnotation.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.http.annotation;
 
+import static org.apache.juneau.common.utils.CollectionUtils.*;
+
 import java.lang.annotation.*;
 
 import org.apache.juneau.common.annotation.*;
@@ -34,6 +36,7 @@ public class HasQueryAnnotation {
         */
        public static class Builder extends AnnotationObject.Builder<Builder> {
 
+               String[] description = {};
                String name = "", value = "";
 
                /**
@@ -52,6 +55,17 @@ public class HasQueryAnnotation {
                        return new Impl(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link HasQuery#name} property on this annotation.
                 *
@@ -78,10 +92,12 @@ public class HasQueryAnnotation {
 
        private static class Impl extends AnnotationObject implements HasQuery {
 
+               private final String[] description;
                private final String name, value;
 
                Impl(HasQueryAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.name = b.name;
                        this.value = b.value;
                        postConstruct();
@@ -96,6 +112,11 @@ public class HasQueryAnnotation {
                public String value() {
                        return value;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HeaderAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HeaderAnnotation.java
index 1cab753105..86d73ad487 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HeaderAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HeaderAnnotation.java
@@ -89,6 +89,7 @@ public class HeaderAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMF<Builder> {
 
+               String[] description = {};
                Class<? extends HttpPartParser> parser = 
HttpPartParser.Void.class;
                Class<? extends HttpPartSerializer> serializer = 
HttpPartSerializer.Void.class;
                Schema schema = SchemaAnnotation.DEFAULT;
@@ -110,6 +111,17 @@ public class HeaderAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Header#def} property on this annotation.
                 *
@@ -180,6 +192,7 @@ public class HeaderAnnotation {
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements Header {
 
+               private final String[] description;
                private final Class<? extends HttpPartParser> parser;
                private final Class<? extends HttpPartSerializer> serializer;
                private final String name, value, def;
@@ -187,6 +200,7 @@ public class HeaderAnnotation {
 
                Object(HeaderAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.def = b.def;
                        this.name = b.name;
                        this.parser = b.parser;
@@ -225,6 +239,11 @@ public class HeaderAnnotation {
                public String value() {
                        return value;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/LicenseAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/LicenseAnnotation.java
index 98c7a8bd0f..7aff727c4a 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/LicenseAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/LicenseAnnotation.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.http.annotation;
 
+import static org.apache.juneau.common.utils.CollectionUtils.*;
+
 import java.lang.annotation.*;
 
 import org.apache.juneau.common.annotation.*;
@@ -34,6 +36,7 @@ public class LicenseAnnotation {
         */
        public static class Builder extends AnnotationObject.Builder<Builder> {
 
+               String[] description = {};
                String name = "", url = "";
 
                /**
@@ -52,6 +55,17 @@ public class LicenseAnnotation {
                        return new Impl(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link License#name} property on this annotation.
                 *
@@ -78,10 +92,12 @@ public class LicenseAnnotation {
 
        private static class Impl extends AnnotationObject implements License {
 
+               private final String[] description;
                private final String name, url;
 
                Impl(LicenseAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.name = b.name;
                        this.url = b.url;
                        postConstruct();
@@ -96,6 +112,11 @@ public class LicenseAnnotation {
                public String url() {
                        return url;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/PathAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/PathAnnotation.java
index 7bface495a..7340a75591 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/PathAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/PathAnnotation.java
@@ -90,6 +90,7 @@ public class PathAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMF<Builder> {
 
+               String[] description = {};
                Class<? extends HttpPartParser> parser = 
HttpPartParser.Void.class;
                Class<? extends HttpPartSerializer> serializer = 
HttpPartSerializer.Void.class;
                Schema schema = SchemaAnnotation.DEFAULT;
@@ -111,6 +112,17 @@ public class PathAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Path#name} property on this annotation.
                 *
@@ -181,6 +193,7 @@ public class PathAnnotation {
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements Path {
 
+               private final String[] description;
                private final Class<? extends HttpPartParser> parser;
                private final Class<? extends HttpPartSerializer> serializer;
                private final String name, value, def;
@@ -188,6 +201,7 @@ public class PathAnnotation {
 
                Object(PathAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.def = b.def;
                        this.name = b.name;
                        this.parser = b.parser;
@@ -226,6 +240,11 @@ public class PathAnnotation {
                public String value() {
                        return value;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/PathRemainderAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/PathRemainderAnnotation.java
index 6b17cd07e4..036f833c0e 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/PathRemainderAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/PathRemainderAnnotation.java
@@ -95,10 +95,10 @@ public class PathRemainderAnnotation {
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMF<Builder> {
 
                Class<? extends HttpPartParser> parser = 
HttpPartParser.Void.class;
+               String[] description = {};
                Class<? extends HttpPartSerializer> serializer = 
HttpPartSerializer.Void.class;
                Schema schema = SchemaAnnotation.DEFAULT;
                String def = "";
-               String[] description = {};
 
                /**
                 * Constructor.
@@ -133,7 +133,6 @@ public class PathRemainderAnnotation {
                 * @param value The new value for this property.
                 * @return This object.
                 */
-               @Override
                public Builder description(String...value) {
                        this.description = value;
                        return this;
@@ -175,16 +174,16 @@ public class PathRemainderAnnotation {
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements PathRemainder {
 
+               private final String[] description;
                private final Class<? extends HttpPartParser> parser;
                private final Class<? extends HttpPartSerializer> serializer;
                private final String def;
-               private final String[] description;
                private final Schema schema;
 
                Object(PathRemainderAnnotation.Builder b) {
                        super(b);
-                       this.def = b.def;
                        this.description = copyOf(b.description);
+                       this.def = b.def;
                        this.parser = b.parser;
                        this.schema = b.schema;
                        this.serializer = b.serializer;
@@ -196,11 +195,6 @@ public class PathRemainderAnnotation {
                        return def;
                }
 
-               @Override /* Overridden from PathRemainder */
-               public String[] description() {
-                       return description;
-               }
-
                @Override /* Overridden from PathRemainder */
                public Class<? extends HttpPartParser> parser() {
                        return parser;
@@ -215,6 +209,11 @@ public class PathRemainderAnnotation {
                public Class<? extends HttpPartSerializer> serializer() {
                        return serializer;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/QueryAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/QueryAnnotation.java
index 6d9a7b2c46..083fc7c60c 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/QueryAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/QueryAnnotation.java
@@ -89,6 +89,7 @@ public class QueryAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMF<Builder> {
 
+               String[] description = {};
                Class<? extends HttpPartParser> parser = 
HttpPartParser.Void.class;
                Class<? extends HttpPartSerializer> serializer = 
HttpPartSerializer.Void.class;
                Schema schema = SchemaAnnotation.DEFAULT;
@@ -110,6 +111,17 @@ public class QueryAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Query#def} property on this annotation.
                 *
@@ -180,6 +192,7 @@ public class QueryAnnotation {
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements Query {
 
+               private final String[] description;
                private final Class<? extends HttpPartParser> parser;
                private final Class<? extends HttpPartSerializer> serializer;
                private final String name, value, def;
@@ -187,6 +200,7 @@ public class QueryAnnotation {
 
                Object(QueryAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.name = b.name;
                        this.parser = b.parser;
                        this.schema = b.schema;
@@ -225,6 +239,11 @@ public class QueryAnnotation {
                public String value() {
                        return value;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/RequestAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/RequestAnnotation.java
index 2e153f2d6a..25c498e430 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/RequestAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/RequestAnnotation.java
@@ -82,6 +82,7 @@ public class RequestAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderT<Builder> {
 
+               String[] description = {};
                Class<? extends HttpPartParser> parser = 
HttpPartParser.Void.class;
                Class<? extends HttpPartSerializer> serializer = 
HttpPartSerializer.Void.class;
 
@@ -101,6 +102,17 @@ public class RequestAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Request#parser} property on this annotation.
                 *
@@ -127,11 +139,13 @@ public class RequestAnnotation {
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements Request {
 
+               private final String[] description;
                private final Class<? extends HttpPartParser> parser;
                private final Class<? extends HttpPartSerializer> serializer;
 
                Object(RequestAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.parser = b.parser;
                        this.serializer = b.serializer;
                        postConstruct();
@@ -146,6 +160,11 @@ public class RequestAnnotation {
                public Class<? extends HttpPartSerializer> serializer() {
                        return serializer;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/ResponseAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/ResponseAnnotation.java
index ec75f78e4c..f3b9a3c51b 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/ResponseAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/ResponseAnnotation.java
@@ -83,6 +83,7 @@ public class ResponseAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTM<Builder> {
 
+               String[] description = {};
                Class<? extends HttpPartParser> parser = 
HttpPartParser.Void.class;
                Class<? extends HttpPartSerializer> serializer = 
HttpPartSerializer.Void.class;
                Header[] headers = {};
@@ -105,6 +106,17 @@ public class ResponseAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Response#examples} property on this 
annotation.
                 *
@@ -164,6 +176,7 @@ public class ResponseAnnotation {
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements Response {
 
+               private final String[] description;
                private final Class<? extends HttpPartParser> parser;
                private final Class<? extends HttpPartSerializer> serializer;
                private final Header[] headers;
@@ -172,6 +185,7 @@ public class ResponseAnnotation {
 
                Object(ResponseAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.examples = copyOf(b.examples);
                        this.headers = copyOf(b.headers);
                        this.parser = b.parser;
@@ -204,6 +218,11 @@ public class ResponseAnnotation {
                public Class<? extends HttpPartSerializer> serializer() {
                        return serializer;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/StatusCodeAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/StatusCodeAnnotation.java
index b55c53312a..d6da8d0950 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/StatusCodeAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/StatusCodeAnnotation.java
@@ -82,6 +82,7 @@ public class StatusCodeAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTM<Builder> {
 
+               String[] description = {};
                int value[] = {};
 
                /**
@@ -100,6 +101,17 @@ public class StatusCodeAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link StatusCode#value} property on this 
annotation.
                 *
@@ -115,10 +127,12 @@ public class StatusCodeAnnotation {
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements StatusCode {
 
+               private final String[] description;
                private final int[] value;
 
                Object(StatusCodeAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.value = Arrays.copyOf(b.value, b.value.length);
                        postConstruct();
                }
@@ -127,6 +141,11 @@ public class StatusCodeAnnotation {
                public int[] value() {
                        return value;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/TagAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/TagAnnotation.java
index 3a67c532f7..ff8b863c2b 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/TagAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/TagAnnotation.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.http.annotation;
 
+import static org.apache.juneau.common.utils.CollectionUtils.*;
+
 import java.lang.annotation.*;
 
 import org.apache.juneau.annotation.*;
@@ -35,6 +37,7 @@ public class TagAnnotation {
         */
        public static class Builder extends AnnotationObject.Builder<Builder> {
 
+               String[] description = {};
                ExternalDocs externalDocs = ExternalDocsAnnotation.DEFAULT;
                String name = "";
 
@@ -54,6 +57,17 @@ public class TagAnnotation {
                        return new Impl(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Tag#externalDocs} property on this 
annotation.
                 *
@@ -80,11 +94,13 @@ public class TagAnnotation {
 
        private static class Impl extends AnnotationObject implements Tag {
 
+               private final String[] description;
                private final ExternalDocs externalDocs;
                private final String name;
 
                Impl(TagAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.externalDocs = b.externalDocs;
                        this.name = b.name;
                        postConstruct();
@@ -99,6 +115,11 @@ public class TagAnnotation {
                public String name() {
                        return name;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java
index 4d01c3adce..36034d0a7b 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java
@@ -128,7 +128,7 @@ public class ResponseBeanMeta {
                        return null;
                var b = new Builder(annotations);
                b.apply(m.getReturnType().unwrap(Value.class, 
Optional.class).innerType());
-                       var ap = AP;
+               var ap = AP;
                rstream(ap.find(Response.class, m)).forEach(x -> 
b.apply(x.inner()));
                rstream(ap.find(StatusCode.class, m)).forEach(x -> 
b.apply(x.inner()));
                return b.build();
@@ -164,7 +164,7 @@ public class ResponseBeanMeta {
                        return null;
                var b = new Builder(annotations);
                b.apply(ci.innerType());
-                       var ai = AP;
+               var ai = AP;
                rstream(ai.find(Response.class, ci)).forEach(x -> 
b.apply(x.inner()));
                rstream(ai.find(StatusCode.class, ci)).forEach(x -> 
b.apply(x.inner()));
                return b.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/annotation/JsonAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/annotation/JsonAnnotation.java
index 817d4347be..eba65559d0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/annotation/JsonAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/annotation/JsonAnnotation.java
@@ -84,6 +84,7 @@ public class JsonAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMF<Builder> {
 
+               String[] description = {};
                String wrapperAttr = "";
 
                /**
@@ -102,6 +103,17 @@ public class JsonAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Json#wrapperAttr} property on this 
annotation.
                 *
@@ -117,10 +129,12 @@ public class JsonAnnotation {
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements Json {
 
+               private final String[] description;
                private final String wrapperAttr;
 
                Object(JsonAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.wrapperAttr = b.wrapperAttr;
                        postConstruct();
                }
@@ -129,6 +143,11 @@ public class JsonAnnotation {
                public String wrapperAttr() {
                        return wrapperAttr;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/annotation/MsgPackAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/annotation/MsgPackAnnotation.java
index c4aa1e28c2..7bddf02289 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/annotation/MsgPackAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/annotation/MsgPackAnnotation.java
@@ -84,6 +84,8 @@ public class MsgPackAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMF<Builder> {
 
+               String[] description = {};
+
                /**
                 * Constructor.
                 */
@@ -100,14 +102,32 @@ public class MsgPackAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
        }
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements MsgPack {
 
+               private final String[] description;
+
                Object(MsgPackAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        postConstruct();
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserSession.java
index dcb70d1ce6..ccb49cb70e 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserSession.java
@@ -221,12 +221,12 @@ public class OpenApiParserSession extends 
UonParserSession {
        @SuppressWarnings("unchecked")
        @Override /* Overridden from HttpPartParser */
        public <T> T parse(HttpPartType partType, HttpPartSchema schema, String 
in, ClassMeta<T> type) throws ParseException, SchemaValidationException {
-       if (partType == null)
-               partType = HttpPartType.OTHER;
+               if (partType == null)
+                       partType = HttpPartType.OTHER;
 
-       var isOptional = type.isOptional();
+               var isOptional = type.isOptional();
 
-       while (nn(type) && type.isOptional())
+               while (nn(type) && type.isOptional())
                        type = (ClassMeta<T>)type.getElementType();
 
                if (type == null)
@@ -254,25 +254,25 @@ public class OpenApiParserSession extends 
UonParserSession {
                        in = schema.getDefault();
                } else {
 
-               var swap = (ObjectSwap<T,Object>)type.getSwap(this);
-               var builder = (BuilderSwap<T,Object>)type.getBuilderSwap(this);
-               var sType = (ClassMeta<?>)null;
-               if (nn(builder))
+                       var swap = (ObjectSwap<T,Object>)type.getSwap(this);
+                       var builder = 
(BuilderSwap<T,Object>)type.getBuilderSwap(this);
+                       var sType = (ClassMeta<?>)null;
+                       if (nn(builder))
                                sType = builder.getBuilderClassMeta(this);
                        else if (nn(swap))
                                sType = swap.getSwapClassMeta(this);
                        else
                                sType = type;
 
-               if (sType.isOptional())
-                       return (T)opt(parseInner(partType, schema, in, 
sType.getElementType()));
+                       if (sType.isOptional())
+                               return (T)opt(parseInner(partType, schema, in, 
sType.getElementType()));
 
-               var t = schema.getType(sType);
-               if (partType == null)
-                       partType = HttpPartType.OTHER;
+                       var t = schema.getType(sType);
+                       if (partType == null)
+                               partType = HttpPartType.OTHER;
 
-               var f = schema.getFormat(sType);
-               if (f == HttpPartFormat.NO_FORMAT)
+                       var f = schema.getFormat(sType);
+                       if (f == HttpPartFormat.NO_FORMAT)
                                f = ctx.getFormat();
 
                        if (t == STRING) {
@@ -354,25 +354,25 @@ public class OpenApiParserSession extends 
UonParserSession {
                                        return super.parse(partType, schema, 
in, type);
                                return toType(super.parse(partType, schema, in, 
CM_Double), type);
 
-               } else if (t == ARRAY) {
+                       } else if (t == ARRAY) {
 
-                       var cf = schema.getCollectionFormat();
-                       if (cf == HttpPartCollectionFormat.NO_COLLECTION_FORMAT)
-                               cf = ctx.getCollectionFormat();
+                               var cf = schema.getCollectionFormat();
+                               if (cf == 
HttpPartCollectionFormat.NO_COLLECTION_FORMAT)
+                                       cf = ctx.getCollectionFormat();
 
-                       if (cf == HttpPartCollectionFormat.UONC)
-                               return super.parse(partType, schema, in, type);
+                               if (cf == HttpPartCollectionFormat.UONC)
+                                       return super.parse(partType, schema, 
in, type);
 
-                       if (type.isObject())
-                               type = (ClassMeta<T>)CM_JsonList;
+                               if (type.isObject())
+                                       type = (ClassMeta<T>)CM_JsonList;
 
-                       var eType = type.isObject() ? string() : 
type.getElementType();
-                       if (eType == null)
-                               eType = schema.getParsedType().getElementType();
-                       if (eType == null)
-                               eType = string();
+                               var eType = type.isObject() ? string() : 
type.getElementType();
+                               if (eType == null)
+                                       eType = 
schema.getParsedType().getElementType();
+                               if (eType == null)
+                                       eType = string();
 
-                       var ss = new String[]{};
+                               var ss = new String[] {};
 
                                if (cf == MULTI)
                                        ss = a(in);
@@ -392,32 +392,32 @@ public class OpenApiParserSession extends 
UonParserSession {
                                        ss = StringUtils.splita(in, ',');
                                }
 
-                       var items = schema.getItems();
-                       if (items == null)
-                               items = HttpPartSchema.DEFAULT;
-                       var o = Array.newInstance(eType.getInnerClass(), 
ss.length);
-                       for (var i = 0; i < ss.length; i++)
+                               var items = schema.getItems();
+                               if (items == null)
+                                       items = HttpPartSchema.DEFAULT;
+                               var o = 
Array.newInstance(eType.getInnerClass(), ss.length);
+                               for (var i = 0; i < ss.length; i++)
                                        Array.set(o, i, parse(partType, items, 
ss[i], eType));
                                if (type.hasMutaterFrom(schema.getParsedType()) 
|| schema.getParsedType().hasMutaterTo(type))
                                        return toType(toType(o, 
schema.getParsedType()), type);
                                return toType(o, type);
 
-               } else if (t == OBJECT) {
+                       } else if (t == OBJECT) {
 
-                       var cf = schema.getCollectionFormat();
-                       if (cf == HttpPartCollectionFormat.NO_COLLECTION_FORMAT)
-                               cf = ctx.getCollectionFormat();
+                               var cf = schema.getCollectionFormat();
+                               if (cf == 
HttpPartCollectionFormat.NO_COLLECTION_FORMAT)
+                                       cf = ctx.getCollectionFormat();
 
-                       if (cf == HttpPartCollectionFormat.UONC)
-                               return super.parse(partType, schema, in, type);
+                               if (cf == HttpPartCollectionFormat.UONC)
+                                       return super.parse(partType, schema, 
in, type);
 
-                       if (type.isObject())
-                               type = (ClassMeta<T>)CM_JsonMap;
+                               if (type.isObject())
+                                       type = (ClassMeta<T>)CM_JsonMap;
 
-                       if (! type.isMapOrBean())
-                               throw new ParseException("Invalid type {0} for 
part type OBJECT.", type);
+                               if (! type.isMapOrBean())
+                                       throw new ParseException("Invalid type 
{0} for part type OBJECT.", type);
 
-                       var ss = new String[]{};
+                               var ss = new String[] {};
 
                                if (cf == MULTI)
                                        ss = a(in);
@@ -437,9 +437,9 @@ public class OpenApiParserSession extends UonParserSession {
                                        ss = StringUtils.splita(in, ',');
                                }
 
-                       if (type.isBean()) {
-                               var m = 
ctx.getBeanContext().newBeanMap(type.getInnerClass());
-                               for (var s : ss) {
+                               if (type.isBean()) {
+                                       var m = 
ctx.getBeanContext().newBeanMap(type.getInnerClass());
+                                       for (var s : ss) {
                                                var kv = StringUtils.splita(s, 
'=', 2);
                                                if (kv.length != 2)
                                                        throw new 
ParseException("Invalid input {0} for part type OBJECT.", in);
@@ -453,13 +453,13 @@ public class OpenApiParserSession extends 
UonParserSession {
                                        return m.getBean();
                                }
 
-                       var eType = type.isObject() ? string() : 
type.getValueType();
-                       if (eType == null)
-                               eType = schema.getParsedType().getValueType();
-                       if (eType == null)
-                               eType = string();
+                               var eType = type.isObject() ? string() : 
type.getValueType();
+                               if (eType == null)
+                                       eType = 
schema.getParsedType().getValueType();
+                               if (eType == null)
+                                       eType = string();
 
-                       try {
+                               try {
                                        var m = 
(Map<String,Object>)type.newInstance();
                                        if (m == null)
                                                m = JsonMap.create();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/annotation/OpenApiAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/annotation/OpenApiAnnotation.java
index 711c6d3e05..6f65f90b88 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/annotation/OpenApiAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/annotation/OpenApiAnnotation.java
@@ -84,6 +84,8 @@ public class OpenApiAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMF<Builder> {
 
+               String[] description = {};
+
                /**
                 * Constructor.
                 */
@@ -100,14 +102,32 @@ public class OpenApiAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
        }
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements OpenApi {
 
+               private final String[] description;
+
                Object(OpenApiAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        postConstruct();
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/StringMatcherFactory.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/StringMatcherFactory.java
index 58cb833a50..ec11693c8e 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/StringMatcherFactory.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/StringMatcherFactory.java
@@ -69,8 +69,8 @@ public class StringMatcherFactory extends MatcherFactory {
                        var ands = new LinkedList<Pattern>();
                        var nots = new LinkedList<Pattern>();
 
-               for (var s : StringUtils.splitQuoted(pattern, true)) {
-                       char c0 = s.charAt(0), c9 = s.charAt(s.length() - 1);
+                       for (var s : StringUtils.splitQuoted(pattern, true)) {
+                               char c0 = s.charAt(0), c9 = s.charAt(s.length() 
- 1);
 
                                if (c0 == '/' && c9 == '/' && s.length() > 1) {
                                        ands.add(Pattern.compile(strip(s)));
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/annotation/PlainTextAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/annotation/PlainTextAnnotation.java
index 8beba836d3..c45716c21e 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/annotation/PlainTextAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/annotation/PlainTextAnnotation.java
@@ -81,6 +81,8 @@ public class PlainTextAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMF<Builder> {
 
+               String[] description = {};
+
                /**
                 * Constructor.
                 */
@@ -97,14 +99,32 @@ public class PlainTextAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
        }
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements PlainText {
 
+               private final String[] description;
+
                Object(PlainTextAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        postConstruct();
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/annotation/SoapXmlAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/annotation/SoapXmlAnnotation.java
index e3021e4151..af15b3f376 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/annotation/SoapXmlAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/annotation/SoapXmlAnnotation.java
@@ -81,6 +81,8 @@ public class SoapXmlAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMF<Builder> {
 
+               String[] description = {};
+
                /**
                 * Constructor.
                 */
@@ -97,14 +99,32 @@ public class SoapXmlAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
        }
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements SoapXml {
 
+               private final String[] description;
+
                Object(SoapXmlAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        postConstruct();
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/annotation/UonAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/annotation/UonAnnotation.java
index 97e6995048..101ef011fb 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/annotation/UonAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/annotation/UonAnnotation.java
@@ -84,6 +84,8 @@ public class UonAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMF<Builder> {
 
+               String[] description = {};
+
                /**
                 * Constructor.
                 */
@@ -100,14 +102,32 @@ public class UonAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
        }
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements Uon {
 
+               private final String[] description;
+
                Object(UonAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        postConstruct();
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/annotation/UrlEncodingAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/annotation/UrlEncodingAnnotation.java
index 8e711bab58..b7e07f1ec3 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/annotation/UrlEncodingAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/annotation/UrlEncodingAnnotation.java
@@ -84,6 +84,7 @@ public class UrlEncodingAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMF<Builder> {
 
+               String[] description = {};
                boolean expandedParams;
 
                /**
@@ -102,6 +103,17 @@ public class UrlEncodingAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link UrlEncoding#expandedParams} property on this 
annotation.
                 *
@@ -117,10 +129,12 @@ public class UrlEncodingAnnotation {
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements UrlEncoding {
 
+               private final String[] description;
                private final boolean expandedParams;
 
                Object(UrlEncodingAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.expandedParams = b.expandedParams;
                        postConstruct();
                }
@@ -129,6 +143,11 @@ public class UrlEncodingAnnotation {
                public boolean expandedParams() {
                        return expandedParams;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java
index 099951230c..3a151a9f12 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java
@@ -805,11 +805,11 @@ public class XmlParserSession extends ReaderParserSession 
{
                if (tcm == null && nn(elementName) && ! 
elementName.equals(currAttr))
                        tcm = getClassMeta(elementName, pMeta, eType);
                if (nn(tcm))
-               sType = eType = tcm;
+                       sType = eType = tcm;
 
-       var o = (Object)null;
+               var o = (Object)null;
 
-       if (jsonType == NULL) {
+               if (jsonType == NULL) {
                        r.nextTag();    // Discard end tag
                        return null;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/annotation/XmlAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/annotation/XmlAnnotation.java
index e9d4737193..f699a4aec9 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/annotation/XmlAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/annotation/XmlAnnotation.java
@@ -84,6 +84,7 @@ public class XmlAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderTMF<Builder> {
 
+               String[] description = {};
                String childName = "", namespace = "", prefix = "";
                XmlFormat format = XmlFormat.DEFAULT;
 
@@ -103,6 +104,17 @@ public class XmlAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Xml#childName} property on this annotation.
                 *
@@ -151,11 +163,13 @@ public class XmlAnnotation {
 
        private static class Object extends AppliedOnClassAnnotationObject 
implements Xml {
 
+               private final String[] description;
                private final String childName, namespace, prefix;
                private final XmlFormat format;
 
                Object(XmlAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.childName = b.childName;
                        this.format = b.format;
                        this.namespace = b.namespace;
@@ -182,6 +196,11 @@ public class XmlAnnotation {
                public String prefix() {
                        return prefix;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/OpSwaggerAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/OpSwaggerAnnotation.java
index 6f1174329f..f36f22b16c 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/OpSwaggerAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/OpSwaggerAnnotation.java
@@ -40,7 +40,10 @@ public class OpSwaggerAnnotation {
         */
        public static class Builder extends AnnotationObject.Builder<Builder> {
 
+               String[] description = {};
+
                ExternalDocs externalDocs = ExternalDocsAnnotation.DEFAULT;
+
                String deprecated = "", operationId = "";
                String[] consumes = {}, parameters = {}, produces = {}, 
responses = {}, schemes = {}, summary = {}, tags = {}, value = {};
 
@@ -60,6 +63,17 @@ public class OpSwaggerAnnotation {
                        return new Impl(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link OpSwagger#consumes()} property on this 
annotation.
                 *
@@ -185,12 +199,14 @@ public class OpSwaggerAnnotation {
 
        private static class Impl extends AnnotationObject implements OpSwagger 
{
 
+               private final String[] description;
                private final ExternalDocs externalDocs;
                private final String deprecated, operationId;
                private final String[] consumes, parameters, produces, 
responses, schemes, summary, tags, value;
 
                Impl(OpSwaggerAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.consumes = copyOf(b.consumes);
                        this.deprecated = b.deprecated;
                        this.externalDocs = b.externalDocs;
@@ -259,6 +275,11 @@ public class OpSwaggerAnnotation {
                public String[] value() {
                        return value;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
index 1ab2ddcbcc..6afbeb52b1 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
@@ -60,6 +60,7 @@ public class RestAnnotation {
        @SuppressWarnings("unchecked")
        public static class Builder extends 
AppliedAnnotationObject.BuilderT<Builder> {
 
+               String[] description = {};
                Class<? extends Encoder>[] encoders = new Class[0];
                Class<? extends HttpPartParser> partParser = 
HttpPartParser.Void.class;
                Class<? extends HttpPartSerializer> partSerializer = 
HttpPartSerializer.Void.class;
@@ -146,6 +147,17 @@ public class RestAnnotation {
                        return new Impl(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Rest#callLogger()} property on this 
annotation.
                 *
@@ -701,6 +713,7 @@ public class RestAnnotation {
 
        private static class Impl extends AppliedOnClassAnnotationObject 
implements Rest {
 
+               private final String[] description;
                private final Class<? extends Encoder>[] encoders;
                private final Class<? extends HttpPartParser> partParser;
                private final Class<? extends HttpPartSerializer> 
partSerializer;
@@ -728,6 +741,7 @@ public class RestAnnotation {
 
                Impl(RestAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.disableContentParam = b.disableContentParam;
                        this.allowedHeaderParams = b.allowedHeaderParams;
                        this.allowedMethodHeaders = b.allowedMethodHeaders;
@@ -1030,6 +1044,11 @@ public class RestAnnotation {
                public String uriResolution() {
                        return uriResolution;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDeleteAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDeleteAnnotation.java
index db44434579..3f4538a129 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDeleteAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDeleteAnnotation.java
@@ -50,6 +50,7 @@ public class RestDeleteAnnotation {
        @SuppressWarnings("unchecked")
        public static class Builder extends 
AppliedAnnotationObject.BuilderM<Builder> {
 
+               String[] description = {};
                Class<? extends RestGuard>[] guards = new Class[0];
                Class<? extends RestMatcher>[] matchers = new Class[0];
                Class<? extends Encoder>[] encoders = new Class[0];
@@ -73,6 +74,17 @@ public class RestDeleteAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link RestDelete#clientVersion()} property on this 
annotation.
                 *
@@ -305,6 +317,7 @@ public class RestDeleteAnnotation {
 
        private static class Object extends AppliedAnnotationObject implements 
RestDelete {
 
+               private final String[] description;
                private final Class<? extends RestGuard>[] guards;
                private final Class<? extends RestMatcher>[] matchers;
                private final Class<? extends Encoder>[] encoders;
@@ -314,6 +327,7 @@ public class RestDeleteAnnotation {
 
                Object(RestDeleteAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.clientVersion = b.clientVersion;
                        this.debug = b.debug;
                        this.defaultAccept = b.defaultAccept;
@@ -418,6 +432,11 @@ public class RestDeleteAnnotation {
                public String value() {
                        return value;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDestroyAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDestroyAnnotation.java
index 08d6e61890..4c3e56a4cd 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDestroyAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDestroyAnnotation.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.rest.annotation;
 
+import static org.apache.juneau.common.utils.CollectionUtils.*;
+
 import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
 
@@ -57,6 +59,8 @@ public class RestDestroyAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderM<Builder> {
 
+               String[] description = {};
+
                /**
                 * Constructor.
                 */
@@ -73,14 +77,33 @@ public class RestDestroyAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
        }
 
        private static class Object extends AppliedAnnotationObject implements 
RestDestroy {
 
+               private final String[] description;
+
                Object(RestDestroyAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        postConstruct();
                }
+
+               @Override /* Overridden from RestDestroy */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestEndCallAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestEndCallAnnotation.java
index 9ee9279774..4b35340c90 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestEndCallAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestEndCallAnnotation.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.rest.annotation;
 
+import static org.apache.juneau.common.utils.CollectionUtils.*;
+
 import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
 
@@ -57,6 +59,8 @@ public class RestEndCallAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderM<Builder> {
 
+               String[] description = {};
+
                /**
                 * Constructor.
                 */
@@ -73,14 +77,33 @@ public class RestEndCallAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
        }
 
        private static class Object extends AppliedAnnotationObject implements 
RestEndCall {
 
+               private final String[] description;
+
                Object(RestEndCallAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        postConstruct();
                }
+
+               @Override /* Overridden from RestEndCall */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGetAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGetAnnotation.java
index e3fdbe102c..3df2060e59 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGetAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGetAnnotation.java
@@ -52,6 +52,7 @@ public class RestGetAnnotation {
        @SuppressWarnings("unchecked")
        public static class Builder extends 
AppliedAnnotationObject.BuilderM<Builder> {
 
+               String[] description = {};
                Class<? extends RestConverter>[] converters = new Class[0];
                Class<? extends RestGuard>[] guards = new Class[0];
                Class<? extends RestMatcher>[] matchers = new Class[0];
@@ -77,6 +78,17 @@ public class RestGetAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link RestGet#clientVersion()} property on this 
annotation.
                 *
@@ -347,6 +359,7 @@ public class RestGetAnnotation {
 
        private static class Object extends AppliedAnnotationObject implements 
RestGet {
 
+               private final String[] description;
                private final Class<? extends RestConverter>[] converters;
                private final Class<? extends RestGuard>[] guards;
                private final Class<? extends RestMatcher>[] matchers;
@@ -358,6 +371,7 @@ public class RestGetAnnotation {
 
                Object(RestGetAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.clientVersion = b.clientVersion;
                        this.converters = copyOf(b.converters);
                        this.debug = b.debug;
@@ -480,6 +494,11 @@ public class RestGetAnnotation {
                public String value() {
                        return value;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestInitAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestInitAnnotation.java
index 3b59db4c1e..12d9038842 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestInitAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestInitAnnotation.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.rest.annotation;
 
+import static org.apache.juneau.common.utils.CollectionUtils.*;
+
 import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
 
@@ -57,6 +59,8 @@ public class RestInitAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderM<Builder> {
 
+               String[] description = {};
+
                /**
                 * Constructor.
                 */
@@ -73,14 +77,33 @@ public class RestInitAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
        }
 
        private static class Object extends AppliedAnnotationObject implements 
RestInit {
 
+               private final String[] description;
+
                Object(RestInitAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        postConstruct();
                }
+
+               @Override /* Overridden from RestInit */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestInjectAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestInjectAnnotation.java
index 85c8564d17..9b47420eca 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestInjectAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestInjectAnnotation.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.rest.annotation;
 
+import static org.apache.juneau.common.utils.CollectionUtils.*;
+
 import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
 
@@ -54,7 +56,9 @@ public class RestInjectAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderM<Builder> {
 
-               String name, value;
+               String[] description = {};
+
+                               String name, value;
                String[] methodScope;
 
                /**
@@ -73,6 +77,17 @@ public class RestInjectAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link RestInject#methodScope()} property on this 
annotation.
                 *
@@ -110,11 +125,13 @@ public class RestInjectAnnotation {
 
        private static class Object extends AppliedAnnotationObject implements 
RestInject {
 
+               private final String[] description;
                private final String name, value;
                private final String[] methodScope;
 
                Object(RestInjectAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.name = b.name;
                        this.value = b.value;
                        this.methodScope = b.methodScope;
@@ -135,6 +152,11 @@ public class RestInjectAnnotation {
                public String value() {
                        return value;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOpAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOpAnnotation.java
index 9ca72168bd..8fbba4a42a 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOpAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOpAnnotation.java
@@ -55,6 +55,7 @@ public class RestOpAnnotation {
        @SuppressWarnings("unchecked")
        public static class Builder extends 
AppliedAnnotationObject.BuilderM<Builder> {
 
+               String[] description = {};
                Class<? extends RestConverter>[] converters = new Class[0];
                Class<? extends RestGuard>[] guards = new Class[0];
                Class<? extends RestMatcher>[] matchers = new Class[0];
@@ -83,6 +84,17 @@ public class RestOpAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link RestOp#clientVersion()} property on this 
annotation.
                 *
@@ -434,6 +446,7 @@ public class RestOpAnnotation {
 
        private static class Object extends AppliedAnnotationObject implements 
RestOp {
 
+               private final String[] description;
                private final Class<? extends RestConverter>[] converters;
                private final Class<? extends RestGuard>[] guards;
                private final Class<? extends RestMatcher>[] matchers;
@@ -446,6 +459,7 @@ public class RestOpAnnotation {
 
                Object(RestOpAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.clientVersion = b.clientVersion;
                        this.consumes = copyOf(b.consumes);
                        this.converters = copyOf(b.converters);
@@ -604,6 +618,11 @@ public class RestOpAnnotation {
                public String value() {
                        return value;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOptionsAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOptionsAnnotation.java
index 1c890364cf..7ca8b71e47 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOptionsAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOptionsAnnotation.java
@@ -52,6 +52,7 @@ public class RestOptionsAnnotation {
        @SuppressWarnings("unchecked")
        public static class Builder extends 
AppliedAnnotationObject.BuilderM<Builder> {
 
+               String[] description = {};
                Class<? extends RestConverter>[] converters = new Class[0];
                Class<? extends RestGuard>[] guards = new Class[0];
                Class<? extends RestMatcher>[] matchers = new Class[0];
@@ -77,6 +78,17 @@ public class RestOptionsAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link RestOptions#clientVersion()} property on 
this annotation.
                 *
@@ -347,6 +359,7 @@ public class RestOptionsAnnotation {
 
        private static class Object extends AppliedAnnotationObject implements 
RestOptions {
 
+               private final String[] description;
                private final Class<? extends RestConverter>[] converters;
                private final Class<? extends RestGuard>[] guards;
                private final Class<? extends RestMatcher>[] matchers;
@@ -358,6 +371,7 @@ public class RestOptionsAnnotation {
 
                Object(RestOptionsAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.clientVersion = b.clientVersion;
                        this.converters = copyOf(b.converters);
                        this.debug = b.debug;
@@ -480,6 +494,11 @@ public class RestOptionsAnnotation {
                public String value() {
                        return value;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPatchAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPatchAnnotation.java
index 83cdc30016..3ee3eb89e6 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPatchAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPatchAnnotation.java
@@ -79,6 +79,17 @@ public class RestPatchAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link RestPatch#clientVersion()} property on this 
annotation.
                 *
@@ -409,6 +420,7 @@ public class RestPatchAnnotation {
 
        private static class Object extends AppliedAnnotationObject implements 
RestPatch {
 
+               private final String[] description;
                private final Class<? extends RestConverter>[] converters;
                private final Class<? extends RestGuard>[] guards;
                private final Class<? extends RestMatcher>[] matchers;
@@ -421,6 +433,7 @@ public class RestPatchAnnotation {
 
                Object(RestPatchAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.clientVersion = b.clientVersion;
                        this.consumes = copyOf(b.consumes);
                        this.converters = copyOf(b.converters);
@@ -573,6 +586,11 @@ public class RestPatchAnnotation {
                public String value() {
                        return value;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostAnnotation.java
index f68391de8d..da6276aa1f 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostAnnotation.java
@@ -52,6 +52,7 @@ public class RestPostAnnotation {
        @SuppressWarnings("unchecked")
        public static class Builder extends 
AppliedAnnotationObject.BuilderM<Builder> {
 
+               String[] description = {};
                Class<? extends RestConverter>[] converters = new Class[0];
                Class<? extends RestGuard>[] guards = new Class[0];
                Class<? extends RestMatcher>[] matchers = new Class[0];
@@ -79,6 +80,17 @@ public class RestPostAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link RestPost#clientVersion()} property on this 
annotation.
                 *
@@ -409,6 +421,7 @@ public class RestPostAnnotation {
 
        private static class Object extends AppliedAnnotationObject implements 
RestPost {
 
+               private final String[] description;
                private final Class<? extends RestConverter>[] converters;
                private final Class<? extends RestGuard>[] guards;
                private final Class<? extends RestMatcher>[] matchers;
@@ -421,6 +434,7 @@ public class RestPostAnnotation {
 
                Object(RestPostAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.clientVersion = b.clientVersion;
                        this.consumes = copyOf(b.consumes);
                        this.converters = copyOf(b.converters);
@@ -573,6 +587,11 @@ public class RestPostAnnotation {
                public String value() {
                        return value;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostCallAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostCallAnnotation.java
index cf8b6f3b3e..c8da64091e 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostCallAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostCallAnnotation.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.rest.annotation;
 
+import static org.apache.juneau.common.utils.CollectionUtils.*;
+
 import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
 
@@ -57,6 +59,8 @@ public class RestPostCallAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderM<Builder> {
 
+               String[] description = {};
+
                /**
                 * Constructor.
                 */
@@ -73,14 +77,33 @@ public class RestPostCallAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
        }
 
        private static class Object extends AppliedAnnotationObject implements 
RestPostCall {
 
+               private final String[] description;
+
                Object(RestPostCallAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        postConstruct();
                }
+
+               @Override /* Overridden from RestPostCall */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostInitAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostInitAnnotation.java
index ce4f6fd597..1ed477ef4e 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostInitAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostInitAnnotation.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.rest.annotation;
 
+import static org.apache.juneau.common.utils.CollectionUtils.*;
+
 import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
 
@@ -57,6 +59,7 @@ public class RestPostInitAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderM<Builder> {
 
+               String[] description = {};
                boolean childFirst;
 
                /**
@@ -75,6 +78,17 @@ public class RestPostInitAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link RestPostInit#childFirst()} property on this 
annotation.
                 *
@@ -89,10 +103,12 @@ public class RestPostInitAnnotation {
 
        private static class Object extends AppliedAnnotationObject implements 
RestPostInit {
 
+               private final String[] description;
                private final boolean childFirst;
 
                Object(RestPostInitAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.childFirst = b.childFirst;
                        postConstruct();
                }
@@ -101,6 +117,11 @@ public class RestPostInitAnnotation {
                public boolean childFirst() {
                        return childFirst;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPreCallAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPreCallAnnotation.java
index 6d02a44bcd..22bcf6b322 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPreCallAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPreCallAnnotation.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.rest.annotation;
 
+import static org.apache.juneau.common.utils.CollectionUtils.*;
+
 import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
 
@@ -57,6 +59,8 @@ public class RestPreCallAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderM<Builder> {
 
+               String[] description = {};
+
                /**
                 * Constructor.
                 */
@@ -73,14 +77,33 @@ public class RestPreCallAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
        }
 
        private static class Object extends AppliedAnnotationObject implements 
RestPreCall {
 
+               private final String[] description;
+
                Object(RestPreCallAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        postConstruct();
                }
+
+               @Override /* Overridden from RestPreCall */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPutAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPutAnnotation.java
index a0668cc3f9..e24a5d9733 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPutAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPutAnnotation.java
@@ -52,6 +52,7 @@ public class RestPutAnnotation {
        @SuppressWarnings("unchecked")
        public static class Builder extends 
AppliedAnnotationObject.BuilderM<Builder> {
 
+               String[] description = {};
                Class<? extends RestConverter>[] converters = new Class[0];
                Class<? extends RestGuard>[] guards = new Class[0];
                Class<? extends RestMatcher>[] matchers = new Class[0];
@@ -79,6 +80,17 @@ public class RestPutAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link RestPut#clientVersion()} property on this 
annotation.
                 *
@@ -409,6 +421,7 @@ public class RestPutAnnotation {
 
        private static class Object extends AppliedAnnotationObject implements 
RestPut {
 
+               private final String[] description;
                private final Class<? extends RestConverter>[] converters;
                private final Class<? extends RestGuard>[] guards;
                private final Class<? extends RestMatcher>[] matchers;
@@ -421,6 +434,7 @@ public class RestPutAnnotation {
 
                Object(RestPutAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.clientVersion = b.clientVersion;
                        this.consumes = copyOf(b.consumes);
                        this.converters = copyOf(b.converters);
@@ -573,6 +587,11 @@ public class RestPutAnnotation {
                public String value() {
                        return value;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestStartCallAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestStartCallAnnotation.java
index 7b994478a5..10d575ca56 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestStartCallAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestStartCallAnnotation.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.rest.annotation;
 
+import static org.apache.juneau.common.utils.CollectionUtils.*;
+
 import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
 
@@ -57,6 +59,8 @@ public class RestStartCallAnnotation {
         */
        public static class Builder extends 
AppliedAnnotationObject.BuilderM<Builder> {
 
+               String[] description = {};
+
                /**
                 * Constructor.
                 */
@@ -73,14 +77,33 @@ public class RestStartCallAnnotation {
                        return new Object(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
        }
 
        private static class Object extends AppliedAnnotationObject implements 
RestStartCall {
 
+               private final String[] description;
+
                Object(RestStartCallAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        postConstruct();
                }
+
+               @Override /* Overridden from RestStartCall */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/SwaggerAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/SwaggerAnnotation.java
index 6fbbc6a082..17749c8579 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/SwaggerAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/SwaggerAnnotation.java
@@ -41,6 +41,7 @@ public class SwaggerAnnotation {
         */
        public static class Builder extends AnnotationObject.Builder<Builder> {
 
+               String[] description = {};
                Contact contact = ContactAnnotation.DEFAULT;
                ExternalDocs externalDocs = ExternalDocsAnnotation.DEFAULT;
                License license = LicenseAnnotation.DEFAULT;
@@ -64,6 +65,17 @@ public class SwaggerAnnotation {
                        return new Impl(this);
                }
 
+               /**
+                * Sets the description property on this annotation.
+                *
+                * @param value The new value for this property.
+                * @return This object.
+                */
+               public Builder description(String...value) {
+                       this.description = value;
+                       return this;
+               }
+
                /**
                 * Sets the {@link Swagger#contact()} property on this 
annotation.
                 *
@@ -156,6 +168,7 @@ public class SwaggerAnnotation {
 
        private static class Impl extends AnnotationObject implements Swagger {
 
+               private final String[] description;
                private final Contact contact;
                private final ExternalDocs externalDocs;
                private final License license;
@@ -165,6 +178,7 @@ public class SwaggerAnnotation {
 
                Impl(SwaggerAnnotation.Builder b) {
                        super(b);
+                       this.description = copyOf(b.description);
                        this.contact = b.contact;
                        this.externalDocs = b.externalDocs;
                        this.license = b.license;
@@ -215,6 +229,11 @@ public class SwaggerAnnotation {
                public String version() {
                        return version;
                }
+
+               @Override /* Overridden from annotation */
+               public String[] description() {
+                       return description;
+               }
        }
 
        /** Default value */

Reply via email to