You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2021/09/03 15:40:04 UTC

[juneau] branch master updated: Context API refactoring.

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

commit 8e39a23d1e3336522be9acfd764b8fd746aaeb6b
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Fri Sep 3 10:50:39 2021 -0400

    Context API refactoring.
---
 .../java/org/apache/juneau/rest/RestContext.java   | 87 ++--------------------
 .../org/apache/juneau/rest/RestContextBuilder.java | 70 +++++++++--------
 .../org/apache/juneau/rest/annotation/Rest.java    | 27 ++++++-
 .../juneau/rest/annotation/RestAnnotation.java     |  2 +-
 .../apache/juneau/rest/annotation/RestDelete.java  | 24 ++++--
 .../org/apache/juneau/rest/annotation/RestGet.java | 24 ++++--
 .../org/apache/juneau/rest/annotation/RestOp.java  | 24 ++++--
 .../apache/juneau/rest/annotation/RestPost.java    | 24 ++++--
 .../org/apache/juneau/rest/annotation/RestPut.java | 24 ++++--
 9 files changed, 162 insertions(+), 144 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 862fca7..f981ab6 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,78 +149,6 @@ public class RestContext extends BeanContext {
 	public static final String REST_beanStore = PREFIX + ".beanStore.o";
 
 	/**
-	 * Configuration property:  Default request attributes.
-	 *
-	 * <h5 class='section'>Property:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li><b>ID:</b>  {@link org.apache.juneau.rest.RestContext#REST_defaultRequestAttributes REST_defaultRequestAttributes}
-	 * 	<li><b>Name:</b>  <js>"RestContext.defaultRequestAttributes.lo"</js>
-	 * 	<li><b>Data type:</b>  <c>{@link org.apache.juneau.rest.NamedAttribute}[]</c>
-	 * 	<li><b>System property:</b>  <c>RestContext.defaultRequestAttributes</c>
-	 * 	<li><b>Environment variable:</b>  <c>RESTCONTEXT_DEFAULTREQUESTATTRIBUTES</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#defaultRequestAttributes()}
-	 * 			<li class='ja'>{@link org.apache.juneau.rest.annotation.RestOp#defaultRequestAttributes()}
-	 * 		</ul>
-	 * 	<li><b>Methods:</b>
-	 * 		<ul>
-	 * 			<li class='jm'>{@link org.apache.juneau.rest.RestContextBuilder#defaultRequestAttribute(String,Object)}
-	 * 			<li class='jm'>{@link org.apache.juneau.rest.RestContextBuilder#defaultRequestAttribute(String,Supplier)}
-	 * 			<li class='jm'>{@link org.apache.juneau.rest.RestContextBuilder#defaultRequestAttributes(NamedAttribute...)}
-	 * 		</ul>
-	 * </ul>
-	 *
-	 * <h5 class='section'>Description:</h5>
-	 * <p>
-	 * Specifies default values for request attributes if they're not already set on the request.
-	 *
-	 * <ul class='notes'>
-	 * 	<li>
-	 * 		Affects values returned by the following methods:
-	 * 		<ul>
-	 * 			<li class='jm'>{@link RestRequest#getAttribute(String)}.
-	 * 			<li class='jm'>{@link RestRequest#getAttributes()}.
-	 * 		</ul>
-	 * </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>(defaultRequestAttributes={<js>"Foo=bar"</js>, <js>"Baz: $C{REST/myAttributeValue}"</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>
-	 * 				.defaultRequestAttributes(
-	 * 					BasicNamedAttribute.<jsm>of</jsm>(<js>"Foo"</js>, <js>"bar"</js>),
-	 * 					BasicNamedAttribute.<jsm>of</jsm>(<js>"Baz"</js>, <jk>true</jk>)
-	 * 				);
-	 *
-	 * 			<jc>// Same, but using property.</jc>
-	 * 			<jv>builder</jv>.appendTo(<jsf>REST_defaultRequestAttributes</jsf>, BasicNamedAttribute.<jsm>of</jsm>(<js>"Foo"</js>, <js>"bar"</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>.defaultRequestAttribute(<js>"Foo"</js>, <js>"bar"</js>);
-	 * 		}
-	 *
-	 * 		<jc>// Override at the method level.</jc>
-	 * 		<ja>@RestGet</ja>(defaultRequestAttributes={<js>"Foo: bar"</js>})
-	 * 		<jk>public</jk> Object myMethod() {...}
-	 * 	}
-	 * </p>
-	 */
-	public static final String REST_defaultRequestAttributes = PREFIX + ".defaultRequestAttributes.lo";
-
-	/**
 	 * Configuration property:  Default request headers.
 	 *
 	 * <h5 class='section'>Property:</h5>
@@ -1406,7 +1334,7 @@ public class RestContext extends BeanContext {
 
 			defaultRequestHeaders = createDefaultRequestHeaders(r, cp, bf).build();
 			defaultResponseHeaders = createDefaultResponseHeaders(r, cp, bf).build();
-			defaultRequestAttributes = createDefaultRequestAttributes(r, cp, bf);
+			defaultRequestAttributes = createDefaultRequestAttributes(r, builder, bf);
 
 			opArgs = createOpArgs(r, builder, bf).asArray();
 			hookMethodArgs = createHookMethodArgs(r, cp, bf).asArray();
@@ -2857,20 +2785,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 NamedAttributeList createDefaultRequestAttributes(Object resource, ContextProperties properties, BeanStore beanStore) throws Exception {
-
-		NamedAttributeList x = NamedAttributeList.create();
+	protected NamedAttributeList createDefaultRequestAttributes(Object resource, RestContextBuilder builder, BeanStore beanStore) throws Exception {
 
-		x.appendUnique(properties.getInstanceArray(REST_defaultRequestAttributes, NamedAttribute.class, beanStore).orElse(new NamedAttribute[0]));
+		NamedAttributeList x = builder.defaultRequestAttributes;
 
 		x = BeanStore
 			.of(beanStore, resource)
@@ -3971,7 +3896,7 @@ public class RestContext extends BeanContext {
 	 * Returns the default request attributes for this resource.
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
+	 * 	<li class='jm'>{@link RestContextBuilder#defaultRequestAttributes(NamedAttribute...)}
 	 * </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 7092d52..b930672 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
@@ -137,6 +137,7 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
 	BeanRef<RestLogger> callLoggerDefault = BeanRef.of(RestLogger.class);
 	BeanRef<RestLogger> callLogger = BeanRef.of(RestLogger.class);
 	BeanRef<DebugEnablement> debugEnablement = BeanRef.of(DebugEnablement.class);
+	NamedAttributeList defaultRequestAttributes = NamedAttributeList.create();
 
 	Enablement debugDefault, debug;
 
@@ -1258,51 +1259,48 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
 	}
 
 	/**
-	 * <i><l>RestContext</l> configuration property:&emsp;</i>  Default request attribute.
+	 * Default request attributes.
 	 *
 	 * <p>
-	 * Adds a single default request attribute.
+	 * Specifies default values for request attributes if they're not already set on the request.
 	 *
-	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
+	 * Affects values returned by the following methods:
+	 * <ul>
+	 * 	<li class='jm'>{@link RestRequest#getAttribute(String)}.
+	 * 	<li class='jm'>{@link RestRequest#getAttributes()}.
 	 * </ul>
 	 *
-	 * @param name The attribute name.
-	 * @param value The attribute value.
-	 * @return This object (for method chaining).
-	 */
-	@FluentSetter
-	public RestContextBuilder defaultRequestAttribute(String name, Object value) {
-		return defaultRequestAttributes(BasicNamedAttribute.of(name, value));
-	}
-
-	/**
-	 * <i><l>RestContext</l> configuration property:&emsp;</i>  Default request attribute.
+	 * <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>(defaultRequestAttributes={<js>"Foo=bar"</js>, <js>"Baz: $C{REST/myAttributeValue}"</js>})
+	 * 	<jk>public class</jk> MyResource {
 	 *
-	 * <p>
-	 * Adds a single default request attribute.
+	 * 		<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_defaultRequestAttributes}
-	 * </ul>
+	 * 			<jc>// Using method on builder.</jc>
+	 * 			<jv>builder</jv>
+	 * 				.defaultRequestAttributes(
+	 * 					BasicNamedAttribute.<jsm>of</jsm>(<js>"Foo"</js>, <js>"bar"</js>),
+	 * 					BasicNamedAttribute.<jsm>of</jsm>(<js>"Baz"</js>, <jk>true</jk>)
+	 * 				);
+	 * 		}
 	 *
-	 * @param name The attribute name.
-	 * @param value The attribute value supplier.
-	 * @return This object (for method chaining).
-	 */
-	@FluentSetter
-	public RestContextBuilder defaultRequestAttribute(String name, Supplier<?> value) {
-		return defaultRequestAttributes(BasicNamedAttribute.of(name, value));
-	}
-
-	/**
-	 * <i><l>RestContext</l> configuration property:&emsp;</i>  Default request attributes.
+	 * 		<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>.defaultRequestAttribute(<js>"Foo"</js>, <js>"bar"</js>);
+	 * 		}
 	 *
-	 * <p>
-	 * Adds multiple default request attributes.
+	 * 		<jc>// Override at the method level.</jc>
+	 * 		<ja>@RestGet</ja>(defaultRequestAttributes={<js>"Foo: bar"</js>})
+	 * 		<jk>public</jk> Object myMethod() {...}
+	 * 	}
+	 * </p>
 	 *
-	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
+	 * <ul class='notes'>
+	 * 	<li>Use {@link BasicNamedAttribute#of(String, Supplier)} to provide a dynamically changeable attribute value.
 	 * </ul>
 	 *
 	 * @param values The attributes.
@@ -1310,7 +1308,7 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
 	 */
 	@FluentSetter
 	public RestContextBuilder defaultRequestAttributes(NamedAttribute...values) {
-		asList(values).stream().forEach(x -> appendTo(REST_defaultRequestAttributes, x));
+		defaultRequestAttributes.appendUnique(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 bcb8f8a..ae9819f 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
@@ -524,6 +524,26 @@ public @interface Rest {
 	 * <p>
 	 * Specifies default values for request attributes if they're not already set on the request.
 	 *
+	 * <p>
+	 * Affects values returned by the following methods:
+	 * 	<ul>
+	 * 		<li class='jm'>{@link RestRequest#getAttribute(String)}.
+	 * 		<li class='jm'>{@link RestRequest#getAttributes()}.
+	 * 	</ul>
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Defined via annotation resolving to a config file setting with default value.</jc>
+	 * 	<ja>@Rest</ja>(defaultRequestAttributes={<js>"Foo=bar"</js>, <js>"Baz: $C{REST/myAttributeValue}"</js>})
+	 * 	<jk>public class</jk> MyResource {
+	 *
+	 * 		<jc>// Override at the method level.</jc>
+	 * 		<ja>@RestGet</ja>(defaultRequestAttributes={<js>"Foo: bar"</js>})
+	 * 		<jk>public</jk> Object myMethod() {...}
+	 * 	}
+	 * </p>
+	 *
+	 * </ul>
 	 * <ul class='notes'>
 	 * 	<li>
 	 * 		Supports {@doc RestSvlVariables}
@@ -531,7 +551,12 @@ public @interface Rest {
 	 * </ul>
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
+	 * 	<li class='jm'>{@link RestContextBuilder#defaultRequestAttributes(NamedAttribute...)}
+	 * 	<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>
 	 */
 	String[] defaultRequestAttributes() 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 8c5e27a..d50e2af 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
@@ -1045,7 +1045,7 @@ public class RestAnnotation {
 			b.setIf(a.partParser() != HttpPartParser.Null.class, REST_partParser, a.partParser());
 			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.appendTo(REST_defaultRequestAttributes, 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())));
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 7abb5f1..1f230c1 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
@@ -207,21 +207,35 @@ public @interface RestDelete {
 	 * <p>
 	 * Specifies default values for request attributes if they're not already set on the request.
 	 *
+	 * <p>
+	 * Affects values returned by the following methods:
+	 * 	<ul>
+	 * 		<li class='jm'>{@link RestRequest#getAttribute(String)}.
+	 * 		<li class='jm'>{@link RestRequest#getAttributes()}.
+	 * 	</ul>
+	 *
 	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode w800'>
-	 * 	<jc>// Assume "text/json" Accept value when Accept not specified</jc>
-	 * 	<ja>@RestDelete</ja>(path=<js>"/*"</js>, defaultRequestAttributes={<js>"Foo: bar"</js>})
-	 * 	<jk>public</jk> String doDelete()  {...}
+	 * 	<jc>// Defined via annotation resolving to a config file setting with default value.</jc>
+	 * 	<ja>@Rest</ja>(defaultRequestAttributes={<js>"Foo=bar"</js>, <js>"Baz: $C{REST/myAttributeValue}"</js>})
+	 * 	<jk>public class</jk> MyResource {
+	 *
+	 * 		<jc>// Override at the method level.</jc>
+	 * 		<ja>@RestGet</ja>(defaultRequestAttributes={<js>"Foo: bar"</js>})
+	 * 		<jk>public</jk> Object myMethod() {...}
+	 * 	}
 	 * </p>
 	 *
+	 * </ul>
 	 * <ul class='notes'>
 	 * 	<li>
 	 * 		Supports {@doc RestSvlVariables}
-	 * 		(e.g. <js>"$S{mySystemProperty}"</js>).
+	 * 		(e.g. <js>"$L{my.localized.variable}"</js>).
 	 * </ul>
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
+	 * 	<li class='jm'>{@link RestContextBuilder#defaultRequestAttributes(NamedAttribute...)}
+	 * 	<li class='ja'>{@link Rest#defaultRequestAttributes()}
 	 * </ul>
 	 */
 	String[] defaultRequestAttributes() default {};
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 ffa3f2a..6c87023 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
@@ -222,21 +222,35 @@ public @interface RestGet {
 	 * <p>
 	 * Specifies default values for request attributes if they're not already set on the request.
 	 *
+	 * <p>
+	 * Affects values returned by the following methods:
+	 * 	<ul>
+	 * 		<li class='jm'>{@link RestRequest#getAttribute(String)}.
+	 * 		<li class='jm'>{@link RestRequest#getAttributes()}.
+	 * 	</ul>
+	 *
 	 * <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>})
-	 * 	<jk>public</jk> String doGet()  {...}
+	 * 	<jc>// Defined via annotation resolving to a config file setting with default value.</jc>
+	 * 	<ja>@Rest</ja>(defaultRequestAttributes={<js>"Foo=bar"</js>, <js>"Baz: $C{REST/myAttributeValue}"</js>})
+	 * 	<jk>public class</jk> MyResource {
+	 *
+	 * 		<jc>// Override at the method level.</jc>
+	 * 		<ja>@RestGet</ja>(defaultRequestAttributes={<js>"Foo: bar"</js>})
+	 * 		<jk>public</jk> Object myMethod() {...}
+	 * 	}
 	 * </p>
 	 *
+	 * </ul>
 	 * <ul class='notes'>
 	 * 	<li>
 	 * 		Supports {@doc RestSvlVariables}
-	 * 		(e.g. <js>"$S{mySystemProperty}"</js>).
+	 * 		(e.g. <js>"$L{my.localized.variable}"</js>).
 	 * </ul>
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
+	 * 	<li class='jm'>{@link RestContextBuilder#defaultRequestAttributes(NamedAttribute...)}
+	 * 	<li class='ja'>{@link Rest#defaultRequestAttributes()}
 	 * </ul>
 	 */
 	String[] defaultRequestAttributes() default {};
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 9d04e3d..be19d0b 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
@@ -277,21 +277,35 @@ public @interface RestOp {
 	 * <p>
 	 * Specifies default values for request attributes if they're not already set on the request.
 	 *
+	 * <p>
+	 * Affects values returned by the following methods:
+	 * 	<ul>
+	 * 		<li class='jm'>{@link RestRequest#getAttribute(String)}.
+	 * 		<li class='jm'>{@link RestRequest#getAttributes()}.
+	 * 	</ul>
+	 *
 	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode w800'>
-	 * 	<jc>// Assume "text/json" Accept value when Accept not specified</jc>
-	 * 	<ja>@RestOp</ja>(method=<jsf>GET</jsf>, path=<js>"/*"</js>, defaultRequestAttributes={<js>"Foo: bar"</js>})
-	 * 	<jk>public</jk> String doGet()  {...}
+	 * 	<jc>// Defined via annotation resolving to a config file setting with default value.</jc>
+	 * 	<ja>@Rest</ja>(defaultRequestAttributes={<js>"Foo=bar"</js>, <js>"Baz: $C{REST/myAttributeValue}"</js>})
+	 * 	<jk>public class</jk> MyResource {
+	 *
+	 * 		<jc>// Override at the method level.</jc>
+	 * 		<ja>@RestGet</ja>(defaultRequestAttributes={<js>"Foo: bar"</js>})
+	 * 		<jk>public</jk> Object myMethod() {...}
+	 * 	}
 	 * </p>
 	 *
+	 * </ul>
 	 * <ul class='notes'>
 	 * 	<li>
 	 * 		Supports {@doc RestSvlVariables}
-	 * 		(e.g. <js>"$S{mySystemProperty}"</js>).
+	 * 		(e.g. <js>"$L{my.localized.variable}"</js>).
 	 * </ul>
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
+	 * 	<li class='jm'>{@link RestContextBuilder#defaultRequestAttributes(NamedAttribute...)}
+	 * 	<li class='ja'>{@link Rest#defaultRequestAttributes()}
 	 * </ul>
 	 */
 	String[] defaultRequestAttributes() default {};
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 8a2d8ea..aa53e3c 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
@@ -279,21 +279,35 @@ public @interface RestPost {
 	 * <p>
 	 * Specifies default values for request attributes if they're not already set on the request.
 	 *
+	 * <p>
+	 * Affects values returned by the following methods:
+	 * 	<ul>
+	 * 		<li class='jm'>{@link RestRequest#getAttribute(String)}.
+	 * 		<li class='jm'>{@link RestRequest#getAttributes()}.
+	 * 	</ul>
+	 *
 	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode w800'>
-	 * 	<jc>// Assume "text/json" Accept value when Accept not specified</jc>
-	 * 	<ja>@RestPost</ja>(path=<js>"/*"</js>, defaultRequestAttributes={<js>"Foo: bar"</js>})
-	 * 	<jk>public</jk> String doPost()  {...}
+	 * 	<jc>// Defined via annotation resolving to a config file setting with default value.</jc>
+	 * 	<ja>@Rest</ja>(defaultRequestAttributes={<js>"Foo=bar"</js>, <js>"Baz: $C{REST/myAttributeValue}"</js>})
+	 * 	<jk>public class</jk> MyResource {
+	 *
+	 * 		<jc>// Override at the method level.</jc>
+	 * 		<ja>@RestGet</ja>(defaultRequestAttributes={<js>"Foo: bar"</js>})
+	 * 		<jk>public</jk> Object myMethod() {...}
+	 * 	}
 	 * </p>
 	 *
+	 * </ul>
 	 * <ul class='notes'>
 	 * 	<li>
 	 * 		Supports {@doc RestSvlVariables}
-	 * 		(e.g. <js>"$S{mySystemProperty}"</js>).
+	 * 		(e.g. <js>"$L{my.localized.variable}"</js>).
 	 * </ul>
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
+	 * 	<li class='jm'>{@link RestContextBuilder#defaultRequestAttributes(NamedAttribute...)}
+	 * 	<li class='ja'>{@link Rest#defaultRequestAttributes()}
 	 * </ul>
 	 */
 	String[] defaultRequestAttributes() default {};
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 ee284df..f799e79 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
@@ -279,21 +279,35 @@ public @interface RestPut {
 	 * <p>
 	 * Specifies default values for request attributes if they're not already set on the request.
 	 *
+	 * <p>
+	 * Affects values returned by the following methods:
+	 * 	<ul>
+	 * 		<li class='jm'>{@link RestRequest#getAttribute(String)}.
+	 * 		<li class='jm'>{@link RestRequest#getAttributes()}.
+	 * 	</ul>
+	 *
 	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode w800'>
-	 * 	<jc>// Assume "text/json" Accept value when Accept not specified</jc>
-	 * 	<ja>@RestPut</ja>(path=<js>"/*"</js>, defaultRequestAttributes={<js>"Foo: bar"</js>})
-	 * 	<jk>public</jk> String doPut()  {...}
+	 * 	<jc>// Defined via annotation resolving to a config file setting with default value.</jc>
+	 * 	<ja>@Rest</ja>(defaultRequestAttributes={<js>"Foo=bar"</js>, <js>"Baz: $C{REST/myAttributeValue}"</js>})
+	 * 	<jk>public class</jk> MyResource {
+	 *
+	 * 		<jc>// Override at the method level.</jc>
+	 * 		<ja>@RestGet</ja>(defaultRequestAttributes={<js>"Foo: bar"</js>})
+	 * 		<jk>public</jk> Object myMethod() {...}
+	 * 	}
 	 * </p>
 	 *
+	 * </ul>
 	 * <ul class='notes'>
 	 * 	<li>
 	 * 		Supports {@doc RestSvlVariables}
-	 * 		(e.g. <js>"$S{mySystemProperty}"</js>).
+	 * 		(e.g. <js>"$L{my.localized.variable}"</js>).
 	 * </ul>
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
+	 * 	<li class='jm'>{@link RestContextBuilder#defaultRequestAttributes(NamedAttribute...)}
+	 * 	<li class='ja'>{@link Rest#defaultRequestAttributes()}
 	 * </ul>
 	 */
 	String[] defaultRequestAttributes() default {};