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

commit 3e36e218a3d28e080892d142d8ec9f13e2e94e4a
Author: JamesBognar <[email protected]>
AuthorDate: Sun Sep 19 11:28:43 2021 -0400

    Context API refactoring.
---
 .../apache/juneau/config/event/ConfigEvent.java    |   4 +-
 .../juneau/config/store/ConfigClasspathStore.java  |   2 +-
 .../juneau/config/store/ConfigFileStore.java       |   2 +-
 .../juneau/config/store/ConfigMemoryStore.java     |   2 +-
 .../apache/juneau/config/store/ConfigStore.java    |   2 +-
 .../main/java/org/apache/juneau/BeanBuilder.java   |  15 ++-
 .../java/org/apache/juneau/BeanSessionArgs.java    |   2 +-
 .../main/java/org/apache/juneau/SessionArgs.java   |   2 +-
 .../java/org/apache/juneau/collections/AList.java  |   8 +-
 .../java/org/apache/juneau/collections/AMap.java   |   8 +-
 .../java/org/apache/juneau/collections/ASet.java   |   8 +-
 .../org/apache/juneau/collections/ASortedMap.java  |   8 +-
 .../org/apache/juneau/collections/ASortedSet.java  |   8 +-
 .../java/org/apache/juneau/collections/OList.java  |  14 +--
 .../java/org/apache/juneau/collections/OMap.java   |  14 +--
 .../main/java/org/apache/juneau/cp/BeanStore.java  |  14 ++-
 .../main/java/org/apache/juneau/cp/FileFinder.java |  14 ++-
 .../main/java/org/apache/juneau/cp/Messages.java   |  42 ++++----
 .../org/apache/juneau/encoders/EncoderGroup.java   |  18 +++-
 .../java/org/apache/juneau/http/HttpHeaders.java   |   2 +-
 .../java/org/apache/juneau/http/HttpParts.java     |   2 +-
 .../org/apache/juneau/http/header/HeaderList.java  |  18 +++-
 .../java/org/apache/juneau/http/part/PartList.java |  27 ++++--
 .../juneau/http/resource/HttpResourceBuilder.java  |   2 +-
 .../juneau/http/response/HttpExceptionBuilder.java |   2 +-
 .../juneau/http/response/HttpResponseBuilder.java  |   2 +-
 .../org/apache/juneau/mstat/MethodExecStats.java   |  14 ++-
 .../org/apache/juneau/mstat/MethodExecStore.java   |  14 ++-
 .../java/org/apache/juneau/mstat/ThrownStore.java  |  14 ++-
 .../java/org/apache/juneau/parser/ParserGroup.java |  59 ++++++++----
 .../apache/juneau/parser/ParserSessionArgs.java    |   2 +-
 .../java/org/apache/juneau/reflect/ClassInfo.java  |   2 +-
 .../org/apache/juneau/reflect/ConstructorInfo.java |   2 +-
 .../java/org/apache/juneau/reflect/FieldInfo.java  |   4 +-
 .../java/org/apache/juneau/reflect/MethodInfo.java |   2 +-
 .../java/org/apache/juneau/reflect/ParamInfo.java  |   6 +-
 .../apache/juneau/serializer/SerializerGroup.java  |  63 ++++++++----
 .../juneau/serializer/SerializerSessionArgs.java   |   2 +-
 .../java/org/apache/juneau/svl/VarResolver.java    |  14 ++-
 .../apache/juneau/microservice/Microservice.java   |   4 +-
 .../microservice/resources/DirectoryResource.java  |   2 +-
 .../microservice/jetty/JettyMicroservice.java      |   2 +-
 .../apache/juneau/rest/client/ResponseHeader.java  |   2 +-
 .../juneau/rest/client/ResponseStatusLine.java     |   4 +-
 .../org/apache/juneau/rest/client/RestClient.java  |   2 +-
 .../org/apache/juneau/rest/RequestFormParam.java   |   2 +-
 .../org/apache/juneau/rest/RequestFormParams.java  |   2 +-
 .../java/org/apache/juneau/rest/RequestHeader.java |   2 +-
 .../org/apache/juneau/rest/RequestHeaders.java     |   2 +-
 .../org/apache/juneau/rest/RequestPathParam.java   |   2 +-
 .../org/apache/juneau/rest/RequestPathParams.java  |   2 +-
 .../org/apache/juneau/rest/RequestQueryParam.java  |   2 +-
 .../org/apache/juneau/rest/RequestQueryParams.java |   2 +-
 .../apache/juneau/rest/ResponseProcessorList.java  |  69 +++++++-------
 .../main/java/org/apache/juneau/rest/RestCall.java |   2 +-
 .../java/org/apache/juneau/rest/RestChildren.java  | 103 +++++++++-----------
 .../java/org/apache/juneau/rest/RestContext.java   |  41 ++++----
 .../org/apache/juneau/rest/RestConverterList.java  |  59 +++++++++---
 .../java/org/apache/juneau/rest/RestGuardList.java |  63 +++++++++---
 .../org/apache/juneau/rest/RestMatcherList.java    |  63 +++++++++---
 .../java/org/apache/juneau/rest/RestObject.java    |   2 +-
 .../java/org/apache/juneau/rest/RestOpArgList.java |  66 +++++++------
 .../java/org/apache/juneau/rest/RestOpContext.java |   2 +-
 .../org/apache/juneau/rest/RestOperations.java     | 106 +++++++++------------
 .../java/org/apache/juneau/rest/RestServlet.java   |   2 +-
 .../java/org/apache/juneau/rest/StaticFiles.java   |  14 ++-
 .../org/apache/juneau/rest/logging/RestLogger.java | 100 ++++++++-----------
 .../apache/juneau/rest/logging/RestLoggerRule.java |  76 +++++++++++++--
 68 files changed, 742 insertions(+), 498 deletions(-)

diff --git 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/event/ConfigEvent.java
 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/event/ConfigEvent.java
index 3acfc7b..af5fddd 100644
--- 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/event/ConfigEvent.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/event/ConfigEvent.java
@@ -41,7 +41,7 @@ public class ConfigEvent {
        }
 
        
//---------------------------------------------------------------------------------------------
-       // Static creators.
+       // Static
        
//---------------------------------------------------------------------------------------------
 
        /**
@@ -123,7 +123,7 @@ public class ConfigEvent {
 
 
        
//---------------------------------------------------------------------------------------------
-       // Instance methods.
+       // Instance
        
//---------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStore.java
 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStore.java
index 6664fb8..c0c27c4 100644
--- 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStore.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStore.java
@@ -130,7 +130,7 @@ public class ConfigClasspathStore extends ConfigStore {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        @Override /* Context */
diff --git 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStore.java
 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStore.java
index d5cbc99..5ab1264 100644
--- 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStore.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStore.java
@@ -346,7 +346,7 @@ public class ConfigFileStore extends ConfigStore {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        @Override /* Context */
diff --git 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStore.java
 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStore.java
index a463d2b..433d736 100644
--- 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStore.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStore.java
@@ -113,7 +113,7 @@ public class ConfigMemoryStore extends ConfigStore {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        @Override /* Context */
diff --git 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStore.java
 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStore.java
index 7be7427..a82ab96 100644
--- 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStore.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStore.java
@@ -204,7 +204,7 @@ public abstract class ConfigStore extends Context 
implements Closeable {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        @Override /* Context */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanBuilder.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanBuilder.java
index c12fcbb..2031030 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanBuilder.java
@@ -72,11 +72,22 @@ public class BeanBuilder<T> {
                        return impl;
                if (type == null || type == defaultType)
                        return buildDefault();
+               return creator().run();
+       }
+
+       /**
+        * Instantiates the creator for this bean.
+        *
+        * <p>
+        * Subclasses can override this to provide specialized handling.
+        *
+        * @return The creator for this bean.
+        */
+       protected BeanCreator<? extends T> creator() {
                return beanStore
                        .creator(type().orElseThrow(()->runtimeException("Type 
not specified.")))
                        .outer(outer)
-                       .builder(this)
-                       .run();
+                       .builder(this);
        }
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSessionArgs.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSessionArgs.java
index 22e22f7..8754c08 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSessionArgs.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSessionArgs.java
@@ -49,7 +49,7 @@ public class BeanSessionArgs extends SessionArgs {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Properties.
+       // Properties
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/SessionArgs.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/SessionArgs.java
index acddb8e..d940e57 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/SessionArgs.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/SessionArgs.java
@@ -36,7 +36,7 @@ public class SessionArgs {
        public SessionArgs() {}
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Properties.
+       // Properties
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/AList.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/AList.java
index efa9a92..78b41e5 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/AList.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/AList.java
@@ -57,7 +57,7 @@ public class AList<T> extends ArrayList<T> {
        private static final long serialVersionUID = 1L;
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Constructors.
+       // Constructors
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -89,7 +89,7 @@ public class AList<T> extends ArrayList<T> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Creators.
+       // Creators
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -192,7 +192,7 @@ public class AList<T> extends ArrayList<T> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Appenders.
+       // Appenders
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -350,7 +350,7 @@ public class AList<T> extends ArrayList<T> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/AMap.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/AMap.java
index de56610..af593e8 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/AMap.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/AMap.java
@@ -53,7 +53,7 @@ public class AMap<K,V> extends LinkedHashMap<K,V> {
        private static final long serialVersionUID = 1L;
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Constructors.
+       // Constructors
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -71,7 +71,7 @@ public class AMap<K,V> extends LinkedHashMap<K,V> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Creators.
+       // Creators
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -184,7 +184,7 @@ public class AMap<K,V> extends LinkedHashMap<K,V> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Appenders.
+       // Appenders
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -258,7 +258,7 @@ public class AMap<K,V> extends LinkedHashMap<K,V> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/ASet.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/ASet.java
index 565e0f2..28f4137 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/ASet.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/ASet.java
@@ -56,7 +56,7 @@ public class ASet<T> extends LinkedHashSet<T> {
        private static final long serialVersionUID = 1L;
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Constructors.
+       // Constructors
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -74,7 +74,7 @@ public class ASet<T> extends LinkedHashSet<T> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Creators.
+       // Creators
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -167,7 +167,7 @@ public class ASet<T> extends LinkedHashSet<T> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Appenders.
+       // Appenders
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -271,7 +271,7 @@ public class ASet<T> extends LinkedHashSet<T> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/ASortedMap.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/ASortedMap.java
index 951753b..f8f49c7 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/ASortedMap.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/ASortedMap.java
@@ -52,7 +52,7 @@ public class ASortedMap<K,V> extends TreeMap<K,V> {
        private static final long serialVersionUID = 1L;
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Constructors.
+       // Constructors
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -81,7 +81,7 @@ public class ASortedMap<K,V> extends TreeMap<K,V> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Creators.
+       // Creators
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -137,7 +137,7 @@ public class ASortedMap<K,V> extends TreeMap<K,V> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Appenders.
+       // Appenders
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -211,7 +211,7 @@ public class ASortedMap<K,V> extends TreeMap<K,V> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/ASortedSet.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/ASortedSet.java
index 021f5df..d4a9590 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/ASortedSet.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/ASortedSet.java
@@ -54,7 +54,7 @@ public class ASortedSet<T> extends TreeSet<T> {
        private static final long serialVersionUID = 1L;
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Constructors.
+       // Constructors
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -81,7 +81,7 @@ public class ASortedSet<T> extends TreeSet<T> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Creators.
+       // Creators
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -115,7 +115,7 @@ public class ASortedSet<T> extends TreeSet<T> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Appenders.
+       // Appenders
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -219,7 +219,7 @@ public class ASortedSet<T> extends TreeSet<T> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/OList.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/OList.java
index 67326ee..e51f5a8 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/OList.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/OList.java
@@ -137,7 +137,7 @@ public class OList extends LinkedList<Object> {
        };
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Constructors.
+       // Constructors
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -236,7 +236,7 @@ public class OList extends LinkedList<Object> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Creators.
+       // Creators
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -355,7 +355,7 @@ public class OList extends LinkedList<Object> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Initializers.
+       // Initializers
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -376,7 +376,7 @@ public class OList extends LinkedList<Object> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Appenders.
+       // Appenders
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -521,7 +521,7 @@ public class OList extends LinkedList<Object> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Retrievers.
+       // Retrievers
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -835,7 +835,7 @@ public class OList extends LinkedList<Object> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -1017,7 +1017,7 @@ public class OList extends LinkedList<Object> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Utility methods.
+       // Utility methods
        
//------------------------------------------------------------------------------------------------------------------
 
        private void parse(Reader r, Parser p) throws ParseException {
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/OMap.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/OMap.java
index a087306..c9ef9bd 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/OMap.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/OMap.java
@@ -136,7 +136,7 @@ public class OMap extends LinkedHashMap<String,Object> {
        };
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Constructors.
+       // Constructors
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -245,7 +245,7 @@ public class OMap extends LinkedHashMap<String,Object> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Creators.
+       // Creators
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -344,7 +344,7 @@ public class OMap extends LinkedHashMap<String,Object> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Initializers.
+       // Initializers
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -393,7 +393,7 @@ public class OMap extends LinkedHashMap<String,Object> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Appenders.
+       // Appenders
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -620,7 +620,7 @@ public class OMap extends LinkedHashMap<String,Object> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Retrievers.
+       // Retrievers
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -1593,7 +1593,7 @@ public class OMap extends LinkedHashMap<String,Object> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//------------------------------------------------------------------------------------------------------------------
 
        @Override
@@ -1702,7 +1702,7 @@ public class OMap extends LinkedHashMap<String,Object> {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Utility methods.
+       // Utility methods
        
//------------------------------------------------------------------------------------------------------------------
 
        private BeanSession bs() {
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
index 161cf8b..82cde49 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
@@ -122,6 +122,15 @@ public class BeanStore {
                        return new BeanStore(this);
                }
 
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
+               }
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
                /**
                 * Specifies the parent bean store.
                 *
@@ -154,11 +163,6 @@ public class BeanStore {
                // <FluentSetters>
 
                @Override /* BeanBuilder */
-               public Builder copy() {
-                       return new Builder(this);
-               }
-
-               @Override /* BeanBuilder */
                public Builder type(Class<? extends BeanStore> value) {
                        super.type(value);
                        return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/FileFinder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/FileFinder.java
index 9c1ed4b..c9c78c9 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/FileFinder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/FileFinder.java
@@ -142,6 +142,15 @@ public interface FileFinder {
                        return new BasicFileFinder(this);
                }
 
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
+               }
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
                /**
                 * Adds a class subpackage to the lookup paths.
                 *
@@ -227,11 +236,6 @@ public interface FileFinder {
                // <FluentSetters>
 
                @Override /* BeanBuilder */
-               public Builder copy() {
-                       return new Builder(this);
-               }
-
-               @Override /* BeanBuilder */
                public Builder type(Class<? extends FileFinder> value) {
                        super.type(value);
                        return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java
index daff73b..00fb7d6 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java
@@ -226,6 +226,15 @@ public class Messages extends ResourceBundle {
                        public String locale;
                }
 
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
+               }
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
                /**
                 * Adds a parent bundle.
                 *
@@ -306,26 +315,9 @@ public class Messages extends ResourceBundle {
                        return this;
                }
 
-               ResourceBundle getBundle() {
-                       ClassLoader cl = forClass.getClassLoader();
-                       OMap m = OMap.of("name", name, "package", 
forClass.getPackage().getName());
-                       for (String bn : baseNames) {
-                               bn = StringUtils.replaceVars(bn, m);
-                               ResourceBundle rb = findBundle(bn, locale, cl);
-                               if (rb != null)
-                                       return rb;
-                       }
-                       return null;
-               }
-
                // <FluentSetters>
 
                @Override /* BeanBuilder */
-               public Builder copy() {
-                       return new Builder(this);
-               }
-
-               @Override /* BeanBuilder */
                public Builder type(Class<? extends Messages> value) {
                        super.type(value);
                        return this;
@@ -350,6 +342,22 @@ public class Messages extends ResourceBundle {
                }
 
                // <FluentSetters>
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Other methods
+               
//-------------------------------------------------------------------------------------------------------------
+
+               ResourceBundle getBundle() {
+                       ClassLoader cl = forClass.getClassLoader();
+                       OMap m = OMap.of("name", name, "package", 
forClass.getPackage().getName());
+                       for (String bn : baseNames) {
+                               bn = StringUtils.replaceVars(bn, m);
+                               ResourceBundle rb = findBundle(bn, locale, cl);
+                               if (rb != null)
+                                       return rb;
+                       }
+                       return null;
+               }
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderGroup.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderGroup.java
index 9f6d5f6..0f222ae 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderGroup.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderGroup.java
@@ -130,6 +130,15 @@ public final class EncoderGroup {
                        return new EncoderGroup(this);
                }
 
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
+               }
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
                /**
                 * Registers the specified encoders with this group.
                 *
@@ -237,11 +246,6 @@ public final class EncoderGroup {
                // <FluentSetters>
 
                @Override /* BeanBuilder */
-               public Builder copy() {
-                       return new Builder(this);
-               }
-
-               @Override /* BeanBuilder */
                public Builder type(Class<? extends EncoderGroup> value) {
                        super.type(value);
                        return this;
@@ -267,6 +271,10 @@ public final class EncoderGroup {
 
                // </FluentSetters>
 
+               
//-------------------------------------------------------------------------------------------------------------
+               // Other methods
+               
//-------------------------------------------------------------------------------------------------------------
+
                @Override /* Object */
                public String toString() {
                        return entries.stream().map(x -> 
toString(x)).collect(joining(",","[","]"));
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpHeaders.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpHeaders.java
index 1979191..d1e7dca 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpHeaders.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpHeaders.java
@@ -2644,7 +2644,7 @@ public class HttpHeaders {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Utility methods.
+       // Utility methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpParts.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpParts.java
index 288f087..f263424 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpParts.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpParts.java
@@ -408,7 +408,7 @@ public class HttpParts {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Utility methods.
+       // Utility methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderList.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderList.java
index b6026d9..07f2230 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderList.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderList.java
@@ -287,6 +287,15 @@ public class HeaderList {
                        return entries.isEmpty() && defaultEntries == null ? 
EMPTY : new HeaderList(this);
                }
 
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
+               }
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
                /**
                 * Allows header values to contain SVL variables.
                 *
@@ -1148,11 +1157,6 @@ public class HeaderList {
                // <FluentSetters>
 
                @Override /* BeanBuilder */
-               public Builder copy() {
-                       return new Builder(this);
-               }
-
-               @Override /* BeanBuilder */
                public Builder type(Class<? extends HeaderList> value) {
                        super.type(value);
                        return this;
@@ -1178,6 +1182,10 @@ public class HeaderList {
 
                // </FluentSetters>
 
+               
//-------------------------------------------------------------------------------------------------------------
+               // Other methods
+               
//-------------------------------------------------------------------------------------------------------------
+
                @Override /* Object */
                public String toString() {
                        return "[" + join(entries, ", ") + "]";
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartList.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartList.java
index b6ef8c1..fa26bbc 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartList.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartList.java
@@ -275,6 +275,15 @@ public class PartList {
                        return entries.isEmpty() && defaultEntries == null ? 
EMPTY : new PartList(this);
                }
 
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
+               }
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
                /**
                 * Allows part values to contain SVL variables.
                 *
@@ -1129,15 +1138,6 @@ public class PartList {
 
                // <FluentSetters>
 
-               @Override /* Object */
-               public String toString() {
-                       return "[" + join(entries, ", ") + "]";
-               }
-               @Override /* BeanBuilder */
-               public Builder copy() {
-                       return new Builder(this);
-               }
-
                @Override /* BeanBuilder */
                public Builder type(Class<? extends PartList> value) {
                        super.type(value);
@@ -1163,6 +1163,15 @@ public class PartList {
                }
 
                // </FluentSetters>
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Other methods
+               
//-------------------------------------------------------------------------------------------------------------
+
+               @Override /* Object */
+               public String toString() {
+                       return "[" + join(entries, ", ") + "]";
+               }
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/resource/HttpResourceBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/resource/HttpResourceBuilder.java
index f2513a5..68185d3 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/resource/HttpResourceBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/resource/HttpResourceBuilder.java
@@ -453,7 +453,7 @@ public class HttpResourceBuilder<T extends BasicResource> {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        private HeaderList.Builder headersBuilder() {
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpExceptionBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpExceptionBuilder.java
index 7828257..196355f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpExceptionBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpExceptionBuilder.java
@@ -409,7 +409,7 @@ public class HttpExceptionBuilder<T extends 
BasicHttpException> extends BasicRun
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        private BasicStatusLine.Builder statusLineBuilder() {
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpResponseBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpResponseBuilder.java
index d087905..f04475b 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpResponseBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpResponseBuilder.java
@@ -439,7 +439,7 @@ public class HttpResponseBuilder<T extends 
BasicHttpResponse> {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        private BasicStatusLine.Builder statusLineBuilder() {
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/mstat/MethodExecStats.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/mstat/MethodExecStats.java
index 499ad3e..93896ba 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/mstat/MethodExecStats.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/mstat/MethodExecStats.java
@@ -79,6 +79,15 @@ public class MethodExecStats {
                        return new MethodExecStats(this);
                }
 
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
+               }
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
                /**
                 * Specifies the Java method.
                 *
@@ -106,11 +115,6 @@ public class MethodExecStats {
                // <FluentSetters>
 
                @Override /* BeanBuilder */
-               public Builder copy() {
-                       return new Builder(this);
-               }
-
-               @Override /* BeanBuilder */
                public Builder type(Class<? extends MethodExecStats> value) {
                        super.type(value);
                        return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/mstat/MethodExecStore.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/mstat/MethodExecStore.java
index 2d3c0bb..a4fe703 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/mstat/MethodExecStore.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/mstat/MethodExecStore.java
@@ -77,6 +77,15 @@ public class MethodExecStore {
                        return new MethodExecStore(this);
                }
 
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
+               }
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
                /**
                 * Specifies a subclass of {@link MethodExecStats} to use for 
individual method statistics.
                 *
@@ -120,11 +129,6 @@ public class MethodExecStore {
                // <FluentSetters>
 
                @Override /* BeanBuilder */
-               public Builder copy() {
-                       return new Builder(this);
-               }
-
-               @Override /* BeanBuilder */
                public Builder type(Class<? extends MethodExecStore> value) {
                        super.type(value);
                        return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/mstat/ThrownStore.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/mstat/ThrownStore.java
index 1039d94..28a2d95 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/mstat/ThrownStore.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/mstat/ThrownStore.java
@@ -86,6 +86,15 @@ public class ThrownStore {
                        return new ThrownStore(this);
                }
 
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
+               }
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
                /**
                 * Specifies a subclass of {@link ThrownStats} to use for 
individual method statistics.
                 *
@@ -129,11 +138,6 @@ public class ThrownStore {
                // <FluentSetters>
 
                @Override /* BeanBuilder */
-               public Builder copy() {
-                       return new Builder(this);
-               }
-
-               @Override /* BeanBuilder */
                public Builder type(Class<? extends ThrownStore> value) {
                        super.type(value);
                        return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroup.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroup.java
index 1d9c049..6ae96ee 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroup.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroup.java
@@ -26,6 +26,7 @@ import java.util.stream.*;
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
+import org.apache.juneau.cp.*;
 import org.apache.juneau.http.header.*;
 
 /**
@@ -126,7 +127,7 @@ public final class ParserGroup {
        /**
         * Builder class.
         */
-       public static class Builder {
+       public static class Builder extends BeanBuilder<ParserGroup> {
 
                List<Object> entries;
                private BeanContextBuilder bcBuilder;
@@ -135,6 +136,7 @@ public final class ParserGroup {
                 * Create an empty parser group builder.
                 */
                protected Builder() {
+                       super(ParserGroup.class);
                        this.entries = AList.create();
                }
 
@@ -144,6 +146,7 @@ public final class ParserGroup {
                 * @param copyFrom The parser group that we're copying settings 
and parsers from.
                 */
                protected Builder(ParserGroup copyFrom) {
+                       super(copyFrom.getClass());
                        this.entries = 
AList.create().append(asList(copyFrom.entries));
                }
 
@@ -156,6 +159,7 @@ public final class ParserGroup {
                 * @param copyFrom The parser group that we're copying settings 
and parsers from.
                 */
                protected Builder(Builder copyFrom) {
+                       super(copyFrom);
                        bcBuilder = copyFrom.bcBuilder == null ? null : 
copyFrom.bcBuilder.copy();
                        entries = AList.create();
                        copyFrom.entries.stream().map(x -> 
copyBuilder(x)).forEach(x -> entries.add(x));
@@ -172,26 +176,19 @@ public final class ParserGroup {
                        return o;
                }
 
-               /**
-                * Copy creator.
-                *
-                * @return A new mutable copy of this builder.
-                */
+               @Override /* BeanBuilder */
+               protected ParserGroup buildDefault() {
+                       return new ParserGroup(this);
+               }
+
+               @Override /* BeanBuilder */
                public Builder copy() {
                        return new Builder(this);
                }
 
-               /**
-                * Creates a new {@link ParserGroup} object using a snapshot of 
the settings defined in this builder.
-                *
-                * <p>
-                * This method can be called multiple times to produce multiple 
parser groups.
-                *
-                * @return A new {@link ParserGroup} object.
-                */
-               public ParserGroup build() {
-                       return new ParserGroup(this);
-               }
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
 
                /**
                 * Associates an existing bean context builder with all parser 
builders in this group.
@@ -408,6 +405,34 @@ public final class ParserGroup {
                        return entries.stream().filter(x -> 
type.isInstance(x)).map(x -> (T)x);
                }
 
+               // <FluentSetters>
+
+               @Override /* BeanBuilder */
+               public Builder type(Class<? extends ParserGroup> value) {
+                       super.type(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
+               public Builder impl(ParserGroup value) {
+                       super.impl(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
+               public Builder outer(Object value) {
+                       super.outer(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
+               public Builder beanStore(BeanStore value) {
+                       super.beanStore(value);
+                       return this;
+               }
+
+               // </FluentSetters>
+
                @Override /* Object */
                public String toString() {
                        return entries.stream().map(x -> 
toString(x)).collect(joining(",","[","]"));
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSessionArgs.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSessionArgs.java
index c2e79fe..935819c 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSessionArgs.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSessionArgs.java
@@ -46,7 +46,7 @@ public final class ParserSessionArgs extends BeanSessionArgs {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Properties.
+       // Properties
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
index fa9ef89..198ee8d 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
@@ -76,7 +76,7 @@ public final class ClassInfo {
        private static final Map<Class<?>,ClassInfo> CACHE = new 
ConcurrentHashMap<>();
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Instantiation.
+       // Instantiation
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ConstructorInfo.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ConstructorInfo.java
index ad72054..24a13b0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ConstructorInfo.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ConstructorInfo.java
@@ -29,7 +29,7 @@ public final class ConstructorInfo extends ExecutableInfo 
implements Comparable<
        private final Constructor<?> c;
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Instantiation.
+       // Instantiation
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/FieldInfo.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/FieldInfo.java
index 41b921c..c4aafbf 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/FieldInfo.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/FieldInfo.java
@@ -29,7 +29,7 @@ public final class FieldInfo implements Comparable<FieldInfo> 
{
        private ClassInfo declaringClass, type;
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Instantiation.
+       // Instantiation
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
@@ -366,7 +366,7 @@ public final class FieldInfo implements 
Comparable<FieldInfo> {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java
index dc6eb84..5ee0a57 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java
@@ -35,7 +35,7 @@ public final class MethodInfo extends ExecutableInfo 
implements Comparable<Metho
        private Method[] matching;
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Instantiation.
+       // Instantiation
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ParamInfo.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ParamInfo.java
index a98a12a..e634946 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ParamInfo.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ParamInfo.java
@@ -31,7 +31,7 @@ public final class ParamInfo {
        private volatile Map<Class<?>,Optional<Annotation>> annotationMap;
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Instantiation.
+       // Instantiation
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
@@ -84,7 +84,7 @@ public final class ParamInfo {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Annotations.
+       // Annotations
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
@@ -229,7 +229,7 @@ public final class ParamInfo {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroup.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroup.java
index 5e62022..be41571 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroup.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroup.java
@@ -26,6 +26,7 @@ import java.util.stream.*;
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
+import org.apache.juneau.cp.*;
 import org.apache.juneau.http.header.*;
 
 /**
@@ -118,7 +119,7 @@ public final class SerializerGroup {
        /**
         * Builder class.
         */
-       public static class Builder {
+       public static class Builder extends BeanBuilder<SerializerGroup> {
 
                List<Object> entries;
                private BeanContextBuilder bcBuilder;
@@ -127,6 +128,7 @@ public final class SerializerGroup {
                 * Create an empty serializer group builder.
                 */
                protected Builder() {
+                       super(SerializerGroup.class);
                        this.entries = AList.create();
                }
 
@@ -136,6 +138,7 @@ public final class SerializerGroup {
                 * @param copyFrom The serializer group that we're copying 
settings and serializers from.
                 */
                protected Builder(SerializerGroup copyFrom) {
+                       super(copyFrom.getClass());
                        this.entries = 
AList.create().append(asList(copyFrom.entries));
                }
 
@@ -148,6 +151,7 @@ public final class SerializerGroup {
                 * @param copyFrom The serializer group that we're copying 
settings and serializers from.
                 */
                protected Builder(Builder copyFrom) {
+                       super(copyFrom);
                        bcBuilder = copyFrom.bcBuilder == null ? null : 
copyFrom.bcBuilder.copy();
                        entries = AList.create();
                        copyFrom.entries.stream().map(x -> 
copyBuilder(x)).forEach(x -> entries.add(x));
@@ -164,26 +168,19 @@ public final class SerializerGroup {
                        return o;
                }
 
-               /**
-                * Copy creator.
-                *
-                * @return A new mutable copy of this builder.
-                */
+               @Override /* BeanBuilder */
+               protected SerializerGroup buildDefault() {
+                       return new SerializerGroup(this);
+               }
+
+               @Override /* BeanBuilder */
                public Builder copy() {
                        return new Builder(this);
                }
 
-               /**
-                * Creates a new {@link SerializerGroup} object using a 
snapshot of the settings defined in this builder.
-                *
-                * <p>
-                * This method can be called multiple times to produce multiple 
serializer groups.
-                *
-                * @return A new {@link SerializerGroup} object.
-                */
-               public SerializerGroup build() {
-                       return new SerializerGroup(this);
-               }
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
 
                /**
                 * Associates an existing bean context builder with all 
serializer builders in this group.
@@ -397,6 +394,38 @@ public final class SerializerGroup {
                        return entries.stream().filter(x -> 
type.isInstance(x)).map(x -> (T)x);
                }
 
+               // <FluentSetters>
+
+               @Override /* BeanBuilder */
+               public Builder type(Class<? extends SerializerGroup> value) {
+                       super.type(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
+               public Builder impl(SerializerGroup value) {
+                       super.impl(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
+               public Builder outer(Object value) {
+                       super.outer(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
+               public Builder beanStore(BeanStore value) {
+                       super.beanStore(value);
+                       return this;
+               }
+
+               // </FluentSetters>
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Other methods
+               
//-------------------------------------------------------------------------------------------------------------
+
                @Override /* Object */
                public String toString() {
                        return entries.stream().map(x -> 
toString(x)).collect(joining(",","[","]"));
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSessionArgs.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSessionArgs.java
index ceddccb..4f3d904 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSessionArgs.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSessionArgs.java
@@ -52,7 +52,7 @@ public final class SerializerSessionArgs extends 
BeanSessionArgs {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Properties.
+       // Properties
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java
index b8951b7..dafe217 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java
@@ -144,6 +144,15 @@ public class VarResolver {
                        return new VarResolver(this);
                }
 
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
+               }
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
                /**
                 * Register new variables with this resolver.
                 *
@@ -230,11 +239,6 @@ public class VarResolver {
                // <FluentSetters>
 
                @Override /* BeanBuilder */
-               public Builder copy() {
-                       return new Builder(this);
-               }
-
-               @Override /* BeanBuilder */
                public Builder type(Class<? extends VarResolver> value) {
                        super.type(value);
                        return this;
diff --git 
a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
 
b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
index abe770b..5770d31 100755
--- 
a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
+++ 
b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
@@ -277,7 +277,7 @@ public class Microservice implements ConfigEventListener {
                }
 
                
//-------------------------------------------------------------------------------------------------------------
-               // Other.
+               // Other
                
//-------------------------------------------------------------------------------------------------------------
                this.listener = builder.listener != null ? builder.listener : 
new BasicMicroserviceListener();
 
@@ -717,7 +717,7 @@ public class Microservice implements ConfigEventListener {
 
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
 
b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
index b6e7c14..b43f35b 100755
--- 
a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
+++ 
b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
@@ -103,7 +103,7 @@ public class DirectoryResource extends BasicRestServlet {
 
        private final File rootDir;     // The root directory
 
-       // Settings enabled through servlet init parameters
+       // Properties enabled through servlet init parameters
        final boolean allowDeletes, allowUploads, allowViews;
 
        public DirectoryResource(Config c) throws Exception {
diff --git 
a/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
 
b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
index ec00c63..8e23c59 100644
--- 
a/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
+++ 
b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
@@ -471,7 +471,7 @@ public class JettyMicroservice extends Microservice {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Utility methods.
+       // Utility methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        private static ServletContextHandler getServletContextHandler(Handler 
h) {
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseHeader.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseHeader.java
index 7694f75..6268862 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseHeader.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseHeader.java
@@ -507,7 +507,7 @@ public class ResponseHeader implements Header {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Assertions.
+       // Assertions
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseStatusLine.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseStatusLine.java
index 41c6f0c..792eeb4 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseStatusLine.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseStatusLine.java
@@ -50,7 +50,7 @@ public class ResponseStatusLine implements StatusLine {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Assertions.
+       // Assertions
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
@@ -81,7 +81,7 @@ public class ResponseStatusLine implements StatusLine {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//------------------------------------------------------------------------------------------------------------------
 
        @Override /* Object */
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
index 288ccfc..bb1e2f7 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
@@ -3576,7 +3576,7 @@ public class RestClient extends BeanContextable 
implements HttpClient, Closeable
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        private Pattern absUrlPattern = Pattern.compile("^\\w+\\:\\/\\/.*");
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormParam.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormParam.java
index 2a6e252..eda5aa4 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormParam.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormParam.java
@@ -206,7 +206,7 @@ public class RequestFormParam extends RequestHttpPart 
implements NameValuePair {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Assertions.
+       // Assertions
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormParams.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormParams.java
index 5b05273..16f9c37 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormParams.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormParams.java
@@ -459,7 +459,7 @@ public class RequestFormParams {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeader.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeader.java
index 2f97a38..55fe96d 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeader.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeader.java
@@ -212,7 +212,7 @@ public class RequestHeader extends RequestHttpPart 
implements Header {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Assertions.
+       // Assertions
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeaders.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeaders.java
index c25b3ea..64279e1 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeaders.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeaders.java
@@ -458,7 +458,7 @@ public class RequestHeaders {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPathParam.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPathParam.java
index 848c054..f7d0ed3 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPathParam.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPathParam.java
@@ -176,7 +176,7 @@ public class RequestPathParam extends RequestHttpPart 
implements NameValuePair {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Assertions.
+       // Assertions
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPathParams.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPathParams.java
index fcb748b..20f7651 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPathParams.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPathParams.java
@@ -415,7 +415,7 @@ public class RequestPathParams {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQueryParam.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQueryParam.java
index 723bd21..6c6842e 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQueryParam.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQueryParam.java
@@ -185,7 +185,7 @@ public class RequestQueryParam extends RequestHttpPart 
implements NameValuePair
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Assertions.
+       // Assertions
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQueryParams.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQueryParams.java
index ec1c1bc..dec3860 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQueryParams.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQueryParams.java
@@ -425,7 +425,7 @@ public class RequestQueryParams {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ResponseProcessorList.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ResponseProcessorList.java
index 9b771b2..cf7411e 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ResponseProcessorList.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ResponseProcessorList.java
@@ -47,16 +47,15 @@ public class ResponseProcessorList {
        /**
         * Builder class.
         */
-       public static class Builder {
+       public static class Builder extends BeanBuilder<ResponseProcessorList> {
 
                List<Object> entries;
-               ResponseProcessorList impl;
-               BeanStore beanStore = BeanStore.INSTANCE;
 
                /**
                 * Constructor.
                 */
                protected Builder() {
+                       super(ResponseProcessorList.class);
                        this.entries = AList.create();
                }
 
@@ -66,20 +65,24 @@ public class ResponseProcessorList {
                 * @param copyFrom The builder to copy.
                 */
                protected Builder(Builder copyFrom) {
+                       super(copyFrom);
                        this.entries = AList.create().append(copyFrom.entries);
                }
 
-               /**
-                * Creates a new {@link ResponseProcessorList} object using a 
snapshot of the settings defined in this builder.
-                *
-                * @return A new {@link ResponseProcessorList} object.
-                */
-               public ResponseProcessorList build() {
-                       if (impl != null)
-                               return impl;
+               @Override /* BeanBuilder */
+               protected ResponseProcessorList buildDefault() {
                        return new ResponseProcessorList(this);
                }
 
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
+               }
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
                /**
                 * Appends the specified rest response processor classes to the 
list.
                 *
@@ -103,36 +106,33 @@ public class ResponseProcessorList {
                        return this;
                }
 
-               /**
-                * Specifies the bean store to use for instantiating rest 
response processor classes.
-                *
-                * @param value The bean store to use for instantiating rest 
response processor classes.
-                * @return This object.
-                */
-               public Builder beanStore(BeanStore value) {
-                       beanStore = value;
+               // <FluentSetters>
+
+               @Override /* BeanBuilder */
+               public Builder type(Class<? extends ResponseProcessorList> 
value) {
+                       super.type(value);
                        return this;
                }
 
-               /**
-                * Specifies a pre-instantiated bean to return from {@link 
#build()}.
-                *
-                * @param value The value for this setting.
-                * @return This object.
-                */
+               @Override /* BeanBuilder */
                public Builder impl(ResponseProcessorList value) {
-                       this.impl = value;
+                       super.impl(value);
                        return this;
                }
 
-               /**
-                * Creates a copy of this builder.
-                *
-                * @return A copy of this builder.
-                */
-               public Builder copy() {
-                       return new Builder(this);
+               @Override /* BeanBuilder */
+               public Builder outer(Object value) {
+                       super.outer(value);
+                       return this;
                }
+
+               @Override /* BeanBuilder */
+               public Builder beanStore(BeanStore value) {
+                       super.beanStore(value);
+                       return this;
+               }
+
+               // </FluentSetters>
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
@@ -147,11 +147,12 @@ public class ResponseProcessorList {
         * @param builder The builder containing the contents for this list.
         */
        protected ResponseProcessorList(Builder builder) {
+               BeanStore bs = builder.beanStore().orElse(BeanStore.INSTANCE);
                entries =
                        builder
                                .entries
                                .stream()
-                               .map(x -> instantiate(x, builder.beanStore))
+                               .map(x -> instantiate(x, bs))
                                .toArray(ResponseProcessor[]::new);
        }
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestCall.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestCall.java
index edc2594..d46ae74 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestCall.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestCall.java
@@ -239,7 +239,7 @@ public class RestCall {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
-       // Getters.
+       // Getters
        
//------------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildren.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildren.java
index 9943578..c90e046 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildren.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildren.java
@@ -12,16 +12,13 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.rest;
 
-import static org.apache.juneau.internal.ClassUtils.*;
-import static org.apache.juneau.rest.HttpRuntimeException.*;
-
 import java.util.*;
 
 import javax.servlet.*;
 
+import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.cp.*;
-import org.apache.juneau.http.response.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.util.*;
 
@@ -60,38 +57,42 @@ public class RestChildren {
        /**
         * Builder class.
         */
-       public static class Builder {
-
-               final List<RestContext> list = AList.create();
+       public static class Builder extends BeanBuilder<RestChildren> {
 
-               private BeanStore beanStore;
-               private Class<? extends RestChildren> type;
-               private RestChildren impl;
+               final List<RestContext> list;
 
                /**
-                * Instantiates a {@link RestChildren} object based on the 
contents of this builder.
-                *
-                * @return A new {@link RestChildren} object.
+                * Constructor.
                 */
-               public RestChildren build() {
-                       try {
-                               if (impl != null)
-                                       return impl;
-                               return 
BeanCreator.create(RestChildren.class).type(isConcrete(type) ? type : 
getDefaultImplClass()).store(beanStore).builder(this).run();
-                       } catch (Exception e) {
-                               throw toHttpException(e, 
InternalServerError.class);
-                       }
+               protected Builder() {
+                       super(RestChildren.class);
+                       list = AList.create();
                }
 
                /**
-                * Specifies the default implementation class if not specified 
via {@link #type(Class)}.
+                * Copy constructor.
                 *
-                * @return The default implementation class if not specified 
via {@link #type(Class)}.
+                * @param copyFrom The builder being copied.
                 */
-               protected Class<? extends RestChildren> getDefaultImplClass() {
-                       return RestChildren.class;
+               protected Builder(Builder copyFrom) {
+                       super(copyFrom);
+                       list = AList.of(copyFrom.list);
+               }
+
+               @Override /* BeanBuilder */
+               protected RestChildren buildDefault() {
+                       return new RestChildren(this);
+               }
+
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
                }
 
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
                /**
                 * Adds a child resource to this builder.
                 *
@@ -103,49 +104,33 @@ public class RestChildren {
                        return this;
                }
 
-               /**
-                * Specifies a {@link RestChildren} implementation subclass to 
use.
-                *
-                * <p>
-                * When specified, the {@link #build()} method will create an 
instance of that class instead of the default {@link RestChildren}.
-                *
-                * <p>
-                * The subclass must have a public constructor that takes in 
any of the following arguments:
-                * <ul>
-                *      <li>{@link Builder} - This object.
-                *      <li>Any beans found in the specified {@link 
#beanStore(BeanStore) bean store}.
-                *      <li>Any {@link Optional} beans that may or may not be 
found in the specified {@link #beanStore(BeanStore) bean store}.
-                * </ul>
-                *
-                * @param value The implementation class to build.
-                * @return This object.
-                */
+               // <FluentSetters>
+
+               @Override /* BeanBuilder */
                public Builder type(Class<? extends RestChildren> value) {
-                       type = value;
+                       super.type(value);
                        return this;
                }
 
-               /**
-                * Specifies a {@link BeanStore} to use when resolving 
constructor arguments.
-                *
-                * @param value The bean store to use for resolving constructor 
arguments.
-                * @return This object.
-                */
-               public Builder beanStore(BeanStore value) {
-                       beanStore = value;
+               @Override /* BeanBuilder */
+               public Builder impl(RestChildren value) {
+                       super.impl(value);
                        return this;
                }
 
-               /**
-                * Specifies an already-instantiated bean for the {@link 
#build()} method to return.
-                *
-                * @param value The value for this setting.
-                * @return This object.
-                */
-               public Builder impl(RestChildren value) {
-                       impl = value;
+               @Override /* BeanBuilder */
+               public Builder outer(Object value) {
+                       super.outer(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
+               public Builder beanStore(BeanStore value) {
+                       super.beanStore(value);
                        return this;
                }
+
+               // </FluentSetters>
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
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 a2b0b02..48224e1 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
@@ -15,6 +15,7 @@ package org.apache.juneau.rest;
 import static javax.servlet.http.HttpServletResponse.*;
 import static org.apache.juneau.http.HttpHeaders.*;
 import static org.apache.juneau.internal.ClassUtils.*;
+import static org.apache.juneau.internal.ExceptionUtils.*;
 import static org.apache.juneau.internal.IOUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.rest.HttpRuntimeException.*;
@@ -1567,10 +1568,25 @@ public class RestContext extends Context {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        @Override /* Context */
+       public ContextBuilder copy() {
+               throw unsupportedOperationException("Method not implemented.");
+       }
+
+       @Override /* Context */
+       public Session createSession(SessionArgs args) {
+               throw unsupportedOperationException("Method not implemented.");
+       }
+
+       @Override /* Context */
+       public SessionArgs createDefaultSessionArgs() {
+               throw unsupportedOperationException("Method not implemented.");
+       }
+
+       @Override /* Context */
        public OMap toMap() {
                return super.toMap()
                        .a(
@@ -1602,27 +1618,4 @@ public class RestContext extends Context {
                                        .a("uriResolution", uriResolution)
                        );
        }
-
-       @Override
-       public ContextBuilder copy() {
-               // TODO Auto-generated method stub
-               return null;
-       }
-
-       @Override
-       public Session createSession(SessionArgs args) {
-               // TODO Auto-generated method stub
-               return null;
-       }
-
-       @Override
-       public SessionArgs createDefaultSessionArgs() {
-               // TODO Auto-generated method stub
-               return null;
-       }
-
-       
//-----------------------------------------------------------------------------------------------------------------
-       // Helpers.
-       
//-----------------------------------------------------------------------------------------------------------------
-
 }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestConverterList.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestConverterList.java
index 88ba6eb..56142af 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestConverterList.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestConverterList.java
@@ -41,27 +41,42 @@ public class RestConverterList {
        /**
         * Builder class.
         */
-       public static class Builder {
+       public static class Builder extends BeanBuilder<RestConverterList> {
 
                AList<Object> entries;
-               BeanStore beanStore;
 
                /**
                 * Create an empty builder.
                 */
                protected Builder() {
+                       super(RestConverterList.class);
                        this.entries = AList.create();
                }
 
                /**
-                * Creates a new {@link RestConverterList} object using a 
snapshot of the settings defined in this builder.
+                * Copy constructor.
                 *
-                * @return A new {@link RestConverterList} object.
+                * @param copyFrom The builder being copied.
                 */
-               public RestConverterList build() {
+               protected Builder(Builder copyFrom) {
+                       super(copyFrom);
+                       entries = AList.of(copyFrom.entries);
+               }
+
+               @Override /* BeanBuilder */
+               protected RestConverterList buildDefault() {
                        return new RestConverterList(this);
                }
 
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
+               }
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
                /**
                 * Appends the specified rest matcher classes to the list.
                 *
@@ -85,16 +100,33 @@ public class RestConverterList {
                        return this;
                }
 
-               /**
-                * Specifies the bean store to use for instantiating rest 
matcher classes.
-                *
-                * @param value The bean store to use for instantiating rest 
matcher classes.
-                * @return This object (for method chaining).
-                */
+               // <FluentSetters>
+
+               @Override /* BeanBuilder */
+               public Builder type(Class<? extends RestConverterList> value) {
+                       super.type(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
+               public Builder impl(RestConverterList value) {
+                       super.impl(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
+               public Builder outer(Object value) {
+                       super.outer(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
                public Builder beanStore(BeanStore value) {
-                       beanStore = value;
+                       super.beanStore(value);
                        return this;
                }
+
+               // </FluentSetters>
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
@@ -109,11 +141,12 @@ public class RestConverterList {
         * @param builder The builder containing the contents for this list.
         */
        protected RestConverterList(Builder builder) {
+               BeanStore bs = builder.beanStore().orElse(BeanStore.INSTANCE);
                entries =
                        builder
                                .entries
                                .stream()
-                               .map(x -> instantiate(x, builder.beanStore))
+                               .map(x -> instantiate(x, bs))
                                .toArray(RestConverter[]::new);
        }
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestGuardList.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestGuardList.java
index e1c4436..34b7a98 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestGuardList.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestGuardList.java
@@ -41,27 +41,42 @@ public class RestGuardList {
        /**
         * Builder class.
         */
-       public static class Builder {
+       public static class Builder extends BeanBuilder<RestGuardList> {
 
                AList<Object> entries;
-               BeanStore beanStore;
 
                /**
-                * Create an empty builder.
+                * Constructor.
                 */
                protected Builder() {
-                       this.entries = AList.create();
+                       super(RestGuardList.class);
+                       entries = AList.create();
                }
 
                /**
-                * Creates a new {@link RestGuardList} object using a snapshot 
of the settings defined in this builder.
+                * Copy constructor.
                 *
-                * @return A new {@link RestGuardList} object.
+                * @param copyFrom The builder being copied.
                 */
-               public RestGuardList build() {
+               protected Builder(Builder copyFrom) {
+                       super(copyFrom);
+                       entries = AList.of(copyFrom.entries);
+               }
+
+               @Override /* BeanBuilder */
+               protected RestGuardList buildDefault() {
                        return new RestGuardList(this);
                }
 
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
+               }
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
                /**
                 * Appends the specified rest matcher classes to the list.
                 *
@@ -85,16 +100,33 @@ public class RestGuardList {
                        return this;
                }
 
-               /**
-                * Specifies the bean store to use for instantiating rest 
matcher classes.
-                *
-                * @param value The bean store to use for instantiating rest 
matcher classes.
-                * @return This object (for method chaining).
-                */
+               // <FluentSetters>
+
+               @Override /* BeanBuilder */
+               public Builder type(Class<? extends RestGuardList> value) {
+                       super.type(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
+               public Builder impl(RestGuardList value) {
+                       super.impl(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
+               public Builder outer(Object value) {
+                       super.outer(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
                public Builder beanStore(BeanStore value) {
-                       beanStore = value;
+                       super.beanStore(value);
                        return this;
                }
+
+               // </FluentSetters>
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
@@ -109,11 +141,12 @@ public class RestGuardList {
         * @param builder The builder containing the contents for this list.
         */
        protected RestGuardList(Builder builder) {
+               BeanStore bs = builder.beanStore().orElse(BeanStore.INSTANCE);
                entries =
                        builder
                                .entries
                                .stream()
-                               .map(x -> instantiate(x, builder.beanStore))
+                               .map(x -> instantiate(x, bs))
                                .toArray(RestGuard[]::new);
        }
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMatcherList.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMatcherList.java
index 96aac5d..5a33d6a 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMatcherList.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMatcherList.java
@@ -45,27 +45,42 @@ public class RestMatcherList {
        /**
         * Builder class.
         */
-       public static class Builder {
+       public static class Builder extends BeanBuilder<RestMatcherList> {
 
                AList<Object> entries;
-               BeanStore beanStore;
 
                /**
-                * Create an empty builder.
+                * Constructor.
                 */
                protected Builder() {
-                       this.entries = AList.create();
+                       super(RestMatcherList.class);
+                       entries = AList.create();
                }
 
                /**
-                * Creates a new {@link RestMatcherList} object using a 
snapshot of the settings defined in this builder.
+                * Copy constructor.
                 *
-                * @return A new {@link RestMatcherList} object.
+                * @param copyFrom The builder being copied.
                 */
-               public RestMatcherList build() {
+               protected Builder(Builder copyFrom) {
+                       super(copyFrom);
+                       entries = AList.of(copyFrom.entries);
+               }
+
+               @Override /* BeanBuilder */
+               protected RestMatcherList buildDefault() {
                        return new RestMatcherList(this);
                }
 
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
+               }
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
                /**
                 * Appends the specified rest matcher classes to the list.
                 *
@@ -89,16 +104,33 @@ public class RestMatcherList {
                        return this;
                }
 
-               /**
-                * Specifies the bean store to use for instantiating rest 
matcher classes.
-                *
-                * @param value The bean store to use for instantiating rest 
matcher classes.
-                * @return This object (for method chaining).
-                */
+               // <FluentSetters>
+
+               @Override /* BeanBuilder */
+               public Builder type(Class<? extends RestMatcherList> value) {
+                       super.type(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
+               public Builder impl(RestMatcherList value) {
+                       super.impl(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
+               public Builder outer(Object value) {
+                       super.outer(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
                public Builder beanStore(BeanStore value) {
-                       beanStore = value;
+                       super.beanStore(value);
                        return this;
                }
+
+               // </FluentSetters>
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
@@ -114,11 +146,12 @@ public class RestMatcherList {
         * @param builder The builder containing the contents for this list.
         */
        protected RestMatcherList(Builder builder) {
+               BeanStore bs = builder.beanStore().orElse(BeanStore.INSTANCE);
                List<RestMatcher> l =
                        builder
                                .entries
                                .stream()
-                               .map(x -> instantiate(x, builder.beanStore))
+                               .map(x -> instantiate(x, bs))
                                .collect(toList());
                optionalEntries = l.stream().filter(x -> ! 
x.required()).toArray(RestMatcher[]::new);
                requiredEntries = l.stream().filter(x -> 
x.required()).toArray(RestMatcher[]::new);
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestObject.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestObject.java
index 86e2299..ec25af2 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestObject.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestObject.java
@@ -420,7 +420,7 @@ public abstract class RestObject {
        public void onEndCall(HttpServletRequest req, HttpServletResponse res) 
throws Exception {}
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpArgList.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpArgList.java
index de4127f..86b5162 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpArgList.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpArgList.java
@@ -16,6 +16,7 @@ import static org.apache.juneau.assertions.Assertions.*;
 
 import java.util.*;
 
+import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.cp.*;
 
@@ -55,17 +56,16 @@ public class RestOpArgList {
        /**
         * Builder class.
         */
-       public static class Builder {
+       public static class Builder extends BeanBuilder<RestOpArgList> {
 
                AList<Class<? extends RestOpArg>> entries;
-               BeanStore beanStore;
-               RestOpArgList impl;
 
                /**
                 * Constructor.
                 */
                protected Builder() {
-                       this.entries = AList.create();
+                       super(RestOpArgList.class);
+                       entries = AList.create();
                }
 
                /**
@@ -74,20 +74,24 @@ public class RestOpArgList {
                 * @param copyFrom The builder being copied.
                 */
                protected Builder(Builder copyFrom) {
-                       this.entries = AList.of(copyFrom.entries);
+                       super(copyFrom);
+                       entries = AList.of(copyFrom.entries);
                }
 
-               /**
-                * Creates a new {@link RestOpArgList} object using a snapshot 
of the settings defined in this builder.
-                *
-                * @return A new {@link RestOpArgList} object.
-                */
-               public RestOpArgList build() {
-                       if (impl != null)
-                               return impl;
+               @Override /* BeanBuilder */
+               protected RestOpArgList buildDefault() {
                        return new RestOpArgList(this);
                }
 
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
+               }
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
                /**
                 * Prepends the specified rest op arg classes to the list.
                 *
@@ -100,25 +104,33 @@ public class RestOpArgList {
                        return this;
                }
 
-               /**
-                * Creates a copy of this builder.
-                *
-                * @return A copy of this builder.
-                */
-               public Builder copy() {
-                       return new Builder(this);
+               // <FluentSetters>
+
+               @Override /* BeanBuilder */
+               public Builder type(Class<? extends RestOpArgList> value) {
+                       super.type(value);
+                       return this;
                }
 
-               /**
-                * Specifies an already instantiated bean for the {@link 
#build()} method to return.
-                *
-                * @param value The value for this setting.
-                * @return This object.
-                */
+               @Override /* BeanBuilder */
                public Builder impl(RestOpArgList value) {
-                       impl = value;
+                       super.impl(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
+               public Builder outer(Object value) {
+                       super.outer(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
+               public Builder beanStore(BeanStore value) {
+                       super.beanStore(value);
                        return this;
                }
+
+               // </FluentSetters>
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
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 8d4d9ce..1f7b9be 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
@@ -1273,7 +1273,7 @@ public class RestOpContext extends BeanContext implements 
Comparable<RestOpConte
 
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        /*
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperations.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperations.java
index 226182c..468008f 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperations.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperations.java
@@ -13,11 +13,9 @@
 package org.apache.juneau.rest;
 
 import static org.apache.juneau.internal.ClassUtils.*;
-import static org.apache.juneau.internal.ObjectUtils.*;
-import static org.apache.juneau.rest.HttpRuntimeException.*;
-
 import java.util.*;
 
+import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.cp.*;
 import org.apache.juneau.http.response.*;
@@ -58,39 +56,45 @@ public class RestOperations {
        /**
         * Builder class.
         */
-       public static class Builder  {
-
-               TreeMap<String,TreeSet<RestOpContext>> map = new TreeMap<>();
-               Set<RestOpContext> set = ASet.of();
+       public static class Builder extends BeanBuilder<RestOperations> {
 
-               private BeanStore beanStore;
-               private Class<? extends RestOperations> type;
-               private RestOperations impl;
+               TreeMap<String,TreeSet<RestOpContext>> map;
+               Set<RestOpContext> set;
 
                /**
-                * Instantiates a {@link RestOperations} object based on the 
contents of this builder.
-                *
-                * @return A new {@link RestOperations} object.
+                * Constructor.
                 */
-               public RestOperations build() {
-                       try {
-                               if (impl != null)
-                                       return impl;
-                               return 
BeanCreator.create(RestOperations.class).type(firstNonNull(type, 
getDefaultImplClass())).store(beanStore).builder(this).run();
-                       } catch (Exception e) {
-                               throw toHttpException(e, 
InternalServerError.class);
-                       }
+               protected Builder() {
+                       super(RestOperations.class);
+                       map = new TreeMap<>();
+                       set = ASet.of();
                }
 
                /**
-                * Specifies the default implementation class if not specified 
via {@link #type(Class)}.
+                * Copy constructor.
                 *
-                * @return The default implementation class if not specified 
via {@link #type(Class)}.
+                * @param copyFrom The builder being copied.
                 */
-               protected Class<? extends RestOperations> getDefaultImplClass() 
{
-                       return RestOperations.class;
+               protected Builder(Builder copyFrom) {
+                       super(copyFrom);
+                       map = new TreeMap<>(copyFrom.map);
+                       set = ASet.of(copyFrom.set);
+               }
+
+               @Override /* BeanBuilder */
+               protected RestOperations buildDefault() {
+                       return new RestOperations(this);
+               }
+
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
                }
 
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
                /**
                 * Adds a method context to this builder.
                 *
@@ -117,49 +121,33 @@ public class RestOperations {
                        return this;
                }
 
-               /**
-                * Specifies a {@link RestOperations} implementation subclass 
to use.
-                *
-                * <p>
-                * When specified, the {@link #build()} method will create an 
instance of that class instead of the default {@link RestOperations}.
-                *
-                * <p>
-                * The subclass must have a public constructor that takes in 
any of the following arguments:
-                * <ul>
-                *      <li>{@link Builder} - This object.
-                *      <li>Any beans found in the specified {@link 
#beanStore(BeanStore) bean store}.
-                *      <li>Any {@link Optional} beans that may or may not be 
found in the specified {@link #beanStore(BeanStore) bean store}.
-                * </ul>
-                *
-                * @param value The implementation class to build.
-                * @return This object.
-                */
+               // <FluentSetters>
+
+               @Override /* BeanBuilder */
                public Builder type(Class<? extends RestOperations> value) {
-                       type = value;
+                       super.type(value);
                        return this;
                }
 
-               /**
-                * Specifies a {@link BeanStore} to use when resolving 
constructor arguments.
-                *
-                * @param value The bean store to use for resolving constructor 
arguments.
-                * @return This object.
-                */
-               public Builder beanStore(BeanStore value) {
-                       beanStore = value;
+               @Override /* BeanBuilder */
+               public Builder impl(RestOperations value) {
+                       super.impl(value);
                        return this;
                }
 
-               /**
-                * Specifies an already-instantiated bean for the {@link 
#build()} method to return.
-                *
-                * @param value The value for this setting.
-                * @return This object.
-                */
-               public Builder impl(RestOperations value) {
-                       impl = value;
+               @Override /* BeanBuilder */
+               public Builder outer(Object value) {
+                       super.outer(value);
                        return this;
                }
+
+               @Override /* BeanBuilder */
+               public Builder beanStore(BeanStore value) {
+                       super.beanStore(value);
+                       return this;
+               }
+
+               // </FluentSetters>
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
index c46901f..d9eec9a 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
@@ -526,7 +526,7 @@ public abstract class RestServlet extends HttpServlet {
        public void onEndCall(HttpServletRequest req, HttpServletResponse res) 
throws Exception {}
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // Other methods.
+       // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StaticFiles.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StaticFiles.java
index e35590f..c54d61a 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StaticFiles.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StaticFiles.java
@@ -86,6 +86,15 @@ public interface StaticFiles extends FileFinder {
                        return new BasicStaticFiles(this);
                }
 
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
+               }
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
                /**
                 * Appends headers to add to HTTP responses.
                 *
@@ -206,11 +215,6 @@ public interface StaticFiles extends FileFinder {
                // <FluentSetters>
 
                @Override /* BeanBuilder */
-               public Builder copy() {
-                       return new Builder(this);
-               }
-
-               @Override /* BeanBuilder */
                public Builder type(Class<? extends StaticFiles> value) {
                        super.type(value);
                        return this;
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/RestLogger.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/RestLogger.java
index 4304b85..003f477 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/RestLogger.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/RestLogger.java
@@ -13,8 +13,6 @@
 package org.apache.juneau.rest.logging;
 
 import static org.apache.juneau.Enablement.*;
-import static org.apache.juneau.internal.ClassUtils.*;
-import static org.apache.juneau.rest.HttpRuntimeException.*;
 
 import java.util.*;
 import java.util.function.*;
@@ -25,7 +23,6 @@ import javax.servlet.http.*;
 import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.cp.*;
-import org.apache.juneau.http.response.*;
 import org.apache.juneau.mstat.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
@@ -149,7 +146,7 @@ public interface RestLogger {
        /**
         * Builder class.
         */
-       public static class Builder {
+       public static class Builder extends BeanBuilder<RestLogger> {
 
                Logger logger;
                ThrownStore thrownStore;
@@ -158,14 +155,13 @@ public interface RestLogger {
                Predicate<HttpServletRequest> enabledTest;
                RestLoggingDetail requestDetail, responseDetail;
                Level level;
-               BeanStore beanStore;
-               Class<? extends RestLogger> type;
-               RestLogger impl;
 
                /**
                 * Constructor.
                 */
-               protected Builder() {}
+               protected Builder() {
+                       super(BasicRestLogger.class);
+               }
 
                /**
                 * Copy constuctor.
@@ -173,6 +169,7 @@ public interface RestLogger {
                 * @param copyFrom The builder to copy.
                 */
                protected Builder(Builder copyFrom) {
+                       super(copyFrom);
                        logger = copyFrom.logger;
                        thrownStore = copyFrom.thrownStore;
                        normalRules = 
AList.<RestLoggerRule>create().append(copyFrom.normalRules);
@@ -182,52 +179,27 @@ public interface RestLogger {
                        requestDetail = copyFrom.requestDetail;
                        responseDetail = copyFrom.responseDetail;
                        level = copyFrom.level;
-                       beanStore = copyFrom.beanStore;
-                       type = copyFrom.type;
-                       impl = copyFrom.impl;
                }
 
-               /**
-                * Creates a new {@link RestLogger} object from this builder.
-                *
-                * <p>
-                * Instantiates an instance of the {@link #type(Class) 
implementation class} or
-                * else {@link BasicRestLogger} if implementation class was not 
specified.
-                *
-                * @return A new {@link RestLogger} object.
-                */
-               public RestLogger build() {
-                       try {
-                               if (impl != null)
-                                       return impl;
-                               return 
BeanCreator.create(RestLogger.class).type(isConcrete(type) ? type : 
BasicRestLogger.class).store(beanStore).builder(this).findSingleton().run();
-                       } catch (Exception e) {
-                               throw toHttpException(e, 
InternalServerError.class);
-                       }
+               @Override /* BeanBuilder */
+               protected RestLogger buildDefault() {
+                       return new BasicRestLogger(this);
                }
 
-               /**
-                * Specifies the bean store to use for instantiating the {@link 
RestLogger} object.
-                *
-                * @param value The new value for this setting.
-                * @return  This object.
-                */
-               public Builder beanStore(BeanStore value) {
-                       beanStore = value;
-                       return this;
+               @Override /* BeanBuilder */
+               protected BeanCreator<? extends RestLogger> creator() {
+                       return super.creator().findSingleton();
                }
 
-               /**
-                * Specifies a subclass of {@link RestLogger} to create when 
the {@link #build()} method is called.
-                *
-                * @param value The new value for this setting.
-                * @return  This object.
-                */
-               public Builder type(Class<? extends RestLogger> value) {
-                       type = value;
-                       return this;
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
                }
 
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
                /**
                 * Specifies the logger to use for logging the request.
                 *
@@ -505,25 +477,33 @@ public interface RestLogger {
                        return normalRules(values).debugRules(values);
                }
 
-               /**
-                * Specifies an already-instantiated bean for the {@link 
#build()} method to return.
-                *
-                * @param value The value for this setting.
-                * @return This object.
-                */
+               // <FluentSetters>
+
+               @Override /* BeanBuilder */
+               public Builder type(Class<? extends RestLogger> value) {
+                       super.type(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
                public Builder impl(RestLogger value) {
-                       impl = value;
+                       super.impl(value);
                        return this;
                }
 
-               /**
-                * Creates a copy of this builder.
-                *
-                * @return A copy of this builder.
-                */
-               public Builder copy() {
-                       return new Builder(this);
+               @Override /* BeanBuilder */
+               public Builder outer(Object value) {
+                       super.outer(value);
+                       return this;
                }
+
+               @Override /* BeanBuilder */
+               public Builder beanStore(BeanStore value) {
+                       super.beanStore(value);
+                       return this;
+               }
+
+               // </FluentSetters>
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/RestLoggerRule.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/RestLoggerRule.java
index 00fb92b..01e526c 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/RestLoggerRule.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/RestLoggerRule.java
@@ -19,6 +19,7 @@ import javax.servlet.http.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
+import org.apache.juneau.cp.*;
 import org.apache.juneau.json.*;
 
 /**
@@ -46,7 +47,7 @@ public class RestLoggerRule {
        /**
         * Builder class.
         */
-       public static class Builder {
+       public static class Builder extends BeanBuilder<RestLoggerRule> {
 
                Predicate<Integer> statusFilter;
                Predicate<HttpServletRequest> requestFilter;
@@ -59,6 +60,46 @@ public class RestLoggerRule {
                boolean logStackTrace;
 
                /**
+                * Constructor.
+                */
+               protected Builder() {
+                       super(RestLoggerRule.class);
+               }
+
+               /**
+                * Copy constructor.
+                *
+                * @param copyFrom The builder being copied.
+                */
+               protected Builder(Builder copyFrom) {
+                       super(copyFrom);
+                       statusFilter = copyFrom.statusFilter;
+                       requestFilter = copyFrom.requestFilter;
+                       responseFilter = copyFrom.responseFilter;
+                       exceptionFilter = copyFrom.exceptionFilter;
+                       enabled = copyFrom.enabled;
+                       enabledTest = copyFrom.enabledTest;
+                       level = copyFrom.level;
+                       requestDetail = copyFrom.requestDetail;
+                       responseDetail = copyFrom.responseDetail;
+                       logStackTrace = copyFrom.logStackTrace;
+               }
+
+               @Override /* BeanBuilder */
+               protected RestLoggerRule buildDefault() {
+                       return new RestLoggerRule(this);
+               }
+
+               @Override /* BeanBuilder */
+               public Builder copy() {
+                       return new Builder(this);
+               }
+
+               
//-------------------------------------------------------------------------------------------------------------
+               // Properties
+               
//-------------------------------------------------------------------------------------------------------------
+
+               /**
                 * Apply a status-based predicate check for this rule to match 
against.
                 *
                 * <h5 class='section'>Example:</h5>
@@ -283,14 +324,33 @@ public class RestLoggerRule {
                        return this;
                }
 
-               /**
-                * Instantiates a new {@link RestLoggerRule} object using the 
settings in this builder.
-                *
-                * @return A new {@link RestLoggerRule} object.
-                */
-               public RestLoggerRule build() {
-                       return new RestLoggerRule(this);
+               // <FluentSetters>
+
+               @Override /* BeanBuilder */
+               public Builder type(Class<? extends RestLoggerRule> value) {
+                       super.type(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
+               public Builder impl(RestLoggerRule value) {
+                       super.impl(value);
+                       return this;
                }
+
+               @Override /* BeanBuilder */
+               public Builder outer(Object value) {
+                       super.outer(value);
+                       return this;
+               }
+
+               @Override /* BeanBuilder */
+               public Builder beanStore(BeanStore value) {
+                       super.beanStore(value);
+                       return this;
+               }
+
+               // </FluentSetters>
        }
 
        
//-----------------------------------------------------------------------------------------------------------------

Reply via email to