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

commit 4962a4d0572ae979de07fdd377eeb07e9412ce26
Author: JamesBognar <[email protected]>
AuthorDate: Sat Aug 28 12:06:53 2021 -0400

    Context API refactoring.
---
 .../apache/juneau/rest/RestOperationContext.java   | 115 +-------
 .../juneau/rest/RestOperationContextBuilder.java   | 293 ++-------------------
 .../rest/annotation/RestDeleteAnnotation.java      |   4 +-
 .../juneau/rest/annotation/RestGetAnnotation.java  |   4 +-
 .../juneau/rest/annotation/RestOpAnnotation.java   |   4 +-
 .../juneau/rest/annotation/RestPostAnnotation.java |   4 +-
 .../juneau/rest/annotation/RestPutAnnotation.java  |   4 +-
 7 files changed, 47 insertions(+), 381 deletions(-)

diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContext.java
index 1e162f5..6a91538 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContext.java
@@ -29,7 +29,6 @@ import java.lang.reflect.Method;
 import java.nio.charset.*;
 import java.util.*;
 import java.util.concurrent.*;
-import java.util.function.*;
 
 import javax.servlet.*;
 import javax.servlet.http.*;
@@ -83,96 +82,6 @@ public class RestOperationContext extends BeanContext 
implements Comparable<Rest
        static final String PREFIX = "RestOperationContext";
 
        /**
-        * Configuration property:  Default request headers.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.rest.RestOperationContext#RESTOP_defaultRequestHeaders 
RESTOP_defaultRequestHeaders}
-        *      <li><b>Name:</b>  
<js>"RestOperationContext.defaultRequestHeaders.lo"</js>
-        *      <li><b>Data type:</b>  <c>{@link org.apache.http.Header}[]</c>
-        *      <li><b>System property:</b>  
<c>RestOperationContext.defaultRequestHeaders</c>
-        *      <li><b>Environment variable:</b>  
<c>RESTOPERATIONCONTEXT_DEFAULTREQUESTHEADERS</c>
-        *      <li><b>Default:</b>  <jk>null</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.rest.annotation.RestOp#defaultRequestHeaders()}
-        *                      <li class='ja'>{@link 
org.apache.juneau.rest.annotation.RestOp#defaultAccept()}
-        *                      <li class='ja'>{@link 
org.apache.juneau.rest.annotation.RestOp#defaultContentType()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.RestOperationContextBuilder#defaultRequestHeader(String,String)}
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.RestOperationContextBuilder#defaultRequestHeader(String,Supplier)}
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.RestOperationContextBuilder#defaultRequestHeaders(org.apache.http.Header...)}
-        *              </ul>
-        * </ul>
-        *
-        * <h5 class='section'>Description:</h5>
-        * Default request headers.
-        *
-        * <p>
-        * Specifies default values for request headers if they're not passed 
in through the request.
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      <jc>// Assume "text/json" Accept value when Accept not 
specified</jc>
-        *      <ja>@RestGet</ja>(path=<js>"/*"</js>, 
defaultRequestHeaders={<js>"Accept: text/json"</js>})
-        *      <jk>public</jk> String doGet()  {...}
-        * </p>
-        *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
-        * </ul>
-        */
-       public static final String RESTOP_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.RestOperationContext#RESTOP_defaultResponseHeaders 
RESTOP_defaultResponseHeaders}
-        *      <li><b>Name:</b>  
<js>"RestOperationContext.defaultResponseHeaders.lo"</js>
-        *      <li><b>Data type:</b>  <c>{@link org.apache.http.Header}[]</c>
-        *      <li><b>System property:</b>  
<c>RestOperationContext.defaultResponseHeaders</c>
-        *      <li><b>Environment variable:</b>  
<c>RESTOPERATIONCONTEXT_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.RestOp#defaultRequestHeaders()}
-        *                      <li class='ja'>{@link 
org.apache.juneau.rest.annotation.RestOp#defaultAccept()}
-        *                      <li class='ja'>{@link 
org.apache.juneau.rest.annotation.RestOp#defaultContentType()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.RestOperationContextBuilder#defaultResponseHeader(String,String)}
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.RestOperationContextBuilder#defaultResponseHeader(String,Supplier)}
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.RestOperationContextBuilder#defaultResponseHeaders(org.apache.http.Header...)}
-        *              </ul>
-        * </ul>
-        *
-        * <h5 class='section'>Description:</h5>
-        * Default response headers.
-        *
-        * <p>
-        * Specifies default values for response headers if they're not 
overwritten during the request.
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      <jc>// Assume "text/json" Accept value when Accept not 
specified</jc>
-        *      <ja>@RestGet</ja>(path=<js>"/*"</js>, 
defaultResponseHeaders={<js>"Content-Type: text/json"</js>})
-        *      <jk>public</jk> String doGet()  {...}
-        * </p>
-        *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
-        * </ul>
-        */
-       public static final String RESTOP_defaultResponseHeaders = PREFIX + 
".defaultResponseHeaders.lo";
-
-       /**
         * Configuration property:  Method-level matchers.
         *
         * <h5 class='section'>Property:</h5>
@@ -333,8 +242,8 @@ public class RestOperationContext extends BeanContext 
implements Comparable<Rest
                        supportedAcceptTypes = 
unmodifiableList(cp.getList(REST_produces, 
MediaType.class).orElse(serializers.getSupportedMediaTypes()));
                        supportedContentTypes = 
unmodifiableList(cp.getList(REST_consumes, 
MediaType.class).orElse(parsers.getSupportedMediaTypes()));
 
-                       defaultRequestHeaders = createDefaultRequestHeaders(r, 
cp, bs, method, context).build();
-                       defaultResponseHeaders = 
createDefaultResponseHeaders(r, cp, bs, method, context).build();
+                       defaultRequestHeaders = createDefaultRequestHeaders(r, 
builder, bs, method, context).build();
+                       defaultResponseHeaders = 
createDefaultResponseHeaders(r, builder, bs, method, context).build();
                        defaultRequestQuery = createDefaultRequestQuery(r, 
builder, bs, method).build();
                        defaultRequestFormData = 
createDefaultRequestFormData(r, builder, bs, method).build();
                        defaultRequestAttributes = 
unmodifiableList(createDefaultRequestAttributes(r, builder, bs, method, 
context));
@@ -931,20 +840,16 @@ public class RestOperationContext extends BeanContext 
implements Comparable<Rest
         * Instantiates the default request headers for this method.
         *
         * @param resource The REST resource object.
-        * @param properties xxx
+        * @param builder The builder for this object.
         * @param beanStore The bean store to use for retrieving and creating 
beans.
         * @param method This Java method.
         * @param context The REST class context.
         * @return The default request headers for this method.
         * @throws Exception If default request headers could not be 
instantiated.
         */
-       protected HeaderListBuilder createDefaultRequestHeaders(Object 
resource, ContextProperties properties, BeanStore beanStore, Method method, 
RestContext context) throws Exception {
+       protected HeaderListBuilder createDefaultRequestHeaders(Object 
resource, RestOperationContextBuilder builder, BeanStore beanStore, Method 
method, RestContext context) throws Exception {
 
-               HeaderListBuilder x = HeaderList.create();
-
-               x.set(context.getDefaultRequestHeaders());
-
-               x.set(properties.getInstanceArray(RESTOP_defaultRequestHeaders, 
org.apache.http.Header.class, beanStore).orElse(new org.apache.http.Header[0]));
+               HeaderListBuilder x = 
HeaderList.create().setDefault(context.getDefaultRequestHeaders()).setDefault(builder.defaultRequestHeaders.build());
 
                for (Annotation[] aa : method.getParameterAnnotations()) {
                        for (Annotation a : aa) {
@@ -977,20 +882,16 @@ public class RestOperationContext extends BeanContext 
implements Comparable<Rest
         * Instantiates the default request headers for this method.
         *
         * @param resource The REST resource object.
-        * @param properties xxx
+        * @param builder The builder for this object.
         * @param beanStore The bean store to use for retrieving and creating 
beans.
         * @param method This Java method.
         * @param context The REST class context.
         * @return The default request headers for this method.
         * @throws Exception If default request headers could not be 
instantiated.
         */
-       protected HeaderListBuilder createDefaultResponseHeaders(Object 
resource, ContextProperties properties, BeanStore beanStore, Method method, 
RestContext context) throws Exception {
-
-               HeaderListBuilder x = HeaderList.create();
-
-               x.set(context.getDefaultResponseHeaders().getAll());
+       protected HeaderListBuilder createDefaultResponseHeaders(Object 
resource, RestOperationContextBuilder builder, BeanStore beanStore, Method 
method, RestContext context) throws Exception {
 
-               
x.set(properties.getInstanceArray(RESTOP_defaultResponseHeaders, 
org.apache.http.Header.class, beanStore).orElse(new org.apache.http.Header[0]));
+               HeaderListBuilder x = 
HeaderList.create().setDefault(context.getDefaultResponseHeaders()).setDefault(builder.defaultResponseHeaders.build());
 
                x = BeanStore
                        .of(beanStore, resource)
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContextBuilder.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContextBuilder.java
index 8f180ac..3fd7093 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContextBuilder.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContextBuilder.java
@@ -12,15 +12,11 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.rest;
 
-import static java.util.Arrays.*;
-import static org.apache.juneau.http.HttpHeaders.*;
 import static org.apache.juneau.rest.HttpRuntimeException.*;
 import static org.apache.juneau.rest.RestOperationContext.*;
 
 import java.lang.annotation.*;
 import java.util.*;
-import java.util.function.*;
-
 import org.apache.http.*;
 import org.apache.juneau.*;
 import org.apache.juneau.cp.*;
@@ -47,6 +43,7 @@ public class RestOperationContextBuilder extends 
BeanContextBuilder {
        List<String> path;
        PartListBuilder defaultFormData, defaultQueryData;
        NamedAttributeList defaultRequestAttributes;
+       HeaderListBuilder defaultRequestHeaders, defaultResponseHeaders;
 
        private BeanStore beanStore;
 
@@ -83,6 +80,8 @@ public class RestOperationContextBuilder extends 
BeanContextBuilder {
                this.defaultFormData = PartList.create();
                this.defaultQueryData = PartList.create();
                this.defaultRequestAttributes = NamedAttributeList.create();
+               this.defaultRequestHeaders = HeaderList.create();
+               this.defaultResponseHeaders = HeaderList.create();
 
                MethodInfo mi = MethodInfo.of(context.getResourceClass(), 
method);
 
@@ -233,60 +232,6 @@ public class RestOperationContextBuilder extends 
BeanContextBuilder {
         * Default form data parameters.
         *
         * <p>
-        * Sets a default value for a form data parameter.
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      <ja>@RestPost</ja>(path=<js>"/*"</js>, 
defaultFormData={<js>"foo=bar"</js>})
-        *      <jk>public</jk> String doGet(<ja>@FormData</ja>(<js>"foo"</js>) 
String <jv>foo</jv>)  {...}
-        * </p>
-
-        * <ul class='seealso'>
-        *      <li class='ja'>{@link RestOp#defaultFormData}
-        *      <li class='ja'>{@link RestPost#defaultFormData}
-        * </ul>
-        *
-        * @param name The form data parameter name.
-        * @param value The form data parameter value.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestOperationContextBuilder defaultFormData(String name, Object 
value) {
-               defaultFormData.setDefault(name, value);
-               return this;
-       }
-
-       /**
-        * Default form data parameters.
-        *
-        * <p>
-        * Sets a default value for a form data parameter.
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      <ja>@RestPost</ja>(path=<js>"/*"</js>, 
defaultFormData={<js>"foo=bar"</js>})
-        *      <jk>public</jk> String doGet(<ja>@FormData</ja>(<js>"foo"</js>) 
String <jv>foo</jv>)  {...}
-        * </p>
-
-        * <ul class='seealso'>
-        *      <li class='ja'>{@link RestOp#defaultFormData}
-        *      <li class='ja'>{@link RestPost#defaultFormData}
-        * </ul>
-        *
-        * @param name The form data parameter name.
-        * @param value The form data parameter value supplier.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestOperationContextBuilder defaultFormData(String name, 
Supplier<?> value) {
-               defaultFormData.setDefault(name, value);
-               return this;
-       }
-
-       /**
-        * Default form data parameters.
-        *
-        * <p>
         * Sets default values for form data parameters.
         *
         * <h5 class='section'>Example:</h5>
@@ -313,72 +258,6 @@ public class RestOperationContextBuilder extends 
BeanContextBuilder {
         * Default query parameters.
         *
         * <p>
-        * Sets a default value for a query data parameter.
-        *
-        * <p>
-        * Affects values returned by {@link RestRequest#getQueryParam(String)} 
when the parameter is not present on the request.
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      <ja>@RestGet</ja>(path=<js>"/*"</js>, 
defaultQueryData={<js>"foo=bar"</js>})
-        *      <jk>public</jk> String doGet(<ja>@Query</ja>(<js>"foo"</js>) 
String <jv>foo</jv>)  {...}
-        * </p>
-
-        * <ul class='seealso'>
-        *      <li class='ja'>{@link RestOp#defaultQueryData}
-        *      <li class='ja'>{@link RestGet#defaultQueryData}
-        *      <li class='ja'>{@link RestPut#defaultQueryData}
-        *      <li class='ja'>{@link RestPost#defaultQueryData}
-        *      <li class='ja'>{@link RestDelete#defaultQueryData}
-        * </ul>
-        *
-        * @param name The query parameter name.
-        * @param value The query parameter value.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestOperationContextBuilder defaultQueryData(String name, Object 
value) {
-               defaultQueryData.setDefault(name, value);
-               return this;
-       }
-
-       /**
-        * Default query parameters.
-        *
-        * <p>
-        * Sets a default value for a query data parameter.
-        *
-        * <p>
-        * Affects values returned by {@link RestRequest#getQueryParam(String)} 
when the parameter is not present on the request.
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      <ja>@RestGet</ja>(path=<js>"/*"</js>, 
defaultQueryData={<js>"foo=bar"</js>})
-        *      <jk>public</jk> String doGet(<ja>@Query</ja>(<js>"foo"</js>) 
String <jv>foo</jv>)  {...}
-        * </p>
-
-        * <ul class='seealso'>
-        *      <li class='ja'>{@link RestOp#defaultQueryData}
-        *      <li class='ja'>{@link RestGet#defaultQueryData}
-        *      <li class='ja'>{@link RestPut#defaultQueryData}
-        *      <li class='ja'>{@link RestPost#defaultQueryData}
-        *      <li class='ja'>{@link RestDelete#defaultQueryData}
-        * </ul>
-        *
-        * @param name The query parameter name.
-        * @param value The query parameter value supplier.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestOperationContextBuilder defaultQueryData(String name, 
Supplier<?> value) {
-               defaultQueryData.setDefault(name, value);
-               return this;
-       }
-
-       /**
-        * Default query parameters.
-        *
-        * <p>
         * Sets default values for query data parameters.
         *
         * <p>
@@ -411,7 +290,7 @@ public class RestOperationContextBuilder extends 
BeanContextBuilder {
         * Default request attributes.
         *
         * <p>
-        * Specifies a default value for a request attribute if it is not 
already set on the request.
+        * Specifies default values for request attributes if they are not 
already set on the request.
         *
         * <h5 class='section'>Example:</h5>
         * <p class='bcode w800'>
@@ -428,178 +307,64 @@ public class RestOperationContextBuilder extends 
BeanContextBuilder {
         *      <li class='ja'>{@link RestDelete#defaultRequestAttributes()}
         * </ul>
         *
-        * @param name The attribute name.
-        * @param value The attribute value.
+        * @param values The request attributes to add.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestOperationContextBuilder defaultRequestAttribute(String name, 
Object value) {
-               return defaultRequestAttributes(BasicNamedAttribute.of(name, 
value));
+       public RestOperationContextBuilder 
defaultRequestAttributes(NamedAttribute...values) {
+               defaultRequestAttributes.append(values);
+               return this;
        }
 
        /**
-        * Default request attributes.
+        * <i><l>RestOperationContext</l> configuration property:&emsp;</i>  
Default request headers.
         *
         * <p>
-        * Specifies a default value for a request attribute if it is not 
already set on the request.
+        * Specifies default values for request headers if they're not passed 
in through the request.
         *
         * <h5 class='section'>Example:</h5>
         * <p class='bcode w800'>
         *      <jc>// Assume "text/json" Accept value when Accept not 
specified</jc>
-        *      <ja>@RestGet</ja>(path=<js>"/*"</js>, 
defaultRequestAttributes={<js>"Foo=bar"</js>})
+        *      <ja>@RestGet</ja>(path=<js>"/*"</js>, 
defaultRequestHeaders={<js>"Accept: text/json"</js>})
         *      <jk>public</jk> String doGet()  {...}
         * </p>
         *
         * <ul class='seealso'>
-        *      <li class='ja'>{@link RestOp#defaultRequestAttributes()}
-        *      <li class='ja'>{@link RestGet#defaultRequestAttributes()}
-        *      <li class='ja'>{@link RestPut#defaultRequestAttributes()}
-        *      <li class='ja'>{@link RestPost#defaultRequestAttributes()}
-        *      <li class='ja'>{@link RestDelete#defaultRequestAttributes()}
+        *      <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 name The attribute name.
-        * @param value The attribute value supplier.
+        * @param values The headers to add.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestOperationContextBuilder defaultRequestAttribute(String name, 
Supplier<?> value) {
-               return defaultRequestAttributes(BasicNamedAttribute.of(name, 
value));
+       public RestOperationContextBuilder 
defaultRequestHeaders(Header...values) {
+               defaultRequestHeaders.setDefault(values);
+               return this;
        }
 
        /**
-        * Default request attributes.
+        * Default response headers.
         *
         * <p>
-        * Specifies default values for request attributes if they are not 
already set on the request.
+        * Specifies default values for response headers if they're not set 
after the Java REST method is called.
         *
         * <h5 class='section'>Example:</h5>
         * <p class='bcode w800'>
         *      <jc>// Assume "text/json" Accept value when Accept not 
specified</jc>
-        *      <ja>@RestGet</ja>(path=<js>"/*"</js>, 
defaultRequestAttributes={<js>"Foo=bar"</js>})
+        *      <ja>@RestGet</ja>(path=<js>"/*"</js>, 
defaultResponseHeaders={<js>"Content-Type: text/json"</js>})
         *      <jk>public</jk> String doGet()  {...}
         * </p>
         *
         * <ul class='seealso'>
-        *      <li class='ja'>{@link RestOp#defaultRequestAttributes()}
-        *      <li class='ja'>{@link RestGet#defaultRequestAttributes()}
-        *      <li class='ja'>{@link RestPut#defaultRequestAttributes()}
-        *      <li class='ja'>{@link RestPost#defaultRequestAttributes()}
-        *      <li class='ja'>{@link RestDelete#defaultRequestAttributes()}
-        * </ul>
-        *
-        * @param values The request attributes to add.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestOperationContextBuilder 
defaultRequestAttributes(NamedAttribute...values) {
-               defaultRequestAttributes.append(values);
-               return this;
-       }
-
-       /**
-        * <i><l>RestOperationContext</l> configuration property:&emsp;</i>  
Default request headers.
-        *
-        * <p>
-        * Adds a single default request header.
-        *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link 
RestOperationContext#RESTOP_defaultRequestHeaders}
-        * </ul>
-        *
-        * @param name The request header name.
-        * @param value The request header value.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestOperationContextBuilder defaultRequestHeader(String name, 
String value) {
-               return defaultRequestHeaders(stringHeader(name, value));
-       }
-
-       /**
-        * <i><l>RestOperationContext</l> configuration property:&emsp;</i>  
Default request headers.
-        *
-        * <p>
-        * Adds a single default request header.
-        *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link 
RestOperationContext#RESTOP_defaultRequestHeaders}
-        * </ul>
-        *
-        * @param name The request header name.
-        * @param value The request header value supplier.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestOperationContextBuilder defaultRequestHeader(String name, 
Supplier<String> value) {
-               return defaultRequestHeaders(stringHeader(name, value));
-       }
-
-       /**
-        * <i><l>RestOperationContext</l> configuration property:&emsp;</i>  
Default request headers.
-        *
-        * <p>
-        * Specifies default values for request headers if they're not passed 
in through the request.
-        *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link 
RestOperationContext#RESTOP_defaultRequestHeaders}
-        * </ul>
-        *
-        * @param values The headers to add.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestOperationContextBuilder 
defaultRequestHeaders(Header...values) {
-               asList(values).stream().forEach(x -> 
appendTo(RESTOP_defaultRequestHeaders, x));
-               return this;
-       }
-
-       /**
-        * <i><l>RestOperationContext</l> configuration property:&emsp;</i>  
Default response headers.
-        *
-        * <p>
-        * Adds a single default response header.
-        *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link 
RestOperationContext#RESTOP_defaultResponseHeaders}
-        * </ul>
-        *
-        * @param name The response header name.
-        * @param value The response header value.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestOperationContextBuilder defaultResponseHeader(String name, 
String value) {
-               return defaultResponseHeaders(stringHeader(name, value));
-       }
-
-       /**
-        * <i><l>RestOperationContext</l> configuration property:&emsp;</i>  
Default response headers.
-        *
-        * <p>
-        * Adds a single default response header.
-        *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link 
RestOperationContext#RESTOP_defaultResponseHeaders}
-        * </ul>
-        *
-        * @param name The response header name.
-        * @param value The response header value supplier.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestOperationContextBuilder defaultResponseHeader(String name, 
Supplier<String> value) {
-               return defaultResponseHeaders(stringHeader(name, value));
-       }
-
-       /**
-        * <i><l>RestOperationContext</l> configuration property:&emsp;</i>  
Default response headers.
-        *
-        * <p>
-        * 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 
RestOperationContext#RESTOP_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.
@@ -607,7 +372,7 @@ public class RestOperationContextBuilder extends 
BeanContextBuilder {
         */
        @FluentSetter
        public RestOperationContextBuilder 
defaultResponseHeaders(Header...values) {
-               asList(values).stream().forEach(x -> 
appendTo(RESTOP_defaultResponseHeaders, x));
+               defaultResponseHeaders.setDefault(values);
                return this;
        }
 
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 89b9e4d..bbff5ab 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
@@ -458,8 +458,8 @@ public class RestDeleteAnnotation {
 
                        b.set(REST_encoders, 
merge(ConverterUtils.toType(b.peek(REST_encoders), Object[].class), 
a.encoders()));
                        value(a.contextClass(), 
RestOperationContext.Null.class).ifPresent(x -> b.contextClass(x));
-                       stringStream(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.appendTo(RESTOP_defaultRequestHeaders, x));
-                       stringStream(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.appendTo(RESTOP_defaultResponseHeaders, x));
+                       stringStream(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultRequestHeaders(x));
+                       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())));
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 74ba820..83b0eb1 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
@@ -513,8 +513,8 @@ public class RestGetAnnotation {
                        b.set(REST_encoders, 
merge(ConverterUtils.toType(b.peek(REST_encoders), Object[].class), 
a.encoders()));
                        value(a.contextClass(), 
RestOperationContext.Null.class).ifPresent(x -> b.contextClass(x));
                        b.setIfNotEmpty(REST_produces, 
stringList(a.produces()));
-                       stringStream(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.appendTo(RESTOP_defaultRequestHeaders, x));
-                       stringStream(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.appendTo(RESTOP_defaultResponseHeaders, x));
+                       stringStream(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultRequestHeaders(x));
+                       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())));
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 c6b337c..6f36f8f 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
@@ -615,8 +615,8 @@ public class RestOpAnnotation {
                        value(a.contextClass(), 
RestOperationContext.Null.class).ifPresent(x -> b.contextClass(x));
                        b.setIfNotEmpty(REST_produces, 
stringList(a.produces()));
                        b.setIfNotEmpty(REST_consumes, 
stringList(a.consumes()));
-                       stringStream(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.appendTo(RESTOP_defaultRequestHeaders, x));
-                       stringStream(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.appendTo(RESTOP_defaultResponseHeaders, x));
+                       stringStream(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultRequestHeaders(x));
+                       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));
                        stringStream(a.defaultFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultFormData(x));
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 1d93a42..d4208bd 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
@@ -600,8 +600,8 @@ public class RestPostAnnotation {
                        value(a.contextClass(), 
RestOperationContext.Null.class).ifPresent(x -> b.contextClass(x));
                        b.setIfNotEmpty(REST_produces, 
stringList(a.produces()));
                        b.setIfNotEmpty(REST_consumes, 
stringList(a.consumes()));
-                       stringStream(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.appendTo(RESTOP_defaultRequestHeaders, x));
-                       stringStream(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.appendTo(RESTOP_defaultResponseHeaders, x));
+                       stringStream(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultRequestHeaders(x));
+                       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));
                        stringStream(a.defaultFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultFormData(x));
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 10c2494..f35f640 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
@@ -600,8 +600,8 @@ public class RestPutAnnotation {
                        value(a.contextClass(), 
RestOperationContext.Null.class).ifPresent(x -> b.contextClass(x));
                        b.setIfNotEmpty(REST_produces, 
stringList(a.produces()));
                        b.setIfNotEmpty(REST_consumes, 
stringList(a.consumes()));
-                       stringStream(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.appendTo(RESTOP_defaultRequestHeaders, x));
-                       stringStream(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.appendTo(RESTOP_defaultResponseHeaders, x));
+                       stringStream(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultRequestHeaders(x));
+                       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));
                        stringStream(a.defaultFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultFormData(x));

Reply via email to