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 dea38a3  Context API refactoring.
dea38a3 is described below

commit dea38a30e4edc62345c9788a550b0308e1d8d790
Author: JamesBognar <[email protected]>
AuthorDate: Fri Sep 3 12:01:24 2021 -0400

    Context API refactoring.
---
 .../java/org/apache/juneau/rest/RestContext.java   | 170 ++-------------------
 .../org/apache/juneau/rest/RestContextBuilder.java | 148 +++++++++---------
 .../org/apache/juneau/rest/annotation/Rest.java    |   4 +-
 .../juneau/rest/annotation/RestAnnotation.java     |   8 +-
 .../apache/juneau/rest/annotation/RestDelete.java  |   4 +-
 .../rest/annotation/RestDeleteAnnotation.java      |   2 +-
 .../org/apache/juneau/rest/annotation/RestGet.java |   4 +-
 .../juneau/rest/annotation/RestGetAnnotation.java  |   2 +-
 .../org/apache/juneau/rest/annotation/RestOp.java  |   4 +-
 .../juneau/rest/annotation/RestOpAnnotation.java   |   4 +-
 .../apache/juneau/rest/annotation/RestPost.java    |   4 +-
 .../juneau/rest/annotation/RestPostAnnotation.java |   4 +-
 .../org/apache/juneau/rest/annotation/RestPut.java |   4 +-
 .../juneau/rest/annotation/RestPutAnnotation.java  |   4 +-
 14 files changed, 113 insertions(+), 253 deletions(-)

diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index f981ab6..6a2ebf7 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -149,146 +149,6 @@ public class RestContext extends BeanContext {
        public static final String REST_beanStore = PREFIX + ".beanStore.o";
 
        /**
-        * Configuration property:  Default request headers.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.rest.RestContext#REST_defaultRequestHeaders 
REST_defaultRequestHeaders}
-        *      <li><b>Name:</b>  
<js>"RestContext.defaultRequestHeaders.lo"</js>
-        *      <li><b>Data type:</b>  <c>{@link org.apache.http.Header}[]</c>
-        *      <li><b>System property:</b>  
<c>RestContext.defaultRequestHeaders</c>
-        *      <li><b>Environment variable:</b>  
<c>RESTCONTEXT_DEFAULTREQUESTHEADERS</c>
-        *      <li><b>Default:</b>  empty list
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.rest.annotation.Rest#defaultRequestHeaders()}
-        *                      <li class='ja'>{@link 
org.apache.juneau.rest.annotation.RestOp#defaultRequestHeaders()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.RestContextBuilder#defaultRequestHeader(String,String)}
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.RestContextBuilder#defaultRequestHeader(String,Supplier)}
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.RestContextBuilder#defaultRequestHeaders(org.apache.http.Header...)}
-        *              </ul>
-        * </ul>
-        *
-        * <h5 class='section'>Description:</h5>
-        * <p>
-        * Specifies default values for request headers if they're not passed 
in through the request.
-        *
-        * <ul class='notes'>
-        *      <li>
-        *              Affects values returned by {@link 
RestRequest#getHeader(String)} when the header is not present on the request.
-        *      <li>
-        *              The most useful reason for this annotation is to 
provide a default <c>Accept</c> header when one is not
-        *              specified so that a particular default {@link 
Serializer} is picked.
-        * </ul>
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      <jc>// Option #1 - Defined via annotation resolving to a config 
file setting with default value.</jc>
-        *      <ja>@Rest</ja>(defaultRequestHeaders={<js>"Accept: 
application/json"</js>, <js>"My-Header=$C{REST/myHeaderValue}"</js>})
-        *      <jk>public class</jk> MyResource {
-        *
-        *              <jc>// Option #2 - Defined via builder passed in 
through resource constructor.</jc>
-        *              <jk>public</jk> MyResource(RestContextBuilder 
<jv>builder</jv>) <jk>throws</jk> Exception {
-        *
-        *                      <jc>// Using method on builder.</jc>
-        *                      <jv>builder</jv>
-        *                              .defaultRequestHeaders(
-        *                                      
Accept.<jsm>of</jsm>(<js>"application/json"</js>),
-        *                                      
BasicHeader.<jsm>of</jsm>(<js>"My-Header"</js>, <js>"foo"</js>)
-        *                              );
-        *
-        *                      <jc>// Same, but using property.</jc>
-        *                      
<jv>builder</jv>.appendTo(<jsf>REST_defaultRequestHeaders</jsf>, 
Accept.<jsm>of</jsm>(<js>"application/json"</js>));
-        *              }
-        *
-        *              <jc>// Option #3 - Defined via builder passed in 
through init method.</jc>
-        *              <ja>@RestHook</ja>(<jsf>INIT</jsf>)
-        *              <jk>public void</jk> init(RestContextBuilder 
<jv>builder</jv>) <jk>throws</jk> Exception {
-        *                      
<jv>builder</jv>.defaultRequestHeaders(Accept.<jsm>of</jsm>(<js>"application/json"</js>));
-        *              }
-        *
-        *              <jc>// Override at the method level.</jc>
-        *              <ja>@RestGet</ja>(defaultRequestHeaders={<js>"Accept: 
text/xml"</js>})
-        *              <jk>public</jk> Object myMethod() {...}
-        *      }
-        * </p>
-        */
-       public static final String REST_defaultRequestHeaders = PREFIX + 
".defaultRequestHeaders.lo";
-
-       /**
-        * Configuration property:  Default response headers.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.rest.RestContext#REST_defaultResponseHeaders 
REST_defaultResponseHeaders}
-        *      <li><b>Name:</b>  
<js>"RestContext.defaultResponseHeaders.lo"</js>
-        *      <li><b>Data type:</b>  <c>{@link org.apache.http.Header}[]</c>
-        *      <li><b>System property:</b>  
<c>RestContext.defaultResponseHeaders</c>
-        *      <li><b>Environment variable:</b>  
<c>RESTCONTEXT_DEFAULTRESPONSEHEADERS</c>
-        *      <li><b>Default:</b>  empty list
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.rest.annotation.Rest#defaultResponseHeaders()}
-        *                      <li class='ja'>{@link 
org.apache.juneau.rest.annotation.RestOp#defaultResponseHeaders()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.RestContextBuilder#defaultResponseHeader(String,String)}
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.RestContextBuilder#defaultResponseHeader(String,Supplier)}
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.RestContextBuilder#defaultResponseHeaders(org.apache.http.Header...)}
-        *              </ul>
-        * </ul>
-        *
-        * <h5 class='section'>Description:</h5>
-        * <p>
-        * Specifies default values for response headers if they're not set 
after the Java REST method is called.
-        *
-        * <ul class='notes'>
-        *      <li>
-        *              This is equivalent to calling {@link 
RestResponse#setHeader(String, String)} programmatically in each of
-        *              the Java methods.
-        *      <li>
-        *              The header value will not be set if the header value 
has already been specified (hence the 'default' in the name).
-        * </ul>
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      <jc>// Option #1 - Defined via annotation resolving to a config 
file setting with default value.</jc>
-        *      <ja>@Rest</ja>(defaultResponseHeaders={<js>"Content-Type: 
$C{REST/defaultContentType,text/plain}"</js>,<js>"My-Header: 
$C{REST/myHeaderValue}"</js>})
-        *      <jk>public class</jk> MyResource {
-        *
-        *              <jc>// Option #2 - Defined via builder passed in 
through resource constructor.</jc>
-        *              <jk>public</jk> MyResource(RestContextBuilder 
<jv>builder</jv>) <jk>throws</jk> Exception {
-        *
-        *                      <jc>// Using method on builder.</jc>
-        *                      <jv>builder</jv>
-        *                              .defaultResponseHeaders(
-        *                                      
ContentType.<jsm>of</jsm>(<js>"text/plain"</js>),
-        *                                      
BasicHeader.<jsm>ofPair</jsm>(<js>"My-Header: foo"</js>)
-        *                              );
-        *
-        *                      <jc>// Same, but using property.</jc>
-        *                      <jv>builder</jv>
-        *                              .appendTo(<jsf>REST_resHeaders</jsf>, 
ContentType.<jsm>of</jsm>(<js>"text/plain"</js>))
-        *                              .appendTo(<jsf>REST_resHeaders</jsf>, 
BasicHeader.<jsm>of</jsm>(<js>"My-Header"</js>, <js>"foo"</js>));
-        *              }
-        *
-        *              <jc>// Option #3 - Defined via builder passed in 
through init method.</jc>
-        *              <ja>@RestHook</ja>(<jsf>INIT</jsf>)
-        *              <jk>public void</jk> init(RestContextBuilder 
<jv>builder</jv>) <jk>throws</jk> Exception {
-        *                      
<jv>builder</jv>.defaultResponseHeaders(ContentType.<jsm>of</jsm>(<js>"text/plain"</js>));
-        *              }
-        *      }
-        * </p>
-        */
-       public static final String REST_defaultResponseHeaders = PREFIX + 
".defaultResponseHeaders.lo";
-
-       /**
         * Configuration property:  Compression encoders.
         *
         * <h5 class='section'>Property:</h5>
@@ -1332,8 +1192,8 @@ public class RestContext extends BeanContext {
                        staticFiles = createStaticFiles(r, cp, bf);
                        bf.addBean(StaticFiles.class, staticFiles);
 
-                       defaultRequestHeaders = createDefaultRequestHeaders(r, 
cp, bf).build();
-                       defaultResponseHeaders = 
createDefaultResponseHeaders(r, cp, bf).build();
+                       defaultRequestHeaders = createDefaultRequestHeaders(r, 
builder, bf).build();
+                       defaultResponseHeaders = 
createDefaultResponseHeaders(r, builder, bf).build();
                        defaultRequestAttributes = 
createDefaultRequestAttributes(r, builder, bf);
 
                        opArgs = createOpArgs(r, builder, bf).asArray();
@@ -2723,20 +2583,17 @@ public class RestContext extends BeanContext {
         *
         * @param resource
         *      The REST servlet or bean that this context defines.
-        * @param properties
-        *      The properties of this bean.
-        *      <br>Consists of all properties gathered through the builder and 
annotations on this class and all parent classes.
+        * @param builder
+        *      The builder for this object.
         * @param beanStore
         *      The factory used for creating beans and retrieving injected 
beans.
         *      <br>Created by {@link 
#createBeanStore(Object,ContextProperties,RestContext)}.
         * @return The default request headers for this REST object.
         * @throws Exception If stack trace store could not be instantiated.
         */
-       protected HeaderListBuilder createDefaultRequestHeaders(Object 
resource, ContextProperties properties, BeanStore beanStore) throws Exception {
-
-               HeaderListBuilder x = HeaderList.create();
+       protected HeaderListBuilder createDefaultRequestHeaders(Object 
resource, RestContextBuilder builder, BeanStore beanStore) throws Exception {
 
-               x.set(properties.getInstanceArray(REST_defaultRequestHeaders, 
org.apache.http.Header.class, beanStore).orElse(new org.apache.http.Header[0]));
+               HeaderListBuilder x = builder.defaultRequestHeaders;
 
                x = BeanStore
                        .of(beanStore, resource)
@@ -2754,20 +2611,17 @@ public class RestContext extends BeanContext {
         *
         * @param resource
         *      The REST servlet or bean that this context defines.
-        * @param properties
-        *      The properties of this bean.
-        *      <br>Consists of all properties gathered through the builder and 
annotations on this class and all parent classes.
+        * @param builder
+        *      The builder for this object.
         * @param beanStore
         *      The factory used for creating beans and retrieving injected 
beans.
         *      <br>Created by {@link 
#createBeanStore(Object,ContextProperties,RestContext)}.
         * @return The default response headers for this REST object.
         * @throws Exception If stack trace store could not be instantiated.
         */
-       protected HeaderListBuilder createDefaultResponseHeaders(Object 
resource, ContextProperties properties, BeanStore beanStore) throws Exception {
-
-               HeaderListBuilder x = HeaderList.create();
+       protected HeaderListBuilder createDefaultResponseHeaders(Object 
resource, RestContextBuilder builder, BeanStore beanStore) throws Exception {
 
-               x.set(properties.getInstanceArray(REST_defaultResponseHeaders, 
org.apache.http.Header.class, beanStore).orElse(new org.apache.http.Header[0]));
+               HeaderListBuilder x = builder.defaultResponseHeaders;
 
                x = BeanStore
                        .of(beanStore, resource)
@@ -3881,7 +3735,7 @@ public class RestContext extends BeanContext {
         * Returns the default request headers for this resource.
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
+        *      <li class='jm'>{@link 
RestContextBuilder#defaultRequestHeaders(org.apache.http.Header...)}
         * </ul>
         *
         * @return
@@ -3911,7 +3765,7 @@ public class RestContext extends BeanContext {
         * Returns the default response headers for this resource.
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
+        *      <li class='jm'>{@link 
RestContextBuilder#defaultResponseHeaders(org.apache.http.Header...)}
         * </ul>
         *
         * @return
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
index b930672..a72e2f7 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
@@ -138,6 +138,8 @@ public class RestContextBuilder extends BeanContextBuilder 
implements ServletCon
        BeanRef<RestLogger> callLogger = BeanRef.of(RestLogger.class);
        BeanRef<DebugEnablement> debugEnablement = 
BeanRef.of(DebugEnablement.class);
        NamedAttributeList defaultRequestAttributes = 
NamedAttributeList.create();
+       HeaderListBuilder defaultRequestHeaders = HeaderList.create();
+       HeaderListBuilder defaultResponseHeaders = HeaderList.create();
 
        Enablement debugDefault, debug;
 
@@ -1313,51 +1315,55 @@ public class RestContextBuilder extends 
BeanContextBuilder implements ServletCon
        }
 
        /**
-        * <i><l>RestContext</l> configuration property:&emsp;</i>  Default 
request headers.
+        * Default request headers.
         *
         * <p>
-        * Adds a single default request header.
+        * Specifies default values for request headers if they're not passed 
in through the request.
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
+        * <ul class='notes'>
+        *      <li>
+        *              Affects values returned by {@link 
RestRequest#getHeader(String)} when the header is not present on the request.
+        *      <li>
+        *              The most useful reason for this annotation is to 
provide a default <c>Accept</c> header when one is not
+        *              specified so that a particular default {@link 
Serializer} is picked.
         * </ul>
         *
-        * @param name The HTTP header name.
-        * @param value The HTTP header value.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestContextBuilder defaultRequestHeader(String name, String 
value) {
-               return defaultRequestHeaders(stringHeader(name, value));
-       }
-
-       /**
-        * <i><l>RestContext</l> configuration property:&emsp;</i>  Default 
request headers.
+        * <h5 class='section'>Example:</h5>
+        * <p class='bcode w800'>
+        *      <jc>// Option #1 - Defined via annotation resolving to a config 
file setting with default value.</jc>
+        *      <ja>@Rest</ja>(defaultRequestHeaders={<js>"Accept: 
application/json"</js>, <js>"My-Header=$C{REST/myHeaderValue}"</js>})
+        *      <jk>public class</jk> MyResource {
         *
-        * <p>
-        * Adds a single default request header.
+        *              <jc>// Option #2 - Defined via builder passed in 
through resource constructor.</jc>
+        *              <jk>public</jk> MyResource(RestContextBuilder 
<jv>builder</jv>) <jk>throws</jk> Exception {
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
-        * </ul>
+        *                      <jc>// Using method on builder.</jc>
+        *                      <jv>builder</jv>
+        *                              .defaultRequestHeaders(
+        *                                      
Accept.<jsm>of</jsm>(<js>"application/json"</js>),
+        *                                      
BasicHeader.<jsm>of</jsm>(<js>"My-Header"</js>, <js>"foo"</js>)
+        *                              );
+        *              }
         *
-        * @param name The HTTP header name.
-        * @param value The HTTP header value supplier.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestContextBuilder defaultRequestHeader(String name, 
Supplier<String> value) {
-               return defaultRequestHeaders(stringHeader(name, value));
-       }
-
-       /**
-        * <i><l>RestContext</l> configuration property:&emsp;</i>  Default 
request headers.
+        *              <jc>// Option #3 - Defined via builder passed in 
through init method.</jc>
+        *              <ja>@RestHook</ja>(<jsf>INIT</jsf>)
+        *              <jk>public void</jk> init(RestContextBuilder 
<jv>builder</jv>) <jk>throws</jk> Exception {
+        *                      
<jv>builder</jv>.defaultRequestHeaders(Accept.<jsm>of</jsm>(<js>"application/json"</js>));
+        *              }
         *
-        * <p>
-        * Specifies default values for request headers if they're not passed 
in through the request.
+        *              <jc>// Override at the method level.</jc>
+        *              <ja>@RestGet</ja>(defaultRequestHeaders={<js>"Accept: 
text/xml"</js>})
+        *              <jk>public</jk> Object myMethod() {...}
+        *      }
+        * </p>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
+        *      <li class='ja'>{@link Rest#defaultRequestHeaders}
+        *      <li class='ja'>{@link RestOp#defaultRequestHeaders}
+        *      <li class='ja'>{@link RestGet#defaultRequestHeaders}
+        *      <li class='ja'>{@link RestPut#defaultRequestHeaders}
+        *      <li class='ja'>{@link RestPost#defaultRequestHeaders}
+        *      <li class='ja'>{@link RestDelete#defaultRequestHeaders}
         * </ul>
         *
         * @param values The headers to add.
@@ -1365,56 +1371,56 @@ public class RestContextBuilder extends 
BeanContextBuilder implements ServletCon
         */
        @FluentSetter
        public RestContextBuilder defaultRequestHeaders(Header...values) {
-               asList(values).stream().forEach(x -> 
appendTo(REST_defaultRequestHeaders, x));
+               defaultRequestHeaders.setDefault(values);
                return this;
        }
 
        /**
-        * <i><l>RestContext</l> configuration property:&emsp;</i>  Default 
response headers.
+        * Default response headers.
         *
         * <p>
-        * Adds a single default response header.
+        * Specifies default values for response headers if they're not set 
after the Java REST method is called.
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
+        * <ul class='notes'>
+        *      <li>
+        *              This is equivalent to calling {@link 
RestResponse#setHeader(String, String)} programmatically in each of
+        *              the Java methods.
+        *      <li>
+        *              The header value will not be set if the header value 
has already been specified (hence the 'default' in the name).
         * </ul>
         *
-        * @param name The response header name.
-        * @param value The response header value.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestContextBuilder defaultResponseHeader(String name, String 
value) {
-               return defaultResponseHeaders(stringHeader(name, value));
-       }
-
-       /**
-        * <i><l>RestContext</l> configuration property:&emsp;</i>  Default 
response headers.
-        *
-        * <p>
-        * Adds a single default response header.
+        * <h5 class='section'>Example:</h5>
+        * <p class='bcode w800'>
+        *      <jc>// Option #1 - Defined via annotation resolving to a config 
file setting with default value.</jc>
+        *      <ja>@Rest</ja>(defaultResponseHeaders={<js>"Content-Type: 
$C{REST/defaultContentType,text/plain}"</js>,<js>"My-Header: 
$C{REST/myHeaderValue}"</js>})
+        *      <jk>public class</jk> MyResource {
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
-        * </ul>
+        *              <jc>// Option #2 - Defined via builder passed in 
through resource constructor.</jc>
+        *              <jk>public</jk> MyResource(RestContextBuilder 
<jv>builder</jv>) <jk>throws</jk> Exception {
         *
-        * @param name The response header name.
-        * @param value The response header value supplier.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestContextBuilder defaultResponseHeader(String name, 
Supplier<String> value) {
-               return defaultResponseHeaders(stringHeader(name, value));
-       }
-
-       /**
-        * <i><l>RestContext</l> configuration property:&emsp;</i>  Default 
response headers.
+        *                      <jc>// Using method on builder.</jc>
+        *                      <jv>builder</jv>
+        *                              .defaultResponseHeaders(
+        *                                      
ContentType.<jsm>of</jsm>(<js>"text/plain"</js>),
+        *                                      
BasicHeader.<jsm>ofPair</jsm>(<js>"My-Header: foo"</js>)
+        *                              );
+        *              }
         *
-        * <p>
-        * Specifies default values for response headers if they're not set 
after the Java REST method is called.
+        *              <jc>// Option #3 - Defined via builder passed in 
through init method.</jc>
+        *              <ja>@RestHook</ja>(<jsf>INIT</jsf>)
+        *              <jk>public void</jk> init(RestContextBuilder 
<jv>builder</jv>) <jk>throws</jk> Exception {
+        *                      
<jv>builder</jv>.defaultResponseHeaders(ContentType.<jsm>of</jsm>(<js>"text/plain"</js>));
+        *              }
+        *      }
+        * </p>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
+        *      <li class='ja'>{@link Rest#defaultResponseHeaders}
+        *      <li class='ja'>{@link RestOp#defaultResponseHeaders}
+        *      <li class='ja'>{@link RestGet#defaultResponseHeaders}
+        *      <li class='ja'>{@link RestPut#defaultResponseHeaders}
+        *      <li class='ja'>{@link RestPost#defaultResponseHeaders}
+        *      <li class='ja'>{@link RestDelete#defaultResponseHeaders}
         * </ul>
         *
         * @param values The headers to add.
@@ -1422,7 +1428,7 @@ public class RestContextBuilder extends 
BeanContextBuilder implements ServletCon
         */
        @FluentSetter
        public RestContextBuilder defaultResponseHeaders(Header...values) {
-               asList(values).stream().forEach(x -> 
appendTo(REST_defaultResponseHeaders, x));
+               defaultResponseHeaders.setDefault(values);
                return this;
        }
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
index ae9819f..46c86a9 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
@@ -574,7 +574,7 @@ public @interface Rest {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
+        *      <li class='jm'>{@link 
RestContextBuilder#defaultRequestHeaders(org.apache.http.Header...)}
         * </ul>
         */
        String[] defaultRequestHeaders() default {};
@@ -592,7 +592,7 @@ public @interface Rest {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
+        *      <li class='jm'>{@link 
RestContextBuilder#defaultResponseHeaders(org.apache.http.Header...)}
         * </ul>
         */
        String[] defaultResponseHeaders() default {};
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 d50e2af..b7b98ac 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
@@ -1046,10 +1046,10 @@ public class RestAnnotation {
                        stringStream(a.produces()).map(MediaType::of).forEach(x 
-> b.produces(x));
                        stringStream(a.consumes()).map(MediaType::of).forEach(x 
-> b.consumes(x));
                        stringStream(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
-                       stringStream(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.appendTo(REST_defaultRequestHeaders, x));
-                       stringStream(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.appendTo(REST_defaultResponseHeaders, x));
-                       b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
accept(string(a.defaultAccept())));
-                       b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
contentType(string(a.defaultContentType())));
+                       stringStream(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultRequestHeaders(x));
+                       stringStream(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultResponseHeaders(x));
+                       value(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders(x));
+                       value(a.defaultContentType()).map(x -> 
contentType(x)).ifPresent(x -> b.defaultRequestHeaders(x));
                        b.responseProcessors(a.responseProcessors());
                        b.children((Object[])a.children());
                        b.restOpArgs(a.restOpArgs());
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDelete.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDelete.java
index 1f230c1..d5e0f93 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDelete.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDelete.java
@@ -260,7 +260,7 @@ public @interface RestDelete {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
+        *      <li class='jm'>{@link 
RestContextBuilder#defaultRequestHeaders(org.apache.http.Header...)}
         * </ul>
         */
        String[] defaultRequestHeaders() default {};
@@ -285,7 +285,7 @@ public @interface RestDelete {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
+        *      <li class='jm'>{@link 
RestContextBuilder#defaultResponseHeaders(org.apache.http.Header...)}
         * </ul>
         */
        String[] defaultResponseHeaders() default {};
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 6ef318f..fc815fd 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
@@ -462,7 +462,7 @@ public class RestDeleteAnnotation {
                        stringStream(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultResponseHeaders(x));
                        stringStream(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
                        stringStream(a.defaultQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultQueryData(x));
-                       b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
accept(string(a.defaultAccept())));
+                       value(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders(x));
                        b.guards(a.guards());
                        b.matchers(a.matchers());
                        value(a.clientVersion()).ifPresent(x -> 
b.clientVersion(x));
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGet.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGet.java
index 6c87023..1ce1962 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGet.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGet.java
@@ -275,7 +275,7 @@ public @interface RestGet {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
+        *      <li class='jm'>{@link 
RestContextBuilder#defaultRequestHeaders(org.apache.http.Header...)}
         * </ul>
         */
        String[] defaultRequestHeaders() default {};
@@ -300,7 +300,7 @@ public @interface RestGet {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
+        *      <li class='jm'>{@link 
RestContextBuilder#defaultResponseHeaders(org.apache.http.Header...)}
         * </ul>
         */
        String[] defaultResponseHeaders() default {};
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 b2d4016..0be1fae 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
@@ -518,7 +518,7 @@ public class RestGetAnnotation {
                        stringStream(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultResponseHeaders(x));
                        stringStream(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
                        stringStream(a.defaultQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultQueryData(x));
-                       b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
accept(string(a.defaultAccept())));
+                       value(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders(x));
                        b.converters(a.converters());
                        b.guards(a.guards());
                        b.matchers(a.matchers());
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOp.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOp.java
index be19d0b..24adede 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOp.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOp.java
@@ -330,7 +330,7 @@ public @interface RestOp {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
+        *      <li class='jm'>{@link 
RestContextBuilder#defaultRequestHeaders(org.apache.http.Header...)}
         * </ul>
         */
        String[] defaultRequestHeaders() default {};
@@ -355,7 +355,7 @@ public @interface RestOp {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
+        *      <li class='jm'>{@link 
RestContextBuilder#defaultResponseHeaders(org.apache.http.Header...)}
         * </ul>
         */
        String[] defaultResponseHeaders() default {};
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 102f6ae..2309d70 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
@@ -621,8 +621,8 @@ public class RestOpAnnotation {
                        stringStream(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
                        stringStream(a.defaultQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultQueryData(x));
                        stringStream(a.defaultFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultFormData(x));
-                       b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
accept(string(a.defaultAccept())));
-                       b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
contentType(string(a.defaultContentType())));
+                       value(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders(x));
+                       value(a.defaultContentType()).map(x -> 
contentType(x)).ifPresent(x -> b.defaultRequestHeaders(x));
                        b.converters(a.converters());
                        b.guards(a.guards());
                        b.matchers(a.matchers());
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPost.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPost.java
index aa53e3c..7572e09 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPost.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPost.java
@@ -332,7 +332,7 @@ public @interface RestPost {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
+        *      <li class='jm'>{@link 
RestContextBuilder#defaultRequestHeaders(org.apache.http.Header...)}
         * </ul>
         */
        String[] defaultRequestHeaders() default {};
@@ -357,7 +357,7 @@ public @interface RestPost {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
+        *      <li class='jm'>{@link 
RestContextBuilder#defaultResponseHeaders(org.apache.http.Header...)}
         * </ul>
         */
        String[] defaultResponseHeaders() default {};
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 cb329c7..f1e84f3 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
@@ -606,8 +606,8 @@ public class RestPostAnnotation {
                        stringStream(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
                        stringStream(a.defaultQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultQueryData(x));
                        stringStream(a.defaultFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultFormData(x));
-                       b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
accept(string(a.defaultAccept())));
-                       b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
contentType(string(a.defaultContentType())));
+                       value(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders(x));
+                       value(a.defaultContentType()).map(x -> 
contentType(x)).ifPresent(x -> b.defaultRequestHeaders(x));
                        b.converters(a.converters());
                        b.guards(a.guards());
                        b.matchers(a.matchers());
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPut.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPut.java
index f799e79..8915b6d 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPut.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPut.java
@@ -332,7 +332,7 @@ public @interface RestPut {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
+        *      <li class='jm'>{@link 
RestContextBuilder#defaultRequestHeaders(org.apache.http.Header...)}
         * </ul>
         */
        String[] defaultRequestHeaders() default {};
@@ -357,7 +357,7 @@ public @interface RestPut {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
+        *      <li class='jm'>{@link 
RestContextBuilder#defaultResponseHeaders(org.apache.http.Header...)}
         * </ul>
         */
        String[] defaultResponseHeaders() default {};
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 46fd32b..e759440 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
@@ -606,8 +606,8 @@ public class RestPutAnnotation {
                        stringStream(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
                        stringStream(a.defaultQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultQueryData(x));
                        stringStream(a.defaultFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultFormData(x));
-                       b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
accept(string(a.defaultAccept())));
-                       b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
contentType(string(a.defaultContentType())));
+                       value(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders(x));
+                       value(a.defaultContentType()).map(x -> 
contentType(x)).ifPresent(x -> b.defaultRequestHeaders(x));
                        b.converters(a.converters());
                        b.guards(a.guards());
                        b.matchers(a.matchers());

Reply via email to