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

commit 182b1eb65943145872e10664ec7a6ed26fcae9ab
Author: JamesBognar <[email protected]>
AuthorDate: Wed Sep 22 10:56:11 2021 -0400

    Context API refactoring.
---
 .../org/apache/juneau/rest/NamedAttributeList.java | 153 +++--
 .../org/apache/juneau/rest/RequestAttributes.java  |  17 +
 .../java/org/apache/juneau/rest/RestContext.java   |   2 +-
 .../org/apache/juneau/rest/RestContextBuilder.java |  27 +-
 .../java/org/apache/juneau/rest/RestOpContext.java | 216 +-----
 .../apache/juneau/rest/RestOpContextBuilder.java   | 727 ++++++++++++++++-----
 .../java/org/apache/juneau/rest/RestRequest.java   |   2 +-
 .../apache/juneau/rest/annotation/RestDelete.java  |   4 +-
 .../rest/annotation/RestDeleteAnnotation.java      |  26 +-
 .../org/apache/juneau/rest/annotation/RestGet.java |   4 +-
 .../juneau/rest/annotation/RestGetAnnotation.java  |  26 +-
 .../org/apache/juneau/rest/annotation/RestOp.java  |   8 +-
 .../juneau/rest/annotation/RestOpAnnotation.java   |  42 +-
 .../apache/juneau/rest/annotation/RestPost.java    |   8 +-
 .../juneau/rest/annotation/RestPostAnnotation.java |  42 +-
 .../org/apache/juneau/rest/annotation/RestPut.java |   8 +-
 .../juneau/rest/annotation/RestPutAnnotation.java  |  42 +-
 .../juneau/rest/annotation/FormData_Test.java      |   4 +-
 .../apache/juneau/rest/annotation/Query_Test.java  |   4 +-
 .../rest/annotation/RestDeleteAnnotation_Test.java |  10 +-
 .../rest/annotation/RestGetAnnotation_Test.java    |  10 +-
 .../rest/annotation/RestOpAnnotation_Test.java     |  20 +-
 .../rest/annotation/RestPostAnnotation_Test.java   |  20 +-
 .../rest/annotation/RestPutAnnotation_Test.java    |  20 +-
 24 files changed, 868 insertions(+), 574 deletions(-)

diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/NamedAttributeList.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/NamedAttributeList.java
index ce0a073..673b926 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/NamedAttributeList.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/NamedAttributeList.java
@@ -14,23 +14,25 @@ package org.apache.juneau.rest;
 
 import java.util.*;
 
-import org.apache.juneau.collections.*;
+import org.apache.juneau.*;
+import org.apache.juneau.cp.*;
 
 /**
  * A list of {@link NamedAttribute} objects.
  */
-public class NamedAttributeList extends AList<NamedAttribute> {
+public class NamedAttributeList {
 
-       private static final long serialVersionUID = 1L;
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Static
+       
//-----------------------------------------------------------------------------------------------------------------
 
        /**
         * Static creator.
         *
         * @return An empty list.
         */
-       @SuppressWarnings("unchecked")
-       public static NamedAttributeList create() {
-               return new NamedAttributeList();
+       public static Builder create() {
+               return new Builder();
        }
 
        /**
@@ -40,67 +42,114 @@ public class NamedAttributeList extends 
AList<NamedAttribute> {
         * @return An empty list.
         */
        public static NamedAttributeList of(NamedAttribute...values) {
-               NamedAttributeList l = new NamedAttributeList();
-               l.a(values);
-               return l;
+               return create().add(values).build();
        }
 
-       /**
-        * Returns a copy of this list.
-        *
-        * @return A new copy of this list.
-        */
-       public NamedAttributeList copy() {
-               return NamedAttributeList.of(asArray());
-       }
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Builder
+       
//-----------------------------------------------------------------------------------------------------------------
 
        /**
-        * Appends or replaces the named attribute values in this list.
-        *
-        * <p>
-        * If the named attribute already exists in this list, it will be 
replaced with the new value.
-        * Otherwise it will be appended to the end of this list.
-        *
-        * @param values The values to append or replace in this list.
-        * @return This object (for method chaining).
+        * Builder class.
         */
-       public NamedAttributeList appendUnique(List<NamedAttribute> values) {
-               for (NamedAttribute h : values) {
-                       boolean replaced = false;
-                       for (ListIterator<NamedAttribute> li = listIterator(); 
li.hasNext();) {
-                               NamedAttribute h2 = li.next();
-                               if (h2.getName().equalsIgnoreCase(h.getName())) 
{
-                                       li.set(h);
-                                       replaced = true;
-                                       break;
-                               }
-                       }
-                       if (! replaced)
-                               add(h);
+       public static class Builder extends BeanBuilder<NamedAttributeList> {
+
+               LinkedHashMap<String,NamedAttribute> entries;
+
+               /**
+                * Constructor.
+                */
+               protected Builder() {
+                       super(NamedAttributeList.class);
+                       entries = new LinkedHashMap<>();
+               }
+
+               /**
+                * Copy constructor.
+                *
+                * @param copyFrom The builder being copied.
+                */
+               protected Builder(Builder copyFrom) {
+                       super(copyFrom);
+                       entries = new LinkedHashMap<>(copyFrom.entries);
+               }
+
+               @Override /* BeanBuilder */
+               protected NamedAttributeList buildDefault() {
+                       return new NamedAttributeList(this);
+               }
+
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
+               }
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
+               /**
+                * Appends the specified rest matcher classes to the list.
+                *
+                * @param values The values to add.
+                * @return This object (for method chaining).
+                */
+               public Builder add(NamedAttribute...values) {
+                       for (NamedAttribute v : values)
+                               entries.put(v.getName(), v);
+                       return this;
+               }
+
+               // <FluentSetters>
+
+               @Override /* BeanBuilder */
+               public Builder type(Class<? extends NamedAttributeList> value) {
+                       super.type(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
+               public Builder impl(NamedAttributeList value) {
+                       super.impl(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
+               public Builder outer(Object value) {
+                       super.outer(value);
+                       return this;
                }
-               return this;
+
+               @Override /* BeanBuilder */
+               public Builder beanStore(BeanStore value) {
+                       super.beanStore(value);
+                       return this;
+               }
+
+               // </FluentSetters>
        }
 
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Instance
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       final NamedAttribute[] entries;
+
        /**
-        * Appends or replaces the named attribute values in this list.
-        *
-        * <p>
-        * If the named attribute already exists in this list, it will be 
replaced with the new value.
-        * Otherwise it will be appended to the end of this list.
+        * Constructor.
         *
-        * @param values The values to append or replace in this list.
-        * @return This object (for method chaining).
+        * @param b The builder of this object.
         */
-       public NamedAttributeList appendUnique(NamedAttribute...values) {
-               return appendUnique(Arrays.asList(values));
+       public NamedAttributeList(Builder b) {
+               entries = b.entries.values().toArray(new 
NamedAttribute[b.entries.size()]);
        }
 
        /**
-        * Returns the contents of this list as a {@link NamedAttribute} array.
+        * Returns a copy of this list.
         *
-        * @return The contents of this list as a {@link NamedAttribute} array.
+        * @return A new copy of this list.
         */
-       public NamedAttribute[] asArray() {
-               return asArrayOf(NamedAttribute.class);
+       public Builder copy() {
+               return copy().add(entries);
        }
 }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestAttributes.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestAttributes.java
index 55d0d98..d2050f0 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestAttributes.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestAttributes.java
@@ -69,6 +69,23 @@ public class RequestAttributes {
         *      <br>Can be <jk>null</jk>.
         * @return This object (for method chaining).
         */
+       public RequestAttributes addDefault(NamedAttributeList pairs) {
+               for (NamedAttribute p : pairs.entries)
+                       if (sreq.getAttribute(p.getName()) == null) {
+                               Object o = p.getValue();
+                               sreq.setAttribute(p.getName(), o instanceof 
String ? vs.resolve(o) : o);
+                       }
+               return this;
+       }
+
+       /**
+        * Adds default entries to the request attributes.
+        *
+        * @param pairs
+        *      The default entries.
+        *      <br>Can be <jk>null</jk>.
+        * @return This object (for method chaining).
+        */
        public RequestAttributes addDefault(NamedAttribute...pairs) {
                return addDefault(Arrays.asList(pairs));
        }
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 dba45c7..dee62ed 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
@@ -296,7 +296,7 @@ public class RestContext extends Context {
                        staticFiles = bs.add(StaticFiles.class, 
builder.staticFiles().build());
                        defaultRequestHeaders = 
bs.add("RestContext.defaultRequestHeaders", 
builder.defaultRequestHeaders().build());
                        defaultResponseHeaders = 
bs.add("RestContext.defaultResponseHeaders", 
builder.defaultResponseHeaders().build());
-                       defaultRequestAttributes = 
bs.add("RestContext.defaultRequestAttributes", 
builder.defaultRequestAttributes());
+                       defaultRequestAttributes = 
bs.add("RestContext.defaultRequestAttributes", 
builder.defaultRequestAttributes().build());
                        restOpArgs = builder.restOpArgs().build().asArray();
                        hookMethodArgs = 
builder.hookMethodArgs().build().asArray();
                        debugEnablement = builder.debugEnablement().build();
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 b98b3fc..3108a8d 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
@@ -141,7 +141,7 @@ public class RestContextBuilder extends ContextBuilder 
implements ServletConfig
        private FileFinder.Builder fileFinder;
        private StaticFiles.Builder staticFiles;
        private HeaderList.Builder defaultRequestHeaders, 
defaultResponseHeaders;
-       private NamedAttributeList defaultRequestAttributes;
+       private NamedAttributeList.Builder defaultRequestAttributes;
        private RestOpArgList.Builder restOpArgs, hookMethodArgs;
        private DebugEnablement.Builder debugEnablement;
        private MethodList startCallMethods, endCallMethods, postInitMethods, 
postInitChildFirstMethods, destroyMethods, preCallMethods, postCallMethods;
@@ -2676,7 +2676,7 @@ public class RestContextBuilder extends ContextBuilder 
implements ServletConfig
         *
         * @return The builder for the default request attributer object in the 
REST context.
         */
-       public final NamedAttributeList defaultRequestAttributes() {
+       public final NamedAttributeList.Builder defaultRequestAttributes() {
                if (defaultRequestAttributes == null)
                        defaultRequestAttributes = 
createDefaultRequestAttributes(beanStore(), resource());
                return defaultRequestAttributes;
@@ -2732,7 +2732,7 @@ public class RestContextBuilder extends ContextBuilder 
implements ServletConfig
         */
        @FluentSetter
        public RestContextBuilder 
defaultRequestAttributes(NamedAttribute...values) {
-               defaultRequestAttributes().appendUnique(values);
+               defaultRequestAttributes().add(values);
                return this;
        }
 
@@ -2745,25 +2745,36 @@ public class RestContextBuilder extends ContextBuilder 
implements ServletConfig
         *      The REST servlet/bean instance that this context is defined 
against.
         * @return The default response headers for this REST object.
         */
-       protected NamedAttributeList createDefaultRequestAttributes(BeanStore 
beanStore, Supplier<?> resource) {
+       protected NamedAttributeList.Builder 
createDefaultRequestAttributes(BeanStore beanStore, Supplier<?> resource) {
 
                // Default value.
-               Value<NamedAttributeList> v = Value.of(
+               Value<NamedAttributeList.Builder> v = Value.of(
                        NamedAttributeList.create()
                );
 
                // Replace with bean from bean store.
                beanStore
-                       .getBean("RestContext.defaultRequestAttributes", 
NamedAttributeList.class)
+                       .getBean("RestContext.defaultRequestAttributes", 
NamedAttributeList.Builder.class)
                        .map(x -> x.copy())
                        .ifPresent(x -> v.set(x));
 
+               beanStore
+                       .getBean("RestContext.defaultRequestAttributes", 
NamedAttributeList.class)
+                       .ifPresent(x -> v.get().impl(x));
+
+               // Replace with bean from:  public [static] 
NamedAttributeList.Builder createDefaultRequestAttributes(<args>)
+               beanStore
+                       
.beanCreateMethodFinder(NamedAttributeList.Builder.class)
+                       .addBean(NamedAttributeList.Builder.class, v.get())
+                       .find("createDefaultRequestAttributes")
+                       .run(x -> v.set(x));
+
                // Replace with bean from:  public [static] NamedAttributeList 
createDefaultRequestAttributes(<args>)
                beanStore
                        .beanCreateMethodFinder(NamedAttributeList.class)
-                       .addBean(NamedAttributeList.class, v.get())
+                       .addBean(NamedAttributeList.Builder.class, v.get())
                        .find("createDefaultRequestAttributes")
-                       .run(x -> v.set(x));
+                       .run(x -> v.get().impl(x));
 
                return v.get();
        }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
index 612cf85..d85dec3 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
@@ -16,15 +16,10 @@ import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.ExceptionUtils.*;
 import static org.apache.juneau.internal.ObjectUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.internal.StringUtils.firstNonEmpty;
-import static org.apache.juneau.http.HttpHeaders.*;
 import static org.apache.juneau.httppart.HttpPartType.*;
-import static org.apache.juneau.rest.util.RestUtils.*;
 import static org.apache.juneau.rest.HttpRuntimeException.*;
 import static java.util.Collections.*;
-import static org.apache.juneau.http.HttpParts.*;
 import static java.util.Optional.*;
-import java.lang.annotation.*;
 import java.lang.reflect.Method;
 import java.nio.charset.*;
 import java.util.*;
@@ -34,14 +29,12 @@ import javax.servlet.*;
 import javax.servlet.http.*;
 
 import org.apache.http.*;
-import org.apache.http.ParseException;
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.cp.*;
 import org.apache.juneau.encoders.*;
 import org.apache.juneau.http.annotation.*;
-import org.apache.juneau.http.annotation.Header;
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.http.part.*;
 import org.apache.juneau.httppart.*;
@@ -90,8 +83,8 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
        private final HttpPartParser partParser;
        private final JsonSchemaGenerator jsonSchemaGenerator;
        private final HeaderList defaultRequestHeaders, defaultResponseHeaders;
-       private final PartList defaultRequestQuery, defaultRequestFormData;
-       private final List<NamedAttribute> defaultRequestAttributes;
+       private final PartList defaultRequestQueryData, defaultRequestFormData;
+       private final NamedAttributeList defaultRequestAttributes;
        private final Charset defaultCharset;
        private final long maxInput;
        private final List<MediaType>
@@ -165,11 +158,11 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                        supportedAcceptTypes = 
unmodifiableList(ofNullable(builder.produces).orElse(serializers.getSupportedMediaTypes()));
                        supportedContentTypes = 
unmodifiableList(ofNullable(builder.consumes).orElse(parsers.getSupportedMediaTypes()));
 
-                       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));
+                       defaultRequestHeaders = 
builder.defaultRequestHeaders().build();
+                       defaultResponseHeaders = 
builder.defaultResponseHeaders().build();
+                       defaultRequestQueryData = 
builder.defaultRequestQueryData().build();
+                       defaultRequestFormData = 
builder.defaultRequestFormData().build();
+                       defaultRequestAttributes = 
builder.defaultRequestAttributes().build();
 
                        int _hierarchyDepth = 0;
                        Class<?> sc = 
method.getDeclaringClass().getSuperclass();
@@ -194,8 +187,6 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                        opArgs = context.findRestOperationArgs(mi.inner(), bs);
 
                        this.callLogger = context.getCallLogger();
-               } catch (ServletException e) {
-                       throw e;
                } catch (Exception e) {
                        throw new ServletException(e);
                }
@@ -211,184 +202,6 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
        }
 
        /**
-        * Instantiates the default request headers for this method.
-        *
-        * @param resource The REST resource object.
-        * @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 HeaderList.Builder createDefaultRequestHeaders(Object 
resource, RestOpContextBuilder builder, BeanStore beanStore, Method method, 
RestContext context) throws Exception {
-
-               HeaderList.Builder x = 
HeaderList.create().setDefault(context.getDefaultRequestHeaders()).setDefault(builder.defaultRequestHeaders.build());
-
-               for (Annotation[] aa : method.getParameterAnnotations()) {
-                       for (Annotation a : aa) {
-                               if (a instanceof Header) {
-                                       Header h = (Header)a;
-                                       String def = 
joinnlFirstNonEmptyArray(h._default(), h.df());
-                                       if (def != null) {
-                                               try {
-                                                       
x.set(basicHeader(firstNonEmpty(h.name(), h.n(), h.value()), 
parseAnything(def)));
-                                               } catch (ParseException e) {
-                                                       throw new 
ConfigException(e, "Malformed @Header annotation");
-                                               }
-                                       }
-                               }
-                       }
-               }
-
-               x = BeanStore
-                       .of(beanStore, resource)
-                       .addBean(HeaderList.Builder.class, x)
-                       .createMethodFinder(HeaderList.Builder.class, resource)
-                       .find("createDefaultRequestHeaders", Method.class)
-                       .withDefault(x)
-                       .run();
-
-               return x;
-       }
-
-       /**
-        * Instantiates the default request headers for this method.
-        *
-        * @param resource The REST resource object.
-        * @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 HeaderList.Builder createDefaultResponseHeaders(Object 
resource, RestOpContextBuilder builder, BeanStore beanStore, Method method, 
RestContext context) throws Exception {
-
-               HeaderList.Builder x = 
HeaderList.create().setDefault(context.getDefaultResponseHeaders()).setDefault(builder.defaultResponseHeaders.build());
-
-               x = BeanStore
-                       .of(beanStore, resource)
-                       .addBean(HeaderList.Builder.class, x)
-                       .createMethodFinder(HeaderList.Builder.class, resource)
-                       .find("createDefaultResponseHeaders", Method.class)
-                       .withDefault(x)
-                       .run();
-
-               return x;
-       }
-
-       /**
-        * Instantiates the default request attributes for this method.
-        *
-        * @param resource The REST resource object.
-        * @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 attributes for this method.
-        * @throws Exception If default request headers could not be 
instantiated.
-        */
-       protected NamedAttributeList createDefaultRequestAttributes(Object 
resource, RestOpContextBuilder builder, BeanStore beanStore, Method method, 
RestContext context) throws Exception {
-
-               NamedAttributeList x = 
context.getDefaultRequestAttributes().copy().appendUnique(builder.defaultRequestAttributes);
-
-               x = BeanStore
-                       .of(beanStore, resource)
-                       .addBean(NamedAttributeList.class, x)
-                       .createMethodFinder(NamedAttributeList.class, resource)
-                       .find("createDefaultRequestAttributes", Method.class)
-                       .withDefault(x)
-                       .run();
-
-               return x;
-       }
-
-       /**
-        * Instantiates the default query parameters for this method.
-        *
-        * @param resource The REST resource object.
-        * @param builder The builder for this object.
-        * @param beanStore The bean store to use for retrieving and creating 
beans.
-        * @param method This Java method.
-        * @return The default request query parameters for this method.
-        * @throws Exception If default request query parameters could not be 
instantiated.
-        */
-       protected PartList.Builder createDefaultRequestQuery(Object resource, 
RestOpContextBuilder builder, BeanStore beanStore, Method method) throws 
Exception {
-
-               PartList.Builder x = builder.defaultQueryData;
-
-               for (Annotation[] aa : method.getParameterAnnotations()) {
-                       for (Annotation a : aa) {
-                               if (a instanceof Query) {
-                                       Query h = (Query)a;
-                                       String def = 
joinnlFirstNonEmptyArray(h._default(), h.df());
-                                       if (def != null) {
-                                               try {
-                                                       
x.setDefault(basicPart(firstNonEmpty(h.name(), h.n(), h.value()), 
parseAnything(def)));
-                                               } catch (ParseException e) {
-                                                       throw new 
ConfigException(e, "Malformed @Query annotation");
-                                               }
-                                       }
-                               }
-                       }
-               }
-
-               x = BeanStore
-                       .of(beanStore, resource)
-                       .addBean(PartList.Builder.class, x)
-                       .createMethodFinder(PartList.Builder.class, resource)
-                       .find("createDefaultRequestQuery", Method.class)
-                       .thenFind("createDefaultRequestQuery")
-                       .withDefault(x)
-                       .run();
-
-               return x;
-       }
-
-       /**
-        * Instantiates the default form-data parameters for this method.
-        *
-        * @param resource The REST resource object.
-        * @param builder The builder for this object.
-        * @param beanStore The bean store to use for retrieving and creating 
beans.
-        * @param method This Java method.
-        * @return The default request form-data parameters for this method.
-        * @throws Exception If default request form-data parameters could not 
be instantiated.
-        */
-       protected PartList.Builder createDefaultRequestFormData(Object 
resource, RestOpContextBuilder builder, BeanStore beanStore, Method method) 
throws Exception {
-
-               PartList.Builder x = builder.defaultFormData;
-
-               for (Annotation[] aa : method.getParameterAnnotations()) {
-                       for (Annotation a : aa) {
-                               if (a instanceof FormData) {
-                                       FormData h = (FormData)a;
-                                       String def = 
joinnlFirstNonEmptyArray(h._default(), h.df());
-                                       if (def != null) {
-                                               try {
-                                                       
x.setDefault(basicPart(firstNonEmpty(h.name(), h.n(), h.value()), 
parseAnything(def)));
-                                               } catch (ParseException e) {
-                                                       throw new 
ConfigException(e, "Malformed @FormData annotation");
-                                               }
-                                       }
-                               }
-                       }
-               }
-
-               x = BeanStore
-                       .of(beanStore, resource)
-                       .addBean(PartList.Builder.class, x)
-                       .createMethodFinder(PartList.Builder.class, resource)
-                       .find("createDefaultRequestFormData", Method.class)
-                       .thenFind("createDefaultRequestFormData")
-                       .withDefault(x)
-                       .run();
-
-               return x;
-       }
-
-       /**
         * Returns metadata about the specified response object if it's 
annotated with {@link Response @Response}.
         *
         * @param o The response POJO.
@@ -568,8 +381,8 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
         *
         * @return The default request query parameters.  Never <jk>null</jk>.
         */
-       public PartList getDefaultRequestQuery() {
-               return defaultRequestQuery;
+       public PartList getDefaultRequestQueryData() {
+               return defaultRequestQueryData;
        }
 
        /**
@@ -586,7 +399,7 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
         *
         * @return The default request attributes.  Never <jk>null</jk>.
         */
-       public List<NamedAttribute> getDefaultRequestAttributes() {
+       public NamedAttributeList getDefaultRequestAttributes() {
                return defaultRequestAttributes;
        }
 
@@ -861,7 +674,7 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                                .filtered()
                                .a("defaultRequestFormData", 
defaultRequestFormData)
                                .a("defaultRequestHeaders", 
defaultRequestHeaders)
-                               .a("defaultRequestQuery", defaultRequestQuery)
+                               .a("defaultRequestQueryData", 
defaultRequestQueryData)
                                .a("httpMethod", httpMethod)
                        );
        }
@@ -875,13 +688,6 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                return hps == null ? _default : hps;
        }
 
-       private String joinnlFirstNonEmptyArray(String[]...s) {
-               for (String[] ss : s)
-                       if (ss.length > 0)
-                               return joinnl(ss);
-               return null;
-       }
-
        private UrlPathMatch matchPattern(RestCall call) {
                UrlPathMatch pm = null;
                for (UrlPathMatcher pp : pathMatchers)
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContextBuilder.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContextBuilder.java
index 4d67c3d..f2a0cf5 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContextBuilder.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContextBuilder.java
@@ -13,19 +13,24 @@
 package org.apache.juneau.rest;
 
 import static java.util.Arrays.*;
+import static org.apache.juneau.http.HttpHeaders.*;
+import static org.apache.juneau.http.HttpParts.*;
 import static org.apache.juneau.internal.ExceptionUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.rest.HttpRuntimeException.*;
+import static org.apache.juneau.rest.util.RestUtils.*;
 import static java.util.Optional.*;
 
 import java.lang.annotation.*;
 import java.util.*;
 import java.util.function.*;
 
-import org.apache.http.*;
 import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.cp.*;
 import org.apache.juneau.encoders.*;
+import org.apache.juneau.http.annotation.*;
+import org.apache.juneau.http.annotation.Header;
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.http.part.*;
 import org.apache.juneau.http.remote.*;
@@ -34,6 +39,7 @@ import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.jsonschema.*;
 import org.apache.juneau.parser.*;
+import org.apache.juneau.parser.ParseException;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.converters.*;
@@ -69,8 +75,8 @@ public class RestOpContextBuilder extends ContextBuilder {
        private RestMatcherList.Builder matchers;
        private JsonSchemaGeneratorBuilder jsonSchemaGenerator;
 
-       PartList.Builder defaultFormData, defaultQueryData;
-       NamedAttributeList defaultRequestAttributes;
+       PartList.Builder defaultRequestFormData, defaultRequestQueryData;
+       NamedAttributeList.Builder defaultRequestAttributes;
        HeaderList.Builder defaultRequestHeaders, defaultResponseHeaders;
        RestMatcherList.Builder restMatchers;
        List<MediaType> produces, consumes;
@@ -114,13 +120,6 @@ public class RestOpContextBuilder extends ContextBuilder {
                        .of(context.getRootBeanStore(), 
context.builder.resource().get())
                        .addBean(java.lang.reflect.Method.class, method);
 
-               this.defaultFormData = PartList.create();
-               this.defaultQueryData = PartList.create();
-               this.defaultRequestAttributes = NamedAttributeList.create();
-               this.defaultRequestHeaders = HeaderList.create();
-               this.defaultResponseHeaders = HeaderList.create();
-               this.restMatchers = RestMatcherList.create();
-
                MethodInfo mi = MethodInfo.of(context.getResourceClass(), 
method);
 
                try {
@@ -144,6 +143,8 @@ public class RestOpContextBuilder extends ContextBuilder {
                        if (context.builder.jsonSchemaGenerator().canApply(al))
                                jsonSchemaGenerator().apply(al);
 
+                       processParameterAnnotations();
+
                } catch (Exception e) {
                        throw toHttpException(e, InternalServerError.class);
                }
@@ -227,6 +228,20 @@ public class RestOpContextBuilder extends ContextBuilder {
                        parent.beanContext().copy()
                );
 
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(BeanContextBuilder.class, v.get())
+                       .createMethodFinder(BeanContextBuilder.class, resource)
+                       .find("createBeanContext", Method.class)
+                       .run(x -> v.set(x));
+
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(BeanContextBuilder.class, v.get())
+                       .createMethodFinder(BeanContext.class, resource)
+                       .find("createBeanContext", Method.class)
+                       .run(x -> v.get().impl(x));
+
                return v.get();
        }
 
@@ -267,6 +282,20 @@ public class RestOpContextBuilder extends ContextBuilder {
                        parent.encoders().copy()
                );
 
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(EncoderGroup.Builder.class, v.get())
+                       .createMethodFinder(EncoderGroup.Builder.class, 
resource)
+                       .find("createEncoders", Method.class)
+                       .run(x -> v.set(x));
+
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(EncoderGroup.Builder.class, v.get())
+                       .createMethodFinder(EncoderGroup.class, resource)
+                       .find("createEncoders", Method.class)
+                       .run(x -> v.get().impl(x));
+
                return v.get();
        }
 
@@ -307,6 +336,20 @@ public class RestOpContextBuilder extends ContextBuilder {
                        parent.serializers().copy()
                );
 
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(SerializerGroup.Builder.class, v.get())
+                       .createMethodFinder(SerializerGroup.Builder.class, 
resource)
+                       .find("createSerializers", Method.class)
+                       .run(x -> v.set(x));
+
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(SerializerGroup.Builder.class, v.get())
+                       .createMethodFinder(SerializerGroup.class, resource)
+                       .find("createSerializers", Method.class)
+                       .run(x -> v.get().impl(x));
+
                return v.get();
        }
 
@@ -347,6 +390,20 @@ public class RestOpContextBuilder extends ContextBuilder {
                        parent.parsers().copy()
                );
 
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(ParserGroup.Builder.class, v.get())
+                       .createMethodFinder(ParserGroup.Builder.class, resource)
+                       .find("createParsers", Method.class)
+                       .run(x -> v.set(x));
+
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(ParserGroup.Builder.class, v.get())
+                       .createMethodFinder(ParserGroup.class, resource)
+                       .find("createParsers", Method.class)
+                       .run(x -> v.get().impl(x));
+
                return v.get();
        }
 
@@ -387,6 +444,20 @@ public class RestOpContextBuilder extends ContextBuilder {
                        parent.partSerializer().copy()
                );
 
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(HttpPartSerializer.Creator.class, v.get())
+                       .createMethodFinder(HttpPartSerializer.Creator.class, 
resource)
+                       .find("createPartSerializer", Method.class)
+                       .run(x -> v.set(x));
+
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(HttpPartSerializer.Creator.class, v.get())
+                       .createMethodFinder(HttpPartSerializer.class, resource)
+                       .find("createPartSerializer", Method.class)
+                       .run(x -> v.get().impl(x));
+
                return v.get();
        }
 
@@ -427,6 +498,20 @@ public class RestOpContextBuilder extends ContextBuilder {
                        parent.partParser().copy()
                );
 
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(HttpPartParser.Creator.class, v.get())
+                       .createMethodFinder(HttpPartParser.Creator.class, 
resource)
+                       .find("createPartParser", Method.class)
+                       .run(x -> v.set(x));
+
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(HttpPartParser.Creator.class, v.get())
+                       .createMethodFinder(HttpPartParser.class, resource)
+                       .find("createPartParser", Method.class)
+                       .run(x -> v.get().impl(x));
+
                return v.get();
        }
 
@@ -467,6 +552,20 @@ public class RestOpContextBuilder extends ContextBuilder {
                        parent.jsonSchemaGenerator().copy()
                );
 
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(JsonSchemaGeneratorBuilder.class, v.get())
+                       .createMethodFinder(JsonSchemaGeneratorBuilder.class, 
resource)
+                       .find("createJsonSchemaGenerator", Method.class)
+                       .run(x -> v.set(x));
+
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(JsonSchemaGeneratorBuilder.class, v.get())
+                       .createMethodFinder(JsonSchemaGenerator.class, resource)
+                       .find("createJsonSchemaGenerator", Method.class)
+                       .run(x -> v.get().impl(x));
+
                return v.get();
        }
 
@@ -896,6 +995,306 @@ public class RestOpContextBuilder extends ContextBuilder {
                return this;
        }
 
+       
//-----------------------------------------------------------------------------------------------------------------
+       // defaultRequestHeaders
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       /**
+        * Returns the builder for the default request headers in the REST 
context.
+        *
+        * @return The builder for the default request headers in the REST 
context.
+        */
+       public final HeaderList.Builder defaultRequestHeaders() {
+               if (defaultRequestHeaders == null)
+                       defaultRequestHeaders = 
createDefaultRequestHeaders(beanStore(), parent, resource());
+               return defaultRequestHeaders;
+       }
+
+       /**
+        * Instantiates the default request headers for this method.
+        *
+        * @param beanStore
+        *      The factory used for creating beans and retrieving injected 
beans.
+        * @param parent
+        *      The builder for the REST resource class.
+        * @param resource
+        *      The REST servlet/bean instance that this context is defined 
against.
+        * @return The default request headers for this method.
+        */
+       protected HeaderList.Builder createDefaultRequestHeaders(BeanStore 
beanStore, RestContextBuilder parent, Supplier<?> resource) {
+
+               Value<HeaderList.Builder> v = Value.of(
+                       parent.defaultRequestHeaders().copy()
+               );
+
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(HeaderList.Builder.class, v.get())
+                       .createMethodFinder(HeaderList.Builder.class, resource)
+                       .find("createDefaultRequestHeaders", Method.class)
+                       .run(x -> v.set(x));
+
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(HeaderList.Builder.class, v.get())
+                       .createMethodFinder(HeaderList.class, resource)
+                       .find("createDefaultRequestHeaders", Method.class)
+                       .run(x -> v.get().impl(x));
+
+               return v.get();
+       }
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // defaultResponseHeaders
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       /**
+        * Returns the builder for the default response headers in the REST 
context.
+        *
+        * @return The builder for the default response headers in the REST 
context.
+        */
+       public final HeaderList.Builder defaultResponseHeaders() {
+               if (defaultResponseHeaders == null)
+                       defaultResponseHeaders = 
createDefaultResponseHeaders(beanStore(), parent, resource());
+               return defaultResponseHeaders;
+       }
+
+       /**
+        * Instantiates the default request headers for this method.
+        *
+        * @param beanStore
+        *      The factory used for creating beans and retrieving injected 
beans.
+        * @param parent
+        *      The builder for the REST resource class.
+        * @param resource
+        *      The REST servlet/bean instance that this context is defined 
against.
+        * @return The default request headers for this method.
+        */
+       protected HeaderList.Builder createDefaultResponseHeaders(BeanStore 
beanStore, RestContextBuilder parent, Supplier<?> resource) {
+
+               Value<HeaderList.Builder> v = Value.of(
+                       parent.defaultResponseHeaders().copy()
+               );
+
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(HeaderList.Builder.class, v.get())
+                       .createMethodFinder(HeaderList.Builder.class, resource)
+                       .find("createDefaultResponseHeaders", Method.class)
+                       .run(x -> v.set(x));
+
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(HeaderList.Builder.class, v.get())
+                       .createMethodFinder(HeaderList.class, resource)
+                       .find("createDefaultResponseHeaders", Method.class)
+                       .run(x -> v.get().impl(x));
+
+               return v.get();
+       }
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // defaultRequestAttributes
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       /**
+        * Returns the builder for the default request attributes in the REST 
context.
+        *
+        * @return The builder for the default request attributes in the REST 
context.
+        */
+       public final NamedAttributeList.Builder defaultRequestAttributes() {
+               if (defaultRequestAttributes == null)
+                       defaultRequestAttributes = 
createDefaultRequestAttributes(beanStore(), parent, resource());
+               return defaultRequestAttributes;
+       }
+
+       /**
+        * Instantiates the default request attributes for this method.
+        *
+        * @param beanStore
+        *      The factory used for creating beans and retrieving injected 
beans.
+        * @param parent
+        *      The builder for the REST resource class.
+        * @param resource
+        *      The REST servlet/bean instance that this context is defined 
against.
+        * @return The default request attributes for this method.
+        */
+       protected NamedAttributeList.Builder 
createDefaultRequestAttributes(BeanStore beanStore, RestContextBuilder parent, 
Supplier<?> resource) {
+
+               Value<NamedAttributeList.Builder> v = Value.of(
+                       parent.defaultRequestAttributes().copy()
+               );
+
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(NamedAttributeList.Builder.class, v.get())
+                       .createMethodFinder(NamedAttributeList.Builder.class, 
resource)
+                       .find("createDefaultRequestAttributes", Method.class)
+                       .run(x -> v.set(x));
+
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(NamedAttributeList.Builder.class, v.get())
+                       .createMethodFinder(NamedAttributeList.class, resource)
+                       .find("createDefaultRequestAttributes", Method.class)
+                       .run(x -> v.get().impl(x));
+
+               return v.get();
+       }
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // defaultRequestQuery
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       /**
+        * Returns the builder for the default request query data in the REST 
context.
+        *
+        * @return The builder for the default request query data in the REST 
context.
+        */
+       public final PartList.Builder defaultRequestQueryData() {
+               if (defaultRequestQueryData == null)
+                       defaultRequestQueryData = 
createDefaultRequestQueryData(beanStore(), parent, resource());
+               return defaultRequestQueryData;
+       }
+
+       /**
+        * Instantiates the default query parameters for this method.
+        *
+        * @param beanStore
+        *      The factory used for creating beans and retrieving injected 
beans.
+        * @param parent
+        *      The builder for the REST resource class.
+        * @param resource
+        *      The REST servlet/bean instance that this context is defined 
against.
+        * @return The default request query parameters for this method.
+        */
+       protected PartList.Builder createDefaultRequestQueryData(BeanStore 
beanStore, RestContextBuilder parent, Supplier<?> resource) {
+
+               Value<PartList.Builder> v = Value.of(
+                       PartList.create()
+               );
+
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(PartList.Builder.class, v.get())
+                       .createMethodFinder(PartList.Builder.class, resource)
+                       .find("createDefaultRequestQueryData", Method.class)
+                       .thenFind("createDefaultRequestQueryData")
+                       .run(x -> v.set(x));
+
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(PartList.Builder.class, v.get())
+                       .createMethodFinder(PartList.class, resource)
+                       .find("createDefaultRequestQueryData", Method.class)
+                       .thenFind("createDefaultRequestQueryData")
+                       .run(x -> v.get().impl(x));
+
+               return v.get();
+       }
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // defaultRequestFormData
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       /**
+        * Returns the builder for the default request form data in the REST 
context.
+        *
+        * @return The builder for the default request form data in the REST 
context.
+        */
+       public final PartList.Builder defaultRequestFormData() {
+               if (defaultRequestFormData == null)
+                       defaultRequestFormData = 
createDefaultRequestFormData(beanStore(), parent, resource());
+               return defaultRequestFormData;
+       }
+
+       /**
+        * Instantiates the default form-data parameters for this method.
+        *
+        * @param beanStore
+        *      The factory used for creating beans and retrieving injected 
beans.
+        * @param parent
+        *      The builder for the REST resource class.
+        * @param resource
+        *      The REST servlet/bean instance that this context is defined 
against.
+        * @return The default request form-data parameters for this method.
+        */
+       protected PartList.Builder createDefaultRequestFormData(BeanStore 
beanStore, RestContextBuilder parent, Supplier<?> resource) {
+
+               Value<PartList.Builder> v = Value.of(
+                       PartList.create()
+               );
+
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(PartList.Builder.class, v.get())
+                       .createMethodFinder(PartList.Builder.class, resource)
+                       .find("createDefaultRequestFormData", Method.class)
+                       .thenFind("createDefaultRequestFormData")
+                       .run(x -> v.set(x));
+
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(PartList.Builder.class, v.get())
+                       .createMethodFinder(PartList.class, resource)
+                       .find("createDefaultRequestFormData", Method.class)
+                       .thenFind("createDefaultRequestFormData")
+                       .run(x -> v.get().impl(x));
+
+               return v.get();
+       }
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Parameter annotations
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       /**
+        * Handles processing of any annotations on parameters.
+        *
+        * <p>
+        * This includes: {@link Header}, {@link Query}, {@link FormData}.
+        */
+       protected void processParameterAnnotations() {
+               for (Annotation[] aa : restMethod.getParameterAnnotations()) {
+
+                       for (Annotation a : aa) {
+                               if (a instanceof Header) {
+                                       Header h = (Header)a;
+                                       String def = 
joinnlFirstNonEmptyArray(h._default(), h.df());
+                                       if (def != null) {
+                                               try {
+                                                       
defaultRequestHeaders().set(basicHeader(firstNonEmpty(h.name(), h.n(), 
h.value()), parseAnything(def)));
+                                               } catch (ParseException e) {
+                                                       throw new 
ConfigException(e, "Malformed @Header annotation");
+                                               }
+                                       }
+                               }
+                               if (a instanceof Query) {
+                                       Query h = (Query)a;
+                                       String def = 
joinnlFirstNonEmptyArray(h._default(), h.df());
+                                       if (def != null) {
+                                               try {
+                                                       
defaultRequestQueryData().setDefault(basicPart(firstNonEmpty(h.name(), h.n(), 
h.value()), parseAnything(def)));
+                                               } catch (ParseException e) {
+                                                       throw new 
ConfigException(e, "Malformed @Query annotation");
+                                               }
+                                       }
+                               }
+                               if (a instanceof FormData) {
+                                       FormData h = (FormData)a;
+                                       String def = 
joinnlFirstNonEmptyArray(h._default(), h.df());
+                                       if (def != null) {
+                                               try {
+                                                       
defaultRequestFormData().setDefault(basicPart(firstNonEmpty(h.name(), h.n(), 
h.value()), parseAnything(def)));
+                                               } catch (ParseException e) {
+                                                       throw new 
ConfigException(e, "Malformed @FormData annotation");
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
        
//----------------------------------------------------------------------------------------------------
        // Properties
        
//----------------------------------------------------------------------------------------------------
@@ -1048,154 +1447,154 @@ public class RestOpContextBuilder extends 
ContextBuilder {
                return this;
        }
 
-       /**
-        * Default form data parameters.
-        *
-        * <p>
-        * Sets default values for form data parameters.
-        *
-        * <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 values The form data parameters to add.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestOpContextBuilder defaultFormData(NameValuePair...values) {
-               defaultFormData.setDefault(values);
-               return this;
-       }
-
-       /**
-        * Default query parameters.
-        *
-        * <p>
-        * Sets default values for query data parameters.
-        *
-        * <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 values The query parameters to add.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestOpContextBuilder defaultQueryData(NameValuePair...values) {
-               defaultQueryData.setDefault(values);
-               return this;
-       }
-
-       /**
-        * Default request attributes.
-        *
-        * <p>
-        * Specifies default values for request attributes if they are not 
already set on 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>})
-        *      <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 RestOpContextBuilder 
defaultRequestAttributes(NamedAttribute...values) {
-               defaultRequestAttributes.append(values);
-               return this;
-       }
-
-       /**
-        * <i><l>RestOpContext</l> configuration property:&emsp;</i>  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='ja'>{@link RestOp#defaultRequestHeaders}
-        *      <li class='ja'>{@link RestGet#defaultRequestHeaders}
-        *      <li class='ja'>{@link RestPut#defaultRequestHeaders}
-        *      <li class='ja'>{@link RestPost#defaultRequestHeaders}
-        *      <li class='ja'>{@link RestDelete#defaultRequestHeaders}
-        * </ul>
-        *
-        * @param values The headers to add.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestOpContextBuilder defaultRequestHeaders(Header...values) {
-               defaultRequestHeaders.setDefault(values);
-               return this;
-       }
-
-       /**
-        * Default response headers.
-        *
-        * <p>
-        * 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>, 
defaultResponseHeaders={<js>"Content-Type: text/json"</js>})
-        *      <jk>public</jk> String doGet()  {...}
-        * </p>
-        *
-        * <ul class='seealso'>
-        *      <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.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestOpContextBuilder defaultResponseHeaders(Header...values) {
-               defaultResponseHeaders.setDefault(values);
-               return this;
-       }
-
+//     /**
+//      * Default form data parameters.
+//      *
+//      * <p>
+//      * Sets default values for form data parameters.
+//      *
+//      * <h5 class='section'>Example:</h5>
+//      * <p class='bcode w800'>
+//      *      <ja>@RestPost</ja>(path=<js>"/*"</js>, 
defaultRequestFormData={<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 values The form data parameters to add.
+//      * @return This object (for method chaining).
+//      */
+//     @FluentSetter
+//     public RestOpContextBuilder 
defaultRequestFormData(NameValuePair...values) {
+//             defaultRequestFormData.setDefault(values);
+//             return this;
+//     }
+//
+//     /**
+//      * Default query parameters.
+//      *
+//      * <p>
+//      * Sets default values for query data parameters.
+//      *
+//      * <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>, 
defaultRequestQueryData={<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 values The query parameters to add.
+//      * @return This object (for method chaining).
+//      */
+//     @FluentSetter
+//     public RestOpContextBuilder 
defaultRequestQueryData(NameValuePair...values) {
+//             defaultRequestQueryData.setDefault(values);
+//             return this;
+//     }
+//
+//     /**
+//      * Default request attributes.
+//      *
+//      * <p>
+//      * Specifies default values for request attributes if they are not 
already set on 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>})
+//      *      <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 RestOpContextBuilder 
defaultRequestAttributes(NamedAttribute...values) {
+//             defaultRequestAttributes.append(values);
+//             return this;
+//     }
+//
+//     /**
+//      * <i><l>RestOpContext</l> configuration property:&emsp;</i>  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='ja'>{@link RestOp#defaultRequestHeaders}
+//      *      <li class='ja'>{@link RestGet#defaultRequestHeaders}
+//      *      <li class='ja'>{@link RestPut#defaultRequestHeaders}
+//      *      <li class='ja'>{@link RestPost#defaultRequestHeaders}
+//      *      <li class='ja'>{@link RestDelete#defaultRequestHeaders}
+//      * </ul>
+//      *
+//      * @param values The headers to add.
+//      * @return This object (for method chaining).
+//      */
+//     @FluentSetter
+//     public RestOpContextBuilder defaultRequestHeaders(Header...values) {
+//             defaultRequestHeaders.setDefault(values);
+//             return this;
+//     }
+//
+//     /**
+//      * Default response headers.
+//      *
+//      * <p>
+//      * 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>, 
defaultResponseHeaders={<js>"Content-Type: text/json"</js>})
+//      *      <jk>public</jk> String doGet()  {...}
+//      * </p>
+//      *
+//      * <ul class='seealso'>
+//      *      <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.
+//      * @return This object (for method chaining).
+//      */
+//     @FluentSetter
+//     public RestOpContextBuilder defaultResponseHeaders(Header...values) {
+//             defaultResponseHeaders.setDefault(values);
+//             return this;
+//     }
+//
        /**
         * HTTP method name.
         *
@@ -1613,4 +2012,16 @@ public class RestOpContextBuilder extends ContextBuilder 
{
        }
 
        // </FluentSetters>
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Helper methods.
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       private String joinnlFirstNonEmptyArray(String[]...s) {
+               for (String[] ss : s)
+                       if (ss.length > 0)
+                               return joinnl(ss);
+               return null;
+       }
+
 }
\ No newline at end of file
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
index 63b9115..26e0a94 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
@@ -188,7 +188,7 @@ public final class RestRequest {
                pathParams.parser(partParserSession);
 
                queryParams
-                       .addDefault(opContext.getDefaultRequestQuery().getAll())
+                       
.addDefault(opContext.getDefaultRequestQueryData().getAll())
                        .parser(partParserSession);
 
                headers
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 a511440..1e9d532 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
@@ -185,7 +185,7 @@ public @interface RestDelete {
         *
         * <h5 class='section'>Example:</h5>
         * <p class='bcode w800'>
-        *      <ja>@RestDelete</ja>(path=<js>"/*"</js>, 
defaultQueryData={<js>"foo=bar"</js>})
+        *      <ja>@RestDelete</ja>(path=<js>"/*"</js>, 
defaultRequestQueryData={<js>"foo=bar"</js>})
         *      <jk>public</jk> String doDelete(<ja>@Query</ja>(<js>"foo"</js>) 
String foo)  {...}
         * </p>
         *
@@ -199,7 +199,7 @@ public @interface RestDelete {
         *              (e.g. <js>"$S{mySystemProperty}"</js>).
         * </ul>
         */
-       String[] defaultQueryData() default {};
+       String[] defaultRequestQueryData() default {};
 
        /**
         * Default request attributes.
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 1e09a3a..1086de1 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
@@ -67,7 +67,7 @@ public class RestDeleteAnnotation {
                Class<? extends Encoder>[] encoders = new Class[0];
                OpSwagger swagger = OpSwaggerAnnotation.DEFAULT;
                String clientVersion="", debug="", defaultAccept="", 
defaultCharset="", rolesDeclared="", roleGuard="", summary="", value="";
-               String[] defaultQueryData={}, defaultRequestAttributes={}, 
defaultRequestHeaders={}, defaultResponseHeaders={}, description={}, path={};
+               String[] defaultRequestQueryData={}, 
defaultRequestAttributes={}, defaultRequestHeaders={}, 
defaultResponseHeaders={}, description={}, path={};
 
                /**
                 * Constructor.
@@ -141,13 +141,13 @@ public class RestDeleteAnnotation {
                }
 
                /**
-                * Sets the {@link RestDelete#defaultQueryData()} property on 
this annotation.
+                * Sets the {@link RestDelete#defaultRequestQueryData()} 
property on this annotation.
                 *
                 * @param value The new value for this property.
                 * @return This object (for method chaining).
                 */
-               public Builder defaultQueryData(String...value) {
-                       this.defaultQueryData = value;
+               public Builder defaultRequestQueryData(String...value) {
+                       this.defaultRequestQueryData = value;
                        return this;
                }
 
@@ -323,7 +323,7 @@ public class RestDeleteAnnotation {
                private final Class<? extends Encoder>[] encoders;
                private final OpSwagger swagger;
                private final String clientVersion, debug, defaultAccept, 
defaultCharset, rolesDeclared, roleGuard, summary, value;
-               private final String[] defaultQueryData, 
defaultRequestAttributes, defaultRequestHeaders, defaultResponseHeaders, 
description, path;
+               private final String[] defaultRequestQueryData, 
defaultRequestAttributes, defaultRequestHeaders, defaultResponseHeaders, 
description, path;
 
                Impl(Builder b) {
                        super(b);
@@ -332,7 +332,7 @@ public class RestDeleteAnnotation {
                        this.debug = b.debug;
                        this.defaultAccept = b.defaultAccept;
                        this.defaultCharset = b.defaultCharset;
-                       this.defaultQueryData = copyOf(b.defaultQueryData);
+                       this.defaultRequestQueryData = 
copyOf(b.defaultRequestQueryData);
                        this.defaultRequestAttributes = 
copyOf(b.defaultRequestAttributes);
                        this.defaultRequestHeaders = 
copyOf(b.defaultRequestHeaders);
                        this.defaultResponseHeaders = 
copyOf(b.defaultResponseHeaders);
@@ -375,8 +375,8 @@ public class RestDeleteAnnotation {
                }
 
                @Override /* RestDelete */
-               public String[] defaultQueryData() {
-                       return defaultQueryData;
+               public String[] defaultRequestQueryData() {
+                       return defaultRequestQueryData;
                }
 
                @Override /* RestDelete */
@@ -471,11 +471,11 @@ public class RestDeleteAnnotation {
 
                        classes(a.encoders()).ifPresent(x -> 
b.encoders().set(x));
                        type(a.contextClass()).ifPresent(x -> b.type(x));
-                       strings(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultRequestHeaders(x));
-                       strings(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultResponseHeaders(x));
-                       strings(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
-                       strings(a.defaultQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultQueryData(x));
-                       string(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders(x));
+                       strings(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultRequestHeaders().setDefault(x));
+                       strings(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultResponseHeaders().setDefault(x));
+                       strings(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> 
b.defaultRequestAttributes().add(x));
+                       strings(a.defaultRequestQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultRequestQueryData().setDefault(x));
+                       string(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders().setDefault(x));
                        b.guards().append(a.guards());
                        b.matchers().append(a.matchers());
                        string(a.clientVersion()).ifPresent(x -> 
b.clientVersion(x));
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGet.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGet.java
index 540e963..026787c 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
@@ -201,7 +201,7 @@ public @interface RestGet {
         *
         * <h5 class='section'>Example:</h5>
         * <p class='bcode w800'>
-        *      <ja>@RestGet</ja>(path=<js>"/*"</js>, 
defaultQueryData={<js>"foo=bar"</js>})
+        *      <ja>@RestGet</ja>(path=<js>"/*"</js>, 
defaultRequestQueryData={<js>"foo=bar"</js>})
         *      <jk>public</jk> String doGet(<ja>@Query</ja>(<js>"foo"</js>) 
String foo)  {...}
         * </p>
         *
@@ -215,7 +215,7 @@ public @interface RestGet {
         *              (e.g. <js>"$S{mySystemProperty}"</js>).
         * </ul>
         */
-       String[] defaultQueryData() default {};
+       String[] defaultRequestQueryData() default {};
 
        /**
         * Default request attributes.
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 a617021..76c9e4b 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
@@ -71,7 +71,7 @@ public class RestGetAnnotation {
                Class<? extends Serializer>[] serializers = new Class[0];
                OpSwagger swagger = OpSwaggerAnnotation.DEFAULT;
                String clientVersion="", debug="", defaultAccept="", 
defaultCharset="", rolesDeclared="", roleGuard="", summary="", value="";
-               String[] defaultQueryData={}, defaultRequestAttributes={}, 
defaultRequestHeaders={}, defaultResponseHeaders={}, description={}, path={}, 
produces={};
+               String[] defaultRequestQueryData={}, 
defaultRequestAttributes={}, defaultRequestHeaders={}, 
defaultResponseHeaders={}, description={}, path={}, produces={};
 
                /**
                 * Constructor.
@@ -156,13 +156,13 @@ public class RestGetAnnotation {
                }
 
                /**
-                * Sets the {@link RestGet#defaultQueryData()} property on this 
annotation.
+                * Sets the {@link RestGet#defaultRequestQueryData()} property 
on this annotation.
                 *
                 * @param value The new value for this property.
                 * @return This object (for method chaining).
                 */
-               public Builder defaultQueryData(String...value) {
-                       this.defaultQueryData = value;
+               public Builder defaultRequestQueryData(String...value) {
+                       this.defaultRequestQueryData = value;
                        return this;
                }
 
@@ -362,7 +362,7 @@ public class RestGetAnnotation {
                private final Class<? extends Serializer>[] serializers;
                private final OpSwagger swagger;
                private final String clientVersion, debug, defaultAccept, 
defaultCharset, rolesDeclared, roleGuard, summary, value;
-               private final String[] defaultQueryData, 
defaultRequestAttributes, defaultRequestHeaders, defaultResponseHeaders, 
description, path, produces;
+               private final String[] defaultRequestQueryData, 
defaultRequestAttributes, defaultRequestHeaders, defaultResponseHeaders, 
description, path, produces;
 
                Impl(Builder b) {
                        super(b);
@@ -372,7 +372,7 @@ public class RestGetAnnotation {
                        this.debug = b.debug;
                        this.defaultAccept = b.defaultAccept;
                        this.defaultCharset = b.defaultCharset;
-                       this.defaultQueryData = copyOf(b.defaultQueryData);
+                       this.defaultRequestQueryData = 
copyOf(b.defaultRequestQueryData);
                        this.defaultRequestAttributes = 
copyOf(b.defaultRequestAttributes);
                        this.defaultRequestHeaders = 
copyOf(b.defaultRequestHeaders);
                        this.defaultResponseHeaders = 
copyOf(b.defaultResponseHeaders);
@@ -422,8 +422,8 @@ public class RestGetAnnotation {
                }
 
                @Override /* RestGet */
-               public String[] defaultQueryData() {
-                       return defaultQueryData;
+               public String[] defaultRequestQueryData() {
+                       return defaultRequestQueryData;
                }
 
                @Override /* RestGet */
@@ -530,11 +530,11 @@ public class RestGetAnnotation {
                        classes(a.encoders()).ifPresent(x -> 
b.encoders().set(x));
                        type(a.contextClass()).ifPresent(x -> b.type(x));
                        strings(a.produces()).map(MediaType::of).forEach(x -> 
b.produces(x));
-                       strings(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultRequestHeaders(x));
-                       strings(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultResponseHeaders(x));
-                       strings(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
-                       strings(a.defaultQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultQueryData(x));
-                       string(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders(x));
+                       strings(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultRequestHeaders().setDefault(x));
+                       strings(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultResponseHeaders().setDefault(x));
+                       strings(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> 
b.defaultRequestAttributes().add(x));
+                       strings(a.defaultRequestQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultRequestQueryData().setDefault(x));
+                       string(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders().setDefault(x));
                        b.converters().append(a.converters());
                        b.guards().append(a.guards());
                        b.matchers().append(a.matchers());
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOp.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOp.java
index be71dd4..6c10462 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
@@ -230,7 +230,7 @@ public @interface RestOp {
         *
         * <h5 class='section'>Example:</h5>
         * <p class='bcode w800'>
-        *      <ja>@RestOp</ja>(method=<jsf>POST</jsf>, path=<js>"/*"</js>, 
defaultFormData={<js>"foo=bar"</js>})
+        *      <ja>@RestOp</ja>(method=<jsf>POST</jsf>, path=<js>"/*"</js>, 
defaultRequestFormData={<js>"foo=bar"</js>})
         *      <jk>public</jk> String doGet(<ja>@FormData</ja>(<js>"foo"</js>) 
String foo)  {...}
         * </p>
         *
@@ -244,7 +244,7 @@ public @interface RestOp {
         *              (e.g. <js>"$S{mySystemProperty}"</js>).
         * </ul>
         */
-       String[] defaultFormData() default {};
+       String[] defaultRequestFormData() default {};
 
        /**
         * Specifies default values for query parameters.
@@ -257,7 +257,7 @@ public @interface RestOp {
         *
         * <h5 class='section'>Example:</h5>
         * <p class='bcode w800'>
-        *      <ja>@RestOp</ja>(method=<jsf>GET</jsf>, path=<js>"/*"</js>, 
defaultQueryData={<js>"foo=bar"</js>})
+        *      <ja>@RestOp</ja>(method=<jsf>GET</jsf>, path=<js>"/*"</js>, 
defaultRequestQueryData={<js>"foo=bar"</js>})
         *      <jk>public</jk> String doGet(<ja>@Query</ja>(<js>"foo"</js>) 
String foo)  {...}
         * </p>
         *
@@ -271,7 +271,7 @@ public @interface RestOp {
         *              (e.g. <js>"$S{mySystemProperty}"</js>).
         * </ul>
         */
-       String[] defaultQueryData() default {};
+       String[] defaultRequestQueryData() default {};
 
        /**
         * Default request attributes.
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 59c1001..ffe7868 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
@@ -73,7 +73,7 @@ public class RestOpAnnotation {
                Class<?>[] parsers=new Class<?>[0];
                OpSwagger swagger = OpSwaggerAnnotation.DEFAULT;
                String clientVersion="", debug="", defaultAccept="", 
defaultCharset="", defaultContentType="", maxInput="", method="", 
rolesDeclared="", roleGuard="", summary="", value="";
-               String[] consumes={}, defaultFormData={}, defaultQueryData={}, 
defaultRequestAttributes={}, defaultRequestHeaders={}, 
defaultResponseHeaders={}, description={}, path={}, produces={};
+               String[] consumes={}, defaultRequestFormData={}, 
defaultRequestQueryData={}, defaultRequestAttributes={}, 
defaultRequestHeaders={}, defaultResponseHeaders={}, description={}, path={}, 
produces={};
 
                /**
                 * Constructor.
@@ -180,24 +180,24 @@ public class RestOpAnnotation {
                }
 
                /**
-                * Sets the {@link RestOp#defaultFormData()} property on this 
annotation.
+                * Sets the {@link RestOp#defaultRequestFormData()} property on 
this annotation.
                 *
                 * @param value The new value for this property.
                 * @return This object (for method chaining).
                 */
-               public Builder defaultFormData(String...value) {
-                       this.defaultFormData = value;
+               public Builder defaultRequestFormData(String...value) {
+                       this.defaultRequestFormData = value;
                        return this;
                }
 
                /**
-                * Sets the {@link RestOp#defaultQueryData()} property on this 
annotation.
+                * Sets the {@link RestOp#defaultRequestQueryData()} property 
on this annotation.
                 *
                 * @param value The new value for this property.
                 * @return This object (for method chaining).
                 */
-               public Builder defaultQueryData(String...value) {
-                       this.defaultQueryData = value;
+               public Builder defaultRequestQueryData(String...value) {
+                       this.defaultRequestQueryData = value;
                        return this;
                }
 
@@ -431,7 +431,7 @@ public class RestOpAnnotation {
                private final Class<?>[] parsers;
                private final OpSwagger swagger;
                private final String clientVersion, debug, defaultAccept, 
defaultCharset, defaultContentType, maxInput, method, rolesDeclared, roleGuard, 
summary, value;
-               private final String[] consumes, defaultFormData, 
defaultQueryData, defaultRequestAttributes, defaultRequestHeaders, 
defaultResponseHeaders, description, path, produces;
+               private final String[] consumes, defaultRequestFormData, 
defaultRequestQueryData, defaultRequestAttributes, defaultRequestHeaders, 
defaultResponseHeaders, description, path, produces;
 
                Impl(Builder b) {
                        super(b);
@@ -443,8 +443,8 @@ public class RestOpAnnotation {
                        this.defaultAccept = b.defaultAccept;
                        this.defaultCharset = b.defaultCharset;
                        this.defaultContentType = b.defaultContentType;
-                       this.defaultFormData = copyOf(b.defaultFormData);
-                       this.defaultQueryData = copyOf(b.defaultQueryData);
+                       this.defaultRequestFormData = 
copyOf(b.defaultRequestFormData);
+                       this.defaultRequestQueryData = 
copyOf(b.defaultRequestQueryData);
                        this.defaultRequestAttributes = 
copyOf(b.defaultRequestAttributes);
                        this.defaultRequestHeaders = 
copyOf(b.defaultRequestHeaders);
                        this.defaultResponseHeaders = 
copyOf(b.defaultResponseHeaders);
@@ -507,13 +507,13 @@ public class RestOpAnnotation {
                }
 
                @Override /* RestOp */
-               public String[] defaultFormData() {
-                       return defaultFormData;
+               public String[] defaultRequestFormData() {
+                       return defaultRequestFormData;
                }
 
                @Override /* RestOp */
-               public String[] defaultQueryData() {
-                       return defaultQueryData;
+               public String[] defaultRequestQueryData() {
+                       return defaultRequestQueryData;
                }
 
                @Override /* RestOp */
@@ -635,13 +635,13 @@ public class RestOpAnnotation {
                        type(a.contextClass()).ifPresent(x -> b.type(x));
                        strings(a.produces()).map(MediaType::of).forEach(x -> 
b.produces(x));
                        strings(a.consumes()).map(MediaType::of).forEach(x -> 
b.consumes(x));
-                       strings(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultRequestHeaders(x));
-                       strings(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultResponseHeaders(x));
-                       strings(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
-                       strings(a.defaultQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultQueryData(x));
-                       strings(a.defaultFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultFormData(x));
-                       string(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders(x));
-                       string(a.defaultContentType()).map(x -> 
contentType(x)).ifPresent(x -> b.defaultRequestHeaders(x));
+                       strings(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultRequestHeaders().setDefault(x));
+                       strings(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultResponseHeaders().setDefault(x));
+                       strings(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> 
b.defaultRequestAttributes().add(x));
+                       strings(a.defaultRequestQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultRequestQueryData().setDefault(x));
+                       strings(a.defaultRequestFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultRequestFormData().setDefault(x));
+                       string(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders().setDefault(x));
+                       string(a.defaultContentType()).map(x -> 
contentType(x)).ifPresent(x -> b.defaultRequestHeaders().setDefault(x));
                        b.converters().append(a.converters());
                        b.guards().append(a.guards());
                        b.matchers().append(a.matchers());
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPost.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPost.java
index 8f34f7b..fe5fc72 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
@@ -232,7 +232,7 @@ public @interface RestPost {
         *
         * <h5 class='section'>Example:</h5>
         * <p class='bcode w800'>
-        *      <ja>@RestPost</ja>(path=<js>"/*"</js>, 
defaultFormData={<js>"foo=bar"</js>})
+        *      <ja>@RestPost</ja>(path=<js>"/*"</js>, 
defaultRequestFormData={<js>"foo=bar"</js>})
         *      <jk>public</jk> String doGet(<ja>@FormData</ja>(<js>"foo"</js>) 
String foo)  {...}
         * </p>
         *
@@ -246,7 +246,7 @@ public @interface RestPost {
         *              (e.g. <js>"$S{mySystemProperty}"</js>).
         * </ul>
         */
-       String[] defaultFormData() default {};
+       String[] defaultRequestFormData() default {};
 
        /**
         * Specifies default values for query parameters.
@@ -259,7 +259,7 @@ public @interface RestPost {
         *
         * <h5 class='section'>Example:</h5>
         * <p class='bcode w800'>
-        *      <ja>@RestPost</ja>(path=<js>"/*"</js>, 
defaultQueryData={<js>"foo=bar"</js>})
+        *      <ja>@RestPost</ja>(path=<js>"/*"</js>, 
defaultRequestQueryData={<js>"foo=bar"</js>})
         *      <jk>public</jk> String doPost(<ja>@Query</ja>(<js>"foo"</js>) 
String foo)  {...}
         * </p>
         *
@@ -273,7 +273,7 @@ public @interface RestPost {
         *              (e.g. <js>"$S{mySystemProperty}"</js>).
         * </ul>
         */
-       String[] defaultQueryData() default {};
+       String[] defaultRequestQueryData() default {};
 
        /**
         * Default request attributes.
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 344dff5..0e726c0 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
@@ -72,7 +72,7 @@ public class RestPostAnnotation {
                Class<?>[] parsers=new Class<?>[0];
                OpSwagger swagger = OpSwaggerAnnotation.DEFAULT;
                String clientVersion="", debug="", defaultAccept="", 
defaultCharset="", defaultContentType="", maxInput="", rolesDeclared="", 
roleGuard="", summary="", value="";
-               String[] consumes={}, defaultFormData={}, defaultQueryData={}, 
defaultRequestAttributes={}, defaultRequestHeaders={}, 
defaultResponseHeaders={}, description={}, path={}, produces={};
+               String[] consumes={}, defaultRequestFormData={}, 
defaultRequestQueryData={}, defaultRequestAttributes={}, 
defaultRequestHeaders={}, defaultResponseHeaders={}, description={}, path={}, 
produces={};
 
                /**
                 * Constructor.
@@ -179,24 +179,24 @@ public class RestPostAnnotation {
                }
 
                /**
-                * Sets the {@link RestPost#defaultFormData()} property on this 
annotation.
+                * Sets the {@link RestPost#defaultRequestFormData()} property 
on this annotation.
                 *
                 * @param value The new value for this property.
                 * @return This object (for method chaining).
                 */
-               public Builder defaultFormData(String...value) {
-                       this.defaultFormData = value;
+               public Builder defaultRequestFormData(String...value) {
+                       this.defaultRequestFormData = value;
                        return this;
                }
 
                /**
-                * Sets the {@link RestPost#defaultQueryData()} property on 
this annotation.
+                * Sets the {@link RestPost#defaultRequestQueryData()} property 
on this annotation.
                 *
                 * @param value The new value for this property.
                 * @return This object (for method chaining).
                 */
-               public Builder defaultQueryData(String...value) {
-                       this.defaultQueryData = value;
+               public Builder defaultRequestQueryData(String...value) {
+                       this.defaultRequestQueryData = value;
                        return this;
                }
 
@@ -419,7 +419,7 @@ public class RestPostAnnotation {
                private final Class<?>[] parsers;
                private final OpSwagger swagger;
                private final String clientVersion, debug, defaultAccept, 
defaultCharset, defaultContentType, maxInput, rolesDeclared, roleGuard, 
summary, value;
-               private final String[] consumes, defaultFormData, 
defaultQueryData, defaultRequestAttributes, defaultRequestHeaders, 
defaultResponseHeaders, description, path, produces;
+               private final String[] consumes, defaultRequestFormData, 
defaultRequestQueryData, defaultRequestAttributes, defaultRequestHeaders, 
defaultResponseHeaders, description, path, produces;
 
                Impl(Builder b) {
                        super(b);
@@ -431,8 +431,8 @@ public class RestPostAnnotation {
                        this.defaultAccept = b.defaultAccept;
                        this.defaultCharset = b.defaultCharset;
                        this.defaultContentType = b.defaultContentType;
-                       this.defaultFormData = copyOf(b.defaultFormData);
-                       this.defaultQueryData = copyOf(b.defaultQueryData);
+                       this.defaultRequestFormData = 
copyOf(b.defaultRequestFormData);
+                       this.defaultRequestQueryData = 
copyOf(b.defaultRequestQueryData);
                        this.defaultRequestAttributes = 
copyOf(b.defaultRequestAttributes);
                        this.defaultRequestHeaders = 
copyOf(b.defaultRequestHeaders);
                        this.defaultResponseHeaders = 
copyOf(b.defaultResponseHeaders);
@@ -494,13 +494,13 @@ public class RestPostAnnotation {
                }
 
                @Override /* RestPost */
-               public String[] defaultFormData() {
-                       return defaultFormData;
+               public String[] defaultRequestFormData() {
+                       return defaultRequestFormData;
                }
 
                @Override /* RestPost */
-               public String[] defaultQueryData() {
-                       return defaultQueryData;
+               public String[] defaultRequestQueryData() {
+                       return defaultRequestQueryData;
                }
 
                @Override /* RestPost */
@@ -619,13 +619,13 @@ public class RestPostAnnotation {
                        type(a.contextClass()).ifPresent(x -> b.type(x));
                        strings(a.produces()).map(MediaType::of).forEach(x -> 
b.produces(x));
                        strings(a.consumes()).map(MediaType::of).forEach(x -> 
b.consumes(x));
-                       strings(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultRequestHeaders(x));
-                       strings(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultResponseHeaders(x));
-                       strings(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
-                       strings(a.defaultQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultQueryData(x));
-                       strings(a.defaultFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultFormData(x));
-                       string(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders(x));
-                       string(a.defaultContentType()).map(x -> 
contentType(x)).ifPresent(x -> b.defaultRequestHeaders(x));
+                       strings(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultRequestHeaders().setDefault(x));
+                       strings(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultResponseHeaders().setDefault(x));
+                       strings(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> 
b.defaultRequestAttributes().add(x));
+                       strings(a.defaultRequestQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultRequestQueryData().setDefault(x));
+                       strings(a.defaultRequestFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultRequestFormData().setDefault(x));
+                       string(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders().setDefault(x));
+                       string(a.defaultContentType()).map(x -> 
contentType(x)).ifPresent(x -> b.defaultRequestHeaders().setDefault(x));
                        b.converters().append(a.converters());
                        b.guards().append(a.guards());
                        b.matchers().append(a.matchers());
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPut.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPut.java
index 057d5ee..66cdb9d 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
@@ -232,7 +232,7 @@ public @interface RestPut {
         *
         * <h5 class='section'>Example:</h5>
         * <p class='bcode w800'>
-        *      <ja>@RestPut</ja>(path=<js>"/*"</js>, 
defaultFormData={<js>"foo=bar"</js>})
+        *      <ja>@RestPut</ja>(path=<js>"/*"</js>, 
defaultRequestFormData={<js>"foo=bar"</js>})
         *      <jk>public</jk> String doPut(<ja>@FormData</ja>(<js>"foo"</js>) 
String foo)  {...}
         * </p>
         *
@@ -246,7 +246,7 @@ public @interface RestPut {
         *              (e.g. <js>"$S{mySystemProperty}"</js>).
         * </ul>
         */
-       String[] defaultFormData() default {};
+       String[] defaultRequestFormData() default {};
 
        /**
         * Specifies default values for query parameters.
@@ -259,7 +259,7 @@ public @interface RestPut {
         *
         * <h5 class='section'>Example:</h5>
         * <p class='bcode w800'>
-        *      <ja>@RestPut</ja>(path=<js>"/*"</js>, 
defaultQueryData={<js>"foo=bar"</js>})
+        *      <ja>@RestPut</ja>(path=<js>"/*"</js>, 
defaultRequestQueryData={<js>"foo=bar"</js>})
         *      <jk>public</jk> String doPut(<ja>@Query</ja>(<js>"foo"</js>) 
String foo)  {...}
         * </p>
         *
@@ -273,7 +273,7 @@ public @interface RestPut {
         *              (e.g. <js>"$S{mySystemProperty}"</js>).
         * </ul>
         */
-       String[] defaultQueryData() default {};
+       String[] defaultRequestQueryData() default {};
 
        /**
         * Default request attributes.
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 cc422de..5162cf6 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
@@ -72,7 +72,7 @@ public class RestPutAnnotation {
                Class<?>[] parsers=new Class<?>[0];
                OpSwagger swagger = OpSwaggerAnnotation.DEFAULT;
                String clientVersion="", debug="", defaultAccept="", 
defaultCharset="", defaultContentType="", maxInput="", rolesDeclared="", 
roleGuard="", summary="", value="";
-               String[] consumes={}, defaultFormData={}, defaultQueryData={}, 
defaultRequestAttributes={}, defaultRequestHeaders={}, 
defaultResponseHeaders={}, description={}, path={}, produces={};
+               String[] consumes={}, defaultRequestFormData={}, 
defaultRequestQueryData={}, defaultRequestAttributes={}, 
defaultRequestHeaders={}, defaultResponseHeaders={}, description={}, path={}, 
produces={};
 
                /**
                 * Constructor.
@@ -179,24 +179,24 @@ public class RestPutAnnotation {
                }
 
                /**
-                * Sets the {@link RestPut#defaultFormData()} property on this 
annotation.
+                * Sets the {@link RestPut#defaultRequestFormData()} property 
on this annotation.
                 *
                 * @param value The new value for this property.
                 * @return This object (for method chaining).
                 */
-               public Builder defaultFormData(String...value) {
-                       this.defaultFormData = value;
+               public Builder defaultRequestFormData(String...value) {
+                       this.defaultRequestFormData = value;
                        return this;
                }
 
                /**
-                * Sets the {@link RestPut#defaultQueryData()} property on this 
annotation.
+                * Sets the {@link RestPut#defaultRequestQueryData()} property 
on this annotation.
                 *
                 * @param value The new value for this property.
                 * @return This object (for method chaining).
                 */
-               public Builder defaultQueryData(String...value) {
-                       this.defaultQueryData = value;
+               public Builder defaultRequestQueryData(String...value) {
+                       this.defaultRequestQueryData = value;
                        return this;
                }
 
@@ -419,7 +419,7 @@ public class RestPutAnnotation {
                private final Class<?>[] parsers;
                private final OpSwagger swagger;
                private final String clientVersion, debug, defaultAccept, 
defaultCharset, defaultContentType, maxInput, rolesDeclared, roleGuard, 
summary, value;
-               private final String[] consumes, defaultFormData, 
defaultQueryData, defaultRequestAttributes, defaultRequestHeaders, 
defaultResponseHeaders, description, path, produces;
+               private final String[] consumes, defaultRequestFormData, 
defaultRequestQueryData, defaultRequestAttributes, defaultRequestHeaders, 
defaultResponseHeaders, description, path, produces;
 
                Impl(Builder b) {
                        super(b);
@@ -431,8 +431,8 @@ public class RestPutAnnotation {
                        this.defaultAccept = b.defaultAccept;
                        this.defaultCharset = b.defaultCharset;
                        this.defaultContentType = b.defaultContentType;
-                       this.defaultFormData = copyOf(b.defaultFormData);
-                       this.defaultQueryData = copyOf(b.defaultQueryData);
+                       this.defaultRequestFormData = 
copyOf(b.defaultRequestFormData);
+                       this.defaultRequestQueryData = 
copyOf(b.defaultRequestQueryData);
                        this.defaultRequestAttributes = 
copyOf(b.defaultRequestAttributes);
                        this.defaultRequestHeaders = 
copyOf(b.defaultRequestHeaders);
                        this.defaultResponseHeaders = 
copyOf(b.defaultResponseHeaders);
@@ -494,13 +494,13 @@ public class RestPutAnnotation {
                }
 
                @Override /* RestPut */
-               public String[] defaultFormData() {
-                       return defaultFormData;
+               public String[] defaultRequestFormData() {
+                       return defaultRequestFormData;
                }
 
                @Override /* RestPut */
-               public String[] defaultQueryData() {
-                       return defaultQueryData;
+               public String[] defaultRequestQueryData() {
+                       return defaultRequestQueryData;
                }
 
                @Override /* RestPut */
@@ -619,13 +619,13 @@ public class RestPutAnnotation {
                        type(a.contextClass()).ifPresent(x -> b.type(x));
                        strings(a.produces()).map(MediaType::of).forEach(x -> 
b.produces(x));
                        strings(a.consumes()).map(MediaType::of).forEach(x -> 
b.consumes(x));
-                       strings(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultRequestHeaders(x));
-                       strings(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultResponseHeaders(x));
-                       strings(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
-                       strings(a.defaultQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultQueryData(x));
-                       strings(a.defaultFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultFormData(x));
-                       string(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders(x));
-                       string(a.defaultContentType()).map(x -> 
contentType(x)).ifPresent(x -> b.defaultRequestHeaders(x));
+                       strings(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultRequestHeaders().setDefault(x));
+                       strings(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.defaultResponseHeaders().setDefault(x));
+                       strings(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> 
b.defaultRequestAttributes().add(x));
+                       strings(a.defaultRequestQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultRequestQueryData().setDefault(x));
+                       strings(a.defaultRequestFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultRequestFormData().setDefault(x));
+                       string(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders().setDefault(x));
+                       string(a.defaultContentType()).map(x -> 
contentType(x)).ifPresent(x -> b.defaultRequestHeaders().setDefault(x));
                        b.converters().append(a.converters());
                        b.guards().append(a.guards());
                        b.matchers().append(a.matchers());
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/FormData_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/FormData_Test.java
index 6c3a018..78cad68 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/FormData_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/FormData_Test.java
@@ -96,7 +96,7 @@ public class FormData_Test {
 
        @Rest
        public static class C {
-               @RestPost(defaultFormData={"f1:1","f2=2"," f3 : 3 "})
+               @RestPost(defaultRequestFormData={"f1:1","f2=2"," f3 : 3 "})
                public OMap a(RequestFormParams formData) {
                        return OMap.create()
                                .a("f1", formData.getString("f1"))
@@ -117,7 +117,7 @@ public class FormData_Test {
                                .a("f2", f2)
                                .a("f3", f3);
                }
-               @RestPost(defaultFormData={"f1:1","f2=2"," f3 : 3 "})
+               @RestPost(defaultRequestFormData={"f1:1","f2=2"," f3 : 3 "})
                public OMap d(@FormData(value="f1",_default="4") String f1, 
@FormData(value="f2",_default="5") String f2, 
@FormData(value="f3",_default="6") String f3) {
                        return OMap.create()
                                .a("f1", f1)
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Query_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Query_Test.java
index c5b95fd..25d13ad 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Query_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Query_Test.java
@@ -182,7 +182,7 @@ public class Query_Test {
 
        @Rest
        public static class D {
-               @RestGet(defaultQueryData={"f1:1","f2=2"," f3 : 3 "})
+               @RestGet(defaultRequestQueryData={"f1:1","f2=2"," f3 : 3 "})
                public OMap a(RequestQueryParams query) {
                        return OMap.create()
                                .a("f1", query.getString("f1"))
@@ -203,7 +203,7 @@ public class Query_Test {
                                .a("f2", f2)
                                .a("f3", f3);
                }
-               @RestGet(defaultQueryData={"f1:1","f2=2"," f3 : 3 "})
+               @RestGet(defaultRequestQueryData={"f1:1","f2=2"," f3 : 3 "})
                public OMap d(@Query(n="f1",df="4") String f1, 
@Query(n="f2",df="5") String f2, @Query(n="f3",df="6") String f3) {
                        return OMap.create()
                                .a("f1", f1)
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestDeleteAnnotation_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestDeleteAnnotation_Test.java
index 421de88..4197ce0 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestDeleteAnnotation_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestDeleteAnnotation_Test.java
@@ -37,7 +37,7 @@ public class RestDeleteAnnotation_Test {
                .debug("debug")
                .defaultAccept("defaultAccept")
                .defaultCharset("defaultCharset")
-               .defaultQueryData("defaultQueryData")
+               .defaultRequestQueryData("defaultRequestQueryData")
                .defaultRequestAttributes("defaultRequestAttributes")
                .defaultRequestHeaders("defaultRequestHeaders")
                .defaultResponseHeaders("defaultResponseHeaders")
@@ -60,7 +60,7 @@ public class RestDeleteAnnotation_Test {
                .debug("debug")
                .defaultAccept("defaultAccept")
                .defaultCharset("defaultCharset")
-               .defaultQueryData("defaultQueryData")
+               .defaultRequestQueryData("defaultRequestQueryData")
                .defaultRequestAttributes("defaultRequestAttributes")
                .defaultRequestHeaders("defaultRequestHeaders")
                .defaultResponseHeaders("defaultResponseHeaders")
@@ -86,7 +86,7 @@ public class RestDeleteAnnotation_Test {
                                + "debug:'debug',"
                                + "defaultAccept:'defaultAccept',"
                                + "defaultCharset:'defaultCharset',"
-                               + "defaultQueryData:['defaultQueryData'],"
+                               + 
"defaultRequestQueryData:['defaultRequestQueryData'],"
                                + 
"defaultRequestAttributes:['defaultRequestAttributes'],"
                                + 
"defaultRequestHeaders:['defaultRequestHeaders'],"
                                + 
"defaultResponseHeaders:['defaultResponseHeaders'],"
@@ -154,7 +154,7 @@ public class RestDeleteAnnotation_Test {
                        debug="debug",
                        defaultAccept="defaultAccept",
                        defaultCharset="defaultCharset",
-                       defaultQueryData="defaultQueryData",
+                       defaultRequestQueryData="defaultRequestQueryData",
                        defaultRequestAttributes="defaultRequestAttributes",
                        defaultRequestHeaders="defaultRequestHeaders",
                        defaultResponseHeaders="defaultResponseHeaders",
@@ -178,7 +178,7 @@ public class RestDeleteAnnotation_Test {
                        debug="debug",
                        defaultAccept="defaultAccept",
                        defaultCharset="defaultCharset",
-                       defaultQueryData="defaultQueryData",
+                       defaultRequestQueryData="defaultRequestQueryData",
                        defaultRequestAttributes="defaultRequestAttributes",
                        defaultRequestHeaders="defaultRequestHeaders",
                        defaultResponseHeaders="defaultResponseHeaders",
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestGetAnnotation_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestGetAnnotation_Test.java
index 2b122a7..077f04a 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestGetAnnotation_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestGetAnnotation_Test.java
@@ -39,7 +39,7 @@ public class RestGetAnnotation_Test {
                .debug("debug")
                .defaultAccept("defaultAccept")
                .defaultCharset("defaultCharset")
-               .defaultQueryData("defaultQueryData")
+               .defaultRequestQueryData("defaultRequestQueryData")
                .defaultRequestAttributes("defaultRequestAttributes")
                .defaultRequestHeaders("defaultRequestHeaders")
                .defaultResponseHeaders("defaultResponseHeaders")
@@ -65,7 +65,7 @@ public class RestGetAnnotation_Test {
                .debug("debug")
                .defaultAccept("defaultAccept")
                .defaultCharset("defaultCharset")
-               .defaultQueryData("defaultQueryData")
+               .defaultRequestQueryData("defaultRequestQueryData")
                .defaultRequestAttributes("defaultRequestAttributes")
                .defaultRequestHeaders("defaultRequestHeaders")
                .defaultResponseHeaders("defaultResponseHeaders")
@@ -94,7 +94,7 @@ public class RestGetAnnotation_Test {
                                + "debug:'debug',"
                                + "defaultAccept:'defaultAccept',"
                                + "defaultCharset:'defaultCharset',"
-                               + "defaultQueryData:['defaultQueryData'],"
+                               + 
"defaultRequestQueryData:['defaultRequestQueryData'],"
                                + 
"defaultRequestAttributes:['defaultRequestAttributes'],"
                                + 
"defaultRequestHeaders:['defaultRequestHeaders'],"
                                + 
"defaultResponseHeaders:['defaultResponseHeaders'],"
@@ -165,7 +165,7 @@ public class RestGetAnnotation_Test {
                        debug="debug",
                        defaultAccept="defaultAccept",
                        defaultCharset="defaultCharset",
-                       defaultQueryData="defaultQueryData",
+                       defaultRequestQueryData="defaultRequestQueryData",
                        defaultRequestAttributes="defaultRequestAttributes",
                        defaultRequestHeaders="defaultRequestHeaders",
                        defaultResponseHeaders="defaultResponseHeaders",
@@ -192,7 +192,7 @@ public class RestGetAnnotation_Test {
                        debug="debug",
                        defaultAccept="defaultAccept",
                        defaultCharset="defaultCharset",
-                       defaultQueryData="defaultQueryData",
+                       defaultRequestQueryData="defaultRequestQueryData",
                        defaultRequestAttributes="defaultRequestAttributes",
                        defaultRequestHeaders="defaultRequestHeaders",
                        defaultResponseHeaders="defaultResponseHeaders",
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestOpAnnotation_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestOpAnnotation_Test.java
index 1405215..3e44184 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestOpAnnotation_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestOpAnnotation_Test.java
@@ -42,8 +42,8 @@ public class RestOpAnnotation_Test {
                .defaultAccept("defaultAccept")
                .defaultCharset("defaultCharset")
                .defaultContentType("defaultContentType")
-               .defaultFormData("defaultFormData")
-               .defaultQueryData("defaultQueryData")
+               .defaultRequestFormData("defaultRequestFormData")
+               .defaultRequestQueryData("defaultRequestQueryData")
                .defaultRequestAttributes("defaultRequestAttributes")
                .defaultRequestHeaders("defaultRequestHeaders")
                .defaultResponseHeaders("defaultResponseHeaders")
@@ -74,8 +74,8 @@ public class RestOpAnnotation_Test {
                .defaultAccept("defaultAccept")
                .defaultCharset("defaultCharset")
                .defaultContentType("defaultContentType")
-               .defaultFormData("defaultFormData")
-               .defaultQueryData("defaultQueryData")
+               .defaultRequestFormData("defaultRequestFormData")
+               .defaultRequestQueryData("defaultRequestQueryData")
                .defaultRequestAttributes("defaultRequestAttributes")
                .defaultRequestHeaders("defaultRequestHeaders")
                .defaultResponseHeaders("defaultResponseHeaders")
@@ -109,8 +109,8 @@ public class RestOpAnnotation_Test {
                                + "defaultAccept:'defaultAccept',"
                                + "defaultCharset:'defaultCharset',"
                                + "defaultContentType:'defaultContentType',"
-                               + "defaultFormData:['defaultFormData'],"
-                               + "defaultQueryData:['defaultQueryData'],"
+                               + 
"defaultRequestFormData:['defaultRequestFormData'],"
+                               + 
"defaultRequestQueryData:['defaultRequestQueryData'],"
                                + 
"defaultRequestAttributes:['defaultRequestAttributes'],"
                                + 
"defaultRequestHeaders:['defaultRequestHeaders'],"
                                + 
"defaultResponseHeaders:['defaultResponseHeaders'],"
@@ -186,8 +186,8 @@ public class RestOpAnnotation_Test {
                        defaultAccept="defaultAccept",
                        defaultCharset="defaultCharset",
                        defaultContentType="defaultContentType",
-                       defaultFormData="defaultFormData",
-                       defaultQueryData="defaultQueryData",
+                       defaultRequestFormData="defaultRequestFormData",
+                       defaultRequestQueryData="defaultRequestQueryData",
                        defaultRequestAttributes="defaultRequestAttributes",
                        defaultRequestHeaders="defaultRequestHeaders",
                        defaultResponseHeaders="defaultResponseHeaders",
@@ -219,8 +219,8 @@ public class RestOpAnnotation_Test {
                        defaultAccept="defaultAccept",
                        defaultCharset="defaultCharset",
                        defaultContentType="defaultContentType",
-                       defaultFormData="defaultFormData",
-                       defaultQueryData="defaultQueryData",
+                       defaultRequestFormData="defaultRequestFormData",
+                       defaultRequestQueryData="defaultRequestQueryData",
                        defaultRequestAttributes="defaultRequestAttributes",
                        defaultRequestHeaders="defaultRequestHeaders",
                        defaultResponseHeaders="defaultResponseHeaders",
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestPostAnnotation_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestPostAnnotation_Test.java
index b2f71e7..710ba30 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestPostAnnotation_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestPostAnnotation_Test.java
@@ -42,8 +42,8 @@ public class RestPostAnnotation_Test {
                .defaultAccept("defaultAccept")
                .defaultCharset("defaultCharset")
                .defaultContentType("defaultContentType")
-               .defaultFormData("defaultFormData")
-               .defaultQueryData("defaultQueryData")
+               .defaultRequestFormData("defaultRequestFormData")
+               .defaultRequestQueryData("defaultRequestQueryData")
                .defaultRequestAttributes("defaultRequestAttributes")
                .defaultRequestHeaders("defaultRequestHeaders")
                .defaultResponseHeaders("defaultResponseHeaders")
@@ -73,8 +73,8 @@ public class RestPostAnnotation_Test {
                .defaultAccept("defaultAccept")
                .defaultCharset("defaultCharset")
                .defaultContentType("defaultContentType")
-               .defaultFormData("defaultFormData")
-               .defaultQueryData("defaultQueryData")
+               .defaultRequestFormData("defaultRequestFormData")
+               .defaultRequestQueryData("defaultRequestQueryData")
                .defaultRequestAttributes("defaultRequestAttributes")
                .defaultRequestHeaders("defaultRequestHeaders")
                .defaultResponseHeaders("defaultResponseHeaders")
@@ -107,8 +107,8 @@ public class RestPostAnnotation_Test {
                                + "defaultAccept:'defaultAccept',"
                                + "defaultCharset:'defaultCharset',"
                                + "defaultContentType:'defaultContentType',"
-                               + "defaultFormData:['defaultFormData'],"
-                               + "defaultQueryData:['defaultQueryData'],"
+                               + 
"defaultRequestFormData:['defaultRequestFormData'],"
+                               + 
"defaultRequestQueryData:['defaultRequestQueryData'],"
                                + 
"defaultRequestAttributes:['defaultRequestAttributes'],"
                                + 
"defaultRequestHeaders:['defaultRequestHeaders'],"
                                + 
"defaultResponseHeaders:['defaultResponseHeaders'],"
@@ -183,8 +183,8 @@ public class RestPostAnnotation_Test {
                        defaultAccept="defaultAccept",
                        defaultCharset="defaultCharset",
                        defaultContentType="defaultContentType",
-                       defaultFormData="defaultFormData",
-                       defaultQueryData="defaultQueryData",
+                       defaultRequestFormData="defaultRequestFormData",
+                       defaultRequestQueryData="defaultRequestQueryData",
                        defaultRequestAttributes="defaultRequestAttributes",
                        defaultRequestHeaders="defaultRequestHeaders",
                        defaultResponseHeaders="defaultResponseHeaders",
@@ -215,8 +215,8 @@ public class RestPostAnnotation_Test {
                        defaultAccept="defaultAccept",
                        defaultCharset="defaultCharset",
                        defaultContentType="defaultContentType",
-                       defaultFormData="defaultFormData",
-                       defaultQueryData="defaultQueryData",
+                       defaultRequestFormData="defaultRequestFormData",
+                       defaultRequestQueryData="defaultRequestQueryData",
                        defaultRequestAttributes="defaultRequestAttributes",
                        defaultRequestHeaders="defaultRequestHeaders",
                        defaultResponseHeaders="defaultResponseHeaders",
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestPutAnnotation_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestPutAnnotation_Test.java
index 6d910b2..be4539b 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestPutAnnotation_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestPutAnnotation_Test.java
@@ -42,8 +42,8 @@ public class RestPutAnnotation_Test {
                .defaultAccept("defaultAccept")
                .defaultCharset("defaultCharset")
                .defaultContentType("defaultContentType")
-               .defaultFormData("defaultFormData")
-               .defaultQueryData("defaultQueryData")
+               .defaultRequestFormData("defaultRequestFormData")
+               .defaultRequestQueryData("defaultRequestQueryData")
                .defaultRequestAttributes("defaultRequestAttributes")
                .defaultRequestHeaders("defaultRequestHeaders")
                .defaultResponseHeaders("defaultResponseHeaders")
@@ -73,8 +73,8 @@ public class RestPutAnnotation_Test {
                .defaultAccept("defaultAccept")
                .defaultCharset("defaultCharset")
                .defaultContentType("defaultContentType")
-               .defaultFormData("defaultFormData")
-               .defaultQueryData("defaultQueryData")
+               .defaultRequestFormData("defaultRequestFormData")
+               .defaultRequestQueryData("defaultRequestQueryData")
                .defaultRequestAttributes("defaultRequestAttributes")
                .defaultRequestHeaders("defaultRequestHeaders")
                .defaultResponseHeaders("defaultResponseHeaders")
@@ -107,8 +107,8 @@ public class RestPutAnnotation_Test {
                                + "defaultAccept:'defaultAccept',"
                                + "defaultCharset:'defaultCharset',"
                                + "defaultContentType:'defaultContentType',"
-                               + "defaultFormData:['defaultFormData'],"
-                               + "defaultQueryData:['defaultQueryData'],"
+                               + 
"defaultRequestFormData:['defaultRequestFormData'],"
+                               + 
"defaultRequestQueryData:['defaultRequestQueryData'],"
                                + 
"defaultRequestAttributes:['defaultRequestAttributes'],"
                                + 
"defaultRequestHeaders:['defaultRequestHeaders'],"
                                + 
"defaultResponseHeaders:['defaultResponseHeaders'],"
@@ -183,8 +183,8 @@ public class RestPutAnnotation_Test {
                        defaultAccept="defaultAccept",
                        defaultCharset="defaultCharset",
                        defaultContentType="defaultContentType",
-                       defaultFormData="defaultFormData",
-                       defaultQueryData="defaultQueryData",
+                       defaultRequestFormData="defaultRequestFormData",
+                       defaultRequestQueryData="defaultRequestQueryData",
                        defaultRequestAttributes="defaultRequestAttributes",
                        defaultRequestHeaders="defaultRequestHeaders",
                        defaultResponseHeaders="defaultResponseHeaders",
@@ -215,8 +215,8 @@ public class RestPutAnnotation_Test {
                        defaultAccept="defaultAccept",
                        defaultCharset="defaultCharset",
                        defaultContentType="defaultContentType",
-                       defaultFormData="defaultFormData",
-                       defaultQueryData="defaultQueryData",
+                       defaultRequestFormData="defaultRequestFormData",
+                       defaultRequestQueryData="defaultRequestQueryData",
                        defaultRequestAttributes="defaultRequestAttributes",
                        defaultRequestHeaders="defaultRequestHeaders",
                        defaultResponseHeaders="defaultResponseHeaders",

Reply via email to