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: </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: </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: </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: </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: </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: </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: </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));