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 7309ba2  Context API refactoring.
7309ba2 is described below

commit 7309ba23efe071d69087610e29223779bec66af0
Author: JamesBognar <james.bog...@salesforce.com>
AuthorDate: Sun Aug 22 10:31:53 2021 -0400

    Context API refactoring.
---
 .../org/apache/juneau/config/ConfigBuilder.java    | 28 ++++++++++++++++--
 .../config/store/ConfigClasspathStoreBuilder.java  | 18 ++++++++++--
 .../config/store/ConfigFileStoreBuilder.java       | 23 +++++++++++++--
 .../config/store/ConfigMemoryStoreBuilder.java     | 18 ++++++++++--
 .../juneau/config/store/ConfigStoreBuilder.java    | 16 ++++++++--
 .../org/apache/juneau/jena/RdfParserBuilder.java   | 18 ++++++++++--
 .../apache/juneau/jena/RdfSerializerBuilder.java   | 14 +++++++++
 .../java/org/apache/juneau/BeanContextBuilder.java | 18 ++++++++++--
 .../org/apache/juneau/BeanContextableBuilder.java  | 22 +++++++++++---
 .../org/apache/juneau/BeanTraverseBuilder.java     | 12 ++++++++
 .../java/org/apache/juneau/ContextBuilder.java     | 34 +++++++++++++---------
 .../org/apache/juneau/csv/CsvParserBuilder.java    | 18 ++++++++++--
 .../apache/juneau/csv/CsvSerializerBuilder.java    | 14 +++++++++
 .../juneau/html/HtmlDocSerializerBuilder.java      | 14 +++++++++
 .../org/apache/juneau/html/HtmlParserBuilder.java  | 18 ++++++++++--
 .../juneau/html/HtmlSchemaSerializerBuilder.java   | 14 +++++++++
 .../apache/juneau/html/HtmlSerializerBuilder.java  | 14 +++++++++
 .../html/HtmlStrippedDocSerializerBuilder.java     | 14 +++++++++
 .../org/apache/juneau/jso/JsoParserBuilder.java    | 18 ++++++++++--
 .../apache/juneau/jso/JsoSerializerBuilder.java    | 14 +++++++++
 .../org/apache/juneau/json/JsonParserBuilder.java  | 18 ++++++++++--
 .../juneau/json/JsonSchemaSerializerBuilder.java   | 15 ++++++++++
 .../apache/juneau/json/JsonSerializerBuilder.java  | 14 +++++++++
 .../jsonschema/JsonSchemaGeneratorBuilder.java     | 27 ++++++++++++++---
 .../juneau/msgpack/MsgPackParserBuilder.java       | 18 ++++++++++--
 .../juneau/msgpack/MsgPackSerializerBuilder.java   | 14 +++++++++
 .../apache/juneau/oapi/OpenApiParserBuilder.java   | 18 ++++++++++--
 .../juneau/oapi/OpenApiSerializerBuilder.java      | 14 +++++++++
 .../juneau/parser/InputStreamParserBuilder.java    | 18 ++++++++++--
 .../main/java/org/apache/juneau/parser/Parser.java | 20 +------------
 .../org/apache/juneau/parser/ParserBuilder.java    | 19 ++++++++++--
 .../apache/juneau/parser/ReaderParserBuilder.java  | 16 ++++++++--
 .../juneau/plaintext/PlainTextParserBuilder.java   | 18 ++++++++++--
 .../plaintext/PlainTextSerializerBuilder.java      | 14 +++++++++
 .../serializer/OutputStreamSerializerBuilder.java  | 12 ++++++++
 .../juneau/serializer/SerializerBuilder.java       | 14 +++++++++
 .../juneau/serializer/WriterSerializerBuilder.java | 12 ++++++++
 .../juneau/soap/SoapXmlSerializerBuilder.java      | 14 +++++++++
 .../org/apache/juneau/uon/UonParserBuilder.java    | 18 ++++++++++--
 .../apache/juneau/uon/UonSerializerBuilder.java    | 14 +++++++++
 .../urlencoding/UrlEncodingParserBuilder.java      | 18 ++++++++++--
 .../urlencoding/UrlEncodingSerializerBuilder.java  | 14 +++++++++
 .../org/apache/juneau/xml/XmlParserBuilder.java    | 18 ++++++++++--
 .../apache/juneau/xml/XmlSerializerBuilder.java    | 14 +++++++++
 .../juneau/rest/client/RestClientBuilder.java      |  6 +++-
 .../juneau/rest/mock/MockRestClientBuilder.java    | 23 +++++++++------
 .../org/apache/juneau/rest/RestContextBuilder.java |  5 ++++
 .../juneau/rest/RestOperationContextBuilder.java   |  5 ++++
 .../a/rttests/RoundTripAddClassAttrsTest.java      | 20 ++++++-------
 .../apache/juneau/testutils/MockReaderParser.java  |  5 ++++
 .../apache/juneau/testutils/MockStreamParser.java  |  5 ++++
 .../juneau/testutils/MockStreamSerializer.java     |  5 ++++
 .../juneau/testutils/MockWriterSerializer.java     |  5 ++++
 53 files changed, 727 insertions(+), 102 deletions(-)

diff --git 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java
 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java
index 72801c2..2f1a227 100644
--- 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java
@@ -58,7 +58,7 @@ public class ConfigBuilder extends ContextBuilder {
        /**
         * Constructor, default settings.
         */
-       public ConfigBuilder() {
+       protected ConfigBuilder() {
                super();
                name = env("Config.name", "Configuration.cfg");
                store = ConfigFileStore.DEFAULT;
@@ -77,7 +77,7 @@ public class ConfigBuilder extends ContextBuilder {
         *
         * @param copyFrom The bean to copy from.
         */
-       public ConfigBuilder(Config copyFrom) {
+       protected ConfigBuilder(Config copyFrom) {
                super(copyFrom);
                name = copyFrom.name;
                store = copyFrom.store;
@@ -91,6 +91,30 @@ public class ConfigBuilder extends ContextBuilder {
                readOnly = copyFrom.readOnly;
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected ConfigBuilder(ConfigBuilder copyFrom) {
+               super(copyFrom);
+               name = copyFrom.name;
+               store = copyFrom.store;
+               serializer = copyFrom.serializer;
+               parser = copyFrom.parser;
+               encoder = copyFrom.encoder;
+               varResolver = copyFrom.varResolver;
+               binaryLineLength = copyFrom.binaryLineLength;
+               binaryFormat = copyFrom.binaryFormat;
+               multiLineValuesOnSeparateLines = 
copyFrom.multiLineValuesOnSeparateLines;
+               readOnly = copyFrom.readOnly;
+       }
+
+       @Override /* ContextBuilder */
+       public ConfigBuilder copy() {
+               return new ConfigBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public Config build() {
                try {
diff --git 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStoreBuilder.java
 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStoreBuilder.java
index 286bf6a..7697ec8 100644
--- 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStoreBuilder.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStoreBuilder.java
@@ -30,7 +30,7 @@ public class ConfigClasspathStoreBuilder extends 
ConfigStoreBuilder {
        /**
         * Constructor, default settings.
         */
-       public ConfigClasspathStoreBuilder() {
+       protected ConfigClasspathStoreBuilder() {
                super();
        }
 
@@ -39,10 +39,24 @@ public class ConfigClasspathStoreBuilder extends 
ConfigStoreBuilder {
         *
         * @param copyFrom The bean to copy from.
         */
-       public ConfigClasspathStoreBuilder(ConfigClasspathStore copyFrom) {
+       protected ConfigClasspathStoreBuilder(ConfigClasspathStore copyFrom) {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected ConfigClasspathStoreBuilder(ConfigClasspathStoreBuilder 
copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public ConfigClasspathStoreBuilder copy() {
+               return new ConfigClasspathStoreBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public ConfigClasspathStore build() {
                return new ConfigClasspathStore(this);
diff --git 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStoreBuilder.java
 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStoreBuilder.java
index 66b9127..3def6a9 100644
--- 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStoreBuilder.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStoreBuilder.java
@@ -37,7 +37,7 @@ public class ConfigFileStoreBuilder extends 
ConfigStoreBuilder {
        /**
         * Constructor, default settings.
         */
-       public ConfigFileStoreBuilder() {
+       protected ConfigFileStoreBuilder() {
                super();
                directory = env("ConfigFileStore.directory", ".");
                charset = env("ConfigFileStore.charset", 
Charset.defaultCharset());
@@ -52,7 +52,7 @@ public class ConfigFileStoreBuilder extends 
ConfigStoreBuilder {
         *
         * @param copyFrom The bean to copy from.
         */
-       public ConfigFileStoreBuilder(ConfigFileStore copyFrom) {
+       protected ConfigFileStoreBuilder(ConfigFileStore copyFrom) {
                super(copyFrom);
                directory = copyFrom.directory;
                charset = copyFrom.charset;
@@ -60,7 +60,26 @@ public class ConfigFileStoreBuilder extends 
ConfigStoreBuilder {
                watcherSensitivity = copyFrom.watcherSensitivity;
                updateOnWrite = copyFrom.updateOnWrite;
                extensions = copyFrom.extensions;
+       }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected ConfigFileStoreBuilder(ConfigFileStoreBuilder copyFrom) {
+               super(copyFrom);
+               directory = copyFrom.directory;
+               charset = copyFrom.charset;
+               enableWatcher = copyFrom.enableWatcher;
+               watcherSensitivity = copyFrom.watcherSensitivity;
+               updateOnWrite = copyFrom.updateOnWrite;
+               extensions = copyFrom.extensions;
+       }
+
+       @Override /* ContextBuilder */
+       public ConfigFileStoreBuilder copy() {
+               return new ConfigFileStoreBuilder(this);
        }
 
        @Override /* ContextBuilder */
diff --git 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStoreBuilder.java
 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStoreBuilder.java
index 4f04255..f603b72 100644
--- 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStoreBuilder.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStoreBuilder.java
@@ -30,7 +30,7 @@ public class ConfigMemoryStoreBuilder extends 
ConfigStoreBuilder {
        /**
         * Constructor, default settings.
         */
-       public ConfigMemoryStoreBuilder() {
+       protected ConfigMemoryStoreBuilder() {
                super();
        }
 
@@ -39,10 +39,24 @@ public class ConfigMemoryStoreBuilder extends 
ConfigStoreBuilder {
         *
         * @param copyFrom The bean to copy from.
         */
-       public ConfigMemoryStoreBuilder(ConfigMemoryStore copyFrom) {
+       protected ConfigMemoryStoreBuilder(ConfigMemoryStore copyFrom) {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected ConfigMemoryStoreBuilder(ConfigMemoryStoreBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public ConfigMemoryStoreBuilder copy() {
+               return new ConfigMemoryStoreBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public ConfigMemoryStore build() {
                return new ConfigMemoryStore(this);
diff --git 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStoreBuilder.java
 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStoreBuilder.java
index b2384a5..f7d2c05 100644
--- 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStoreBuilder.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStoreBuilder.java
@@ -30,7 +30,7 @@ public abstract class ConfigStoreBuilder extends 
ContextBuilder {
        /**
         * Constructor, default settings.
         */
-       public ConfigStoreBuilder() {
+       protected ConfigStoreBuilder() {
                super();
        }
 
@@ -39,10 +39,22 @@ public abstract class ConfigStoreBuilder extends 
ContextBuilder {
         *
         * @param copyFrom The bean to copy from.
         */
-       public ConfigStoreBuilder(ConfigStore copyFrom) {
+       protected ConfigStoreBuilder(ConfigStore copyFrom) {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected ConfigStoreBuilder(ConfigStoreBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public abstract ConfigStoreBuilder copy();
+
        @Override
        public abstract ConfigStore build();
 
diff --git 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java
 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java
index 658aef3..2ec74c8 100644
--- 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java
+++ 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java
@@ -39,7 +39,7 @@ public class RdfParserBuilder extends ReaderParserBuilder {
        /**
         * Constructor, default settings.
         */
-       public RdfParserBuilder() {
+       protected RdfParserBuilder() {
                super();
                contextClass(RdfParser.class);
        }
@@ -49,10 +49,24 @@ public class RdfParserBuilder extends ReaderParserBuilder {
         *
         * @param copyFrom The bean to copy from.
         */
-       public RdfParserBuilder(RdfParser copyFrom) {
+       protected RdfParserBuilder(RdfParser copyFrom) {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected RdfParserBuilder(RdfParserBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public RdfParserBuilder copy() {
+               return new RdfParserBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public RdfParser build() {
                return (RdfParser)super.build();
diff --git 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
index 7ed26a4..0655c79 100644
--- 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
@@ -54,6 +54,20 @@ public class RdfSerializerBuilder extends 
WriterSerializerBuilder {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected RdfSerializerBuilder(RdfSerializerBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public RdfSerializerBuilder copy() {
+               return new RdfSerializerBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public RdfSerializer build() {
                return (RdfSerializer)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
index 284c317..50213ce 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
@@ -59,7 +59,7 @@ public class BeanContextBuilder extends ContextBuilder {
         *
         * All default settings.
         */
-       public BeanContextBuilder() {
+       protected BeanContextBuilder() {
                super();
        }
 
@@ -68,10 +68,24 @@ public class BeanContextBuilder extends ContextBuilder {
         *
         * @param copyFrom The bean to copy from.
         */
-       public BeanContextBuilder(BeanContext copyFrom) {
+       protected BeanContextBuilder(BeanContext copyFrom) {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected BeanContextBuilder(BeanContextBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public BeanContextBuilder copy() {
+               return new BeanContextBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public BeanContext build() {
                return build(BeanContext.class);
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextableBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextableBuilder.java
index ff16c3b..e1724e2 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextableBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextableBuilder.java
@@ -74,6 +74,19 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
                this.bcBuilder = copyFrom.getBeanContext().copy();
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected BeanContextableBuilder(BeanContextableBuilder copyFrom) {
+               super(copyFrom);
+               this.bcBuilder = copyFrom.bcBuilder.copy();
+       }
+
+       @Override /* ContextBuilder */
+       public abstract BeanContextableBuilder copy();
+
        @Override /* ContextBuilder */
        public BeanContextable build() {
                return (BeanContextable)super.build();
@@ -88,6 +101,10 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
                return bcBuilder;
        }
 
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Properties
+       
//-----------------------------------------------------------------------------------------------------------------
+
        /**
         * Overrides the bean context builder.
         *
@@ -99,15 +116,12 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         * @param value The new value for this setting.
         * @return This object (for method chaining).
         */
+       @FluentSetter
        public BeanContextableBuilder beanContextBuilder(BeanContextBuilder 
value) {
                this.bcBuilder = value;
                return this;
        }
 
-       
//-----------------------------------------------------------------------------------------------------------------
-       // Properties
-       
//-----------------------------------------------------------------------------------------------------------------
-
        /**
         * Minimum bean class visibility.
         *
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java
index 0a2efd6..cb971c8 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java
@@ -46,6 +46,18 @@ public abstract class BeanTraverseBuilder extends 
BeanContextableBuilder {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected BeanTraverseBuilder(BeanTraverseBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public abstract BeanTraverseBuilder copy();
+
        @Override /* ContextBuilder */
        public BeanTraverseContext build() {
                return (BeanTraverseContext)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
index 94c1918..6037c7f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
@@ -62,33 +62,41 @@ public abstract class ContextBuilder {
         * Constructor.
         * Default settings.
         */
-       public ContextBuilder() {
-               this.cpb = ContextProperties.create();
+       protected ContextBuilder() {
+               cpb = ContextProperties.create();
                debug = env("Context.debug", false);
        }
 
        /**
-        * Constructor.
-        * Default settings.
-        * @param contextClass The class being built.
+        * Copy constructor.
+        *
+        * @param copyFrom The bean to copy from.
         */
-       public ContextBuilder(Class<?> contextClass) {
-               this();
-               this.contextClass = contextClass;
+       protected ContextBuilder(Context copyFrom) {
+               this.cpb = copyFrom.properties.copy();
+               this.debug = copyFrom.debug;
+               this.contextClass = copyFrom.getClass();
        }
 
        /**
         * Copy constructor.
         *
-        * @param copyFrom The bean to copy from.
+        * @param copyFrom The builder to copy from.
         */
-       public ContextBuilder(Context copyFrom) {
-               this.cpb = copyFrom == null ? ContextProperties.DEFAULT.copy() 
: copyFrom.properties.copy();
-               this.debug = copyFrom == null ? env("Context.debug", false) : 
copyFrom.debug;
-               this.contextClass = copyFrom == null ? null : 
copyFrom.getClass();
+       protected ContextBuilder(ContextBuilder copyFrom) {
+               this.cpb =  new ContextPropertiesBuilder(copyFrom.cpb);
+               this.debug = copyFrom.debug;
+               this.contextClass = copyFrom.getClass();
        }
 
        /**
+        * Copy creator.
+        *
+        * @return A new mutable copy of this builder.
+        */
+       public abstract ContextBuilder copy();
+
+       /**
         * Build the object.
         *
         * @return
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java
index 5b76ed6..b728db0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java
@@ -33,7 +33,7 @@ public class CsvParserBuilder extends ReaderParserBuilder {
        /**
         * Constructor, default settings.
         */
-       public CsvParserBuilder() {
+       protected CsvParserBuilder() {
                super();
                consumes("text/csv");
                contextClass(CsvParser.class);
@@ -44,10 +44,24 @@ public class CsvParserBuilder extends ReaderParserBuilder {
         *
         * @param copyFrom The bean to copy from.
         */
-       public CsvParserBuilder(CsvParser copyFrom) {
+       protected CsvParserBuilder(CsvParser copyFrom) {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected CsvParserBuilder(CsvParserBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public CsvParserBuilder copy() {
+               return new CsvParserBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public CsvParser build() {
                return (CsvParser)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
index 6081f9b..42ac4a5 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
@@ -48,6 +48,20 @@ public class CsvSerializerBuilder extends 
WriterSerializerBuilder {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected CsvSerializerBuilder(CsvSerializerBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public CsvSerializerBuilder copy() {
+               return new CsvSerializerBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public CsvSerializer build() {
                return (CsvSerializer)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
index 2d2f2c4..8e1e900 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
@@ -52,6 +52,20 @@ public class HtmlDocSerializerBuilder extends 
HtmlStrippedDocSerializerBuilder {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected HtmlDocSerializerBuilder(HtmlDocSerializerBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public HtmlDocSerializerBuilder copy() {
+               return new HtmlDocSerializerBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public HtmlDocSerializer build() {
                return (HtmlDocSerializer)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java
index 7fbeee2..9ebc22d 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java
@@ -36,7 +36,7 @@ public class HtmlParserBuilder extends XmlParserBuilder {
        /**
         * Constructor, default settings.
         */
-       public HtmlParserBuilder() {
+       protected HtmlParserBuilder() {
                super();
                consumes("text/html,text/html+stripped");
                contextClass(HtmlParser.class);
@@ -47,10 +47,24 @@ public class HtmlParserBuilder extends XmlParserBuilder {
         *
         * @param copyFrom The bean to copy from.
         */
-       public HtmlParserBuilder(HtmlParser copyFrom) {
+       protected HtmlParserBuilder(HtmlParser copyFrom) {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected HtmlParserBuilder(HtmlParserBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public HtmlParserBuilder copy() {
+               return new HtmlParserBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public HtmlParser build() {
                return (HtmlParser)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
index 83857ff..abe224c 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
@@ -56,6 +56,20 @@ public class HtmlSchemaSerializerBuilder extends 
HtmlSerializerBuilder {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected HtmlSchemaSerializerBuilder(HtmlSchemaSerializerBuilder 
copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public HtmlSchemaSerializerBuilder copy() {
+               return new HtmlSchemaSerializerBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public HtmlSchemaSerializer build() {
                return (HtmlSchemaSerializer)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
index 4cf6dc8..3c7f5c7 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
@@ -51,6 +51,20 @@ public class HtmlSerializerBuilder extends 
XmlSerializerBuilder {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected HtmlSerializerBuilder(HtmlSerializerBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public HtmlSerializerBuilder copy() {
+               return new HtmlSerializerBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public HtmlSerializer build() {
                return (HtmlSerializer)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
index 2a19e3b..3c5c04c 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
@@ -49,6 +49,20 @@ public class HtmlStrippedDocSerializerBuilder extends 
HtmlSerializerBuilder {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected 
HtmlStrippedDocSerializerBuilder(HtmlStrippedDocSerializerBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public HtmlStrippedDocSerializerBuilder copy() {
+               return new HtmlStrippedDocSerializerBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public HtmlStrippedDocSerializer build() {
                return (HtmlStrippedDocSerializer)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java
index a6fcfa2..eae2e09 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java
@@ -32,7 +32,7 @@ public class JsoParserBuilder extends 
InputStreamParserBuilder {
        /**
         * Constructor, default settings.
         */
-       public JsoParserBuilder() {
+       protected JsoParserBuilder() {
                super();
                consumes("application/x-java-serialized-object");
                contextClass(JsoParser.class);
@@ -43,10 +43,24 @@ public class JsoParserBuilder extends 
InputStreamParserBuilder {
         *
         * @param copyFrom The bean to copy from.
         */
-       public JsoParserBuilder(JsoParser copyFrom) {
+       protected JsoParserBuilder(JsoParser copyFrom) {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected JsoParserBuilder(JsoParserBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public JsoParserBuilder copy() {
+               return new JsoParserBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public JsoParser build() {
                return (JsoParser)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
index 3f70c94..700f522 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
@@ -47,6 +47,20 @@ public class JsoSerializerBuilder extends 
OutputStreamSerializerBuilder {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected JsoSerializerBuilder(JsoSerializerBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public JsoSerializerBuilder copy() {
+               return new JsoSerializerBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public JsoSerializer build() {
                return (JsoSerializer)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java
index 3a1214e..ac02126 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java
@@ -36,7 +36,7 @@ public class JsonParserBuilder extends ReaderParserBuilder {
        /**
         * Constructor, default settings.
         */
-       public JsonParserBuilder() {
+       protected JsonParserBuilder() {
                super();
                consumes("application/json,text/json");
                contextClass(JsonParser.class);
@@ -47,10 +47,24 @@ public class JsonParserBuilder extends ReaderParserBuilder {
         *
         * @param copyFrom The bean to copy from.
         */
-       public JsonParserBuilder(JsonParser copyFrom) {
+       protected JsonParserBuilder(JsonParser copyFrom) {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected JsonParserBuilder(JsonParserBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public JsonParserBuilder copy() {
+               return new JsonParserBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public JsonParser build() {
                return (JsonParser)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
index 32e4e8b..bccdbdc 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
@@ -58,6 +58,21 @@ public class JsonSchemaSerializerBuilder extends 
JsonSerializerBuilder {
                generatorBuilder = (JsonSchemaGeneratorBuilder) 
copyFrom.generator.copy().beanContextBuilder(getBeanContextBuilder());
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected JsonSchemaSerializerBuilder(JsonSchemaSerializerBuilder 
copyFrom) {
+               super(copyFrom);
+               generatorBuilder = (JsonSchemaGeneratorBuilder) 
copyFrom.generatorBuilder.copy().beanContextBuilder(getBeanContextBuilder());
+       }
+
+       @Override /* ContextBuilder */
+       public JsonSchemaSerializerBuilder copy() {
+               return new JsonSchemaSerializerBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public JsonSchemaSerializer build() {
                return (JsonSchemaSerializer)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
index 1d537b4..a830a94 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
@@ -52,6 +52,20 @@ public class JsonSerializerBuilder extends 
WriterSerializerBuilder {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected JsonSerializerBuilder(JsonSerializerBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public JsonSerializerBuilder copy() {
+               return new JsonSerializerBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public JsonSerializer build() {
                return (JsonSerializer)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java
index c9f76ce..fc73572 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java
@@ -43,8 +43,9 @@ public class JsonSchemaGeneratorBuilder extends 
BeanTraverseBuilder {
         */
        protected JsonSchemaGeneratorBuilder() {
                super();
-               jsonSerializerBuilder = 
JsonSerializer.create().beanContextBuilder(this.getBeanContextBuilder());
-               jsonParserBuilder = JsonParser.create();
+               BeanContextBuilder bc = getBeanContextBuilder();
+               jsonSerializerBuilder = 
JsonSerializer.create().beanContextBuilder(bc);
+               jsonParserBuilder = (JsonParserBuilder) 
JsonParser.create().beanContextBuilder(bc);
                contextClass(JsonSchemaGenerator.class);
        }
 
@@ -55,8 +56,26 @@ public class JsonSchemaGeneratorBuilder extends 
BeanTraverseBuilder {
         */
        protected JsonSchemaGeneratorBuilder(JsonSchemaGenerator copyFrom) {
                super(copyFrom);
-               jsonSerializerBuilder = 
copyFrom.jsonSerializer.copy().beanContextBuilder(getBeanContextBuilder());
-               jsonParserBuilder = copyFrom.jsonParser.copy();
+               BeanContextBuilder bc = getBeanContextBuilder();
+               jsonSerializerBuilder = 
copyFrom.jsonSerializer.copy().beanContextBuilder(bc);
+               jsonParserBuilder = (JsonParserBuilder) 
copyFrom.jsonParser.copy().beanContextBuilder(bc);
+       }
+
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected JsonSchemaGeneratorBuilder(JsonSchemaGeneratorBuilder 
copyFrom) {
+               super(copyFrom);
+               BeanContextBuilder bc = getBeanContextBuilder();
+               jsonSerializerBuilder = 
copyFrom.jsonSerializerBuilder.copy().beanContextBuilder(bc);
+               jsonParserBuilder = (JsonParserBuilder) 
copyFrom.jsonParserBuilder.copy().beanContextBuilder(bc);
+       }
+
+       @Override /* ContextBuilder */
+       public JsonSchemaGeneratorBuilder copy() {
+               return new JsonSchemaGeneratorBuilder(this);
        }
 
        @Override /* ContextBuilder */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserBuilder.java
index 8b03182..47393cd 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserBuilder.java
@@ -32,7 +32,7 @@ public class MsgPackParserBuilder extends 
InputStreamParserBuilder {
        /**
         * Constructor, default settings.
         */
-       public MsgPackParserBuilder() {
+       protected MsgPackParserBuilder() {
                super();
                consumes("octal/msgpack");
                contextClass(MsgPackParser.class);
@@ -43,10 +43,24 @@ public class MsgPackParserBuilder extends 
InputStreamParserBuilder {
         *
         * @param copyFrom The bean to copy from.
         */
-       public MsgPackParserBuilder(MsgPackParser copyFrom) {
+       protected MsgPackParserBuilder(MsgPackParser copyFrom) {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected MsgPackParserBuilder(MsgPackParserBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public MsgPackParserBuilder copy() {
+               return new MsgPackParserBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public MsgPackParser build() {
                return (MsgPackParser)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
index 4fa9afc..11769cd 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
@@ -47,6 +47,20 @@ public class MsgPackSerializerBuilder extends 
OutputStreamSerializerBuilder {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected MsgPackSerializerBuilder(MsgPackSerializerBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public MsgPackSerializerBuilder copy() {
+               return new MsgPackSerializerBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public MsgPackSerializer build() {
                return (MsgPackSerializer)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java
index d84eaba..3a3c7f4 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java
@@ -36,7 +36,7 @@ public class OpenApiParserBuilder extends UonParserBuilder {
        /**
         * Constructor, default settings.
         */
-       public OpenApiParserBuilder() {
+       protected OpenApiParserBuilder() {
                super();
                consumes("text/openapi");
                contextClass(OpenApiParser.class);
@@ -47,10 +47,24 @@ public class OpenApiParserBuilder extends UonParserBuilder {
         *
         * @param copyFrom The bean to copy from.
         */
-       public OpenApiParserBuilder(OpenApiParser copyFrom) {
+       protected OpenApiParserBuilder(OpenApiParser copyFrom) {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected OpenApiParserBuilder(OpenApiParserBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public OpenApiParserBuilder copy() {
+               return new OpenApiParserBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public OpenApiParser build() {
                return (OpenApiParser)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
index 7506a56..6734ee0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
@@ -51,6 +51,20 @@ public class OpenApiSerializerBuilder extends 
UonSerializerBuilder {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected OpenApiSerializerBuilder(OpenApiSerializerBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public OpenApiSerializerBuilder copy() {
+               return new OpenApiSerializerBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public OpenApiSerializer build() {
                return (OpenApiSerializer)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java
index 2a186e2..a1594a4 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java
@@ -29,12 +29,12 @@ import org.apache.juneau.svl.*;
  * {@review}
  */
 @FluentSetters
-public class InputStreamParserBuilder extends ParserBuilder {
+public abstract class InputStreamParserBuilder extends ParserBuilder {
 
        /**
         * Constructor, default settings.
         */
-       public InputStreamParserBuilder() {
+       protected InputStreamParserBuilder() {
                super();
        }
 
@@ -43,10 +43,22 @@ public class InputStreamParserBuilder extends ParserBuilder 
{
         *
         * @param copyFrom The bean to copy from.
         */
-       public InputStreamParserBuilder(InputStreamParser copyFrom) {
+       protected InputStreamParserBuilder(InputStreamParser copyFrom) {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected InputStreamParserBuilder(InputStreamParserBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public abstract InputStreamParserBuilder copy();
+
        @Override /* ContextBuilder */
        public InputStreamParser build() {
                return (InputStreamParser)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
index 28215f2..3b8e956 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
@@ -347,25 +347,7 @@ public abstract class Parser extends BeanContextable {
        }
 
        @Override /* Context */
-       public ParserBuilder copy() {
-               return new ParserBuilder(this);
-       }
-
-       /**
-        * Instantiates a new clean-slate {@link ParserBuilder} object.
-        *
-        * <p>
-        * This is equivalent to simply calling <code><jk>new</jk> 
ParserBuilder()</code>.
-        *
-        * <p>
-        * Note that this method creates a builder initialized to all default 
settings, whereas {@link #copy()} copies
-        * the settings of the object called on.
-        *
-        * @return A new {@link ParserBuilder} object.
-        */
-       public static ParserBuilder create() {
-               return new ParserBuilder();
-       }
+       public abstract ParserBuilder copy();
 
 
        
//-----------------------------------------------------------------------------------------------------------------
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java
index 8d87de8..bb7bae0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java
@@ -34,14 +34,14 @@ import org.apache.juneau.xml.*;
  * {@review}
  */
 @FluentSetters
-public class ParserBuilder extends BeanContextableBuilder {
+public abstract class ParserBuilder extends BeanContextableBuilder {
 
        String consumes;
 
        /**
         * Constructor, default settings.
         */
-       public ParserBuilder() {
+       protected ParserBuilder() {
                super();
        }
 
@@ -50,11 +50,24 @@ public class ParserBuilder extends BeanContextableBuilder {
         *
         * @param copyFrom The bean to copy from.
         */
-       public ParserBuilder(Parser copyFrom) {
+       protected ParserBuilder(Parser copyFrom) {
                super(copyFrom);
                consumes = copyFrom._consumes;
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected ParserBuilder(ParserBuilder copyFrom) {
+               super(copyFrom);
+               consumes = copyFrom.consumes;
+       }
+
+       @Override /* ContextBuilder */
+       public abstract ParserBuilder copy();
+
        @Override /* ContextBuilder */
        public Parser build() {
                return (Parser)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java
index 050a08a..16da4c0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java
@@ -35,7 +35,7 @@ public abstract class ReaderParserBuilder extends 
ParserBuilder {
        /**
         * Constructor, default settings.
         */
-       public ReaderParserBuilder() {
+       protected ReaderParserBuilder() {
                super();
        }
 
@@ -44,10 +44,22 @@ public abstract class ReaderParserBuilder extends 
ParserBuilder {
         *
         * @param copyFrom The bean to copy from.
         */
-       public ReaderParserBuilder(ReaderParser copyFrom) {
+       protected ReaderParserBuilder(ReaderParser copyFrom) {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected ReaderParserBuilder(ReaderParserBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public abstract ReaderParserBuilder copy();
+
        @Override /* ContextBuilder */
        public ReaderParser build() {
                return (ReaderParser)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
index 92ca00a..185aae7 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
@@ -33,7 +33,7 @@ public class PlainTextParserBuilder extends 
ReaderParserBuilder {
        /**
         * Constructor, default settings.
         */
-       public PlainTextParserBuilder() {
+       protected PlainTextParserBuilder() {
                super();
                consumes("text/plain");
                contextClass(PlainTextParser.class);
@@ -44,10 +44,24 @@ public class PlainTextParserBuilder extends 
ReaderParserBuilder {
         *
         * @param copyFrom The bean to copy from.
         */
-       public PlainTextParserBuilder(PlainTextParser copyFrom) {
+       protected PlainTextParserBuilder(PlainTextParser copyFrom) {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected PlainTextParserBuilder(PlainTextParserBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public PlainTextParserBuilder copy() {
+               return new PlainTextParserBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public PlainTextParser build() {
                return (PlainTextParser)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
index 9e0567f..01295f4 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
@@ -48,6 +48,20 @@ public class PlainTextSerializerBuilder extends 
WriterSerializerBuilder {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected PlainTextSerializerBuilder(PlainTextSerializerBuilder 
copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public PlainTextSerializerBuilder copy() {
+               return new PlainTextSerializerBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public PlainTextSerializer build() {
                return (PlainTextSerializer)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
index d6bd5d4..70589f4 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
@@ -47,6 +47,18 @@ public abstract class OutputStreamSerializerBuilder extends 
SerializerBuilder {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected OutputStreamSerializerBuilder(OutputStreamSerializerBuilder 
copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public abstract OutputStreamSerializerBuilder copy();
+
        @Override /* ContextBuilder */
        public OutputStreamSerializer build() {
                return (OutputStreamSerializer)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
index f800ec6..9dc8334 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
@@ -52,6 +52,20 @@ public abstract class SerializerBuilder extends 
BeanTraverseBuilder {
                accept = copyFrom._accept;
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected SerializerBuilder(SerializerBuilder copyFrom) {
+               super(copyFrom);
+               produces = copyFrom.produces;
+               accept = copyFrom.accept;
+       }
+
+       @Override /* ContextBuilder */
+       public abstract SerializerBuilder copy();
+
        @Override /* ContextBuilder */
        public Serializer build() {
                return (Serializer)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
index 430f411..536dab4 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
@@ -49,6 +49,18 @@ public abstract class WriterSerializerBuilder extends 
SerializerBuilder {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected WriterSerializerBuilder(WriterSerializerBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public abstract WriterSerializerBuilder copy();
+
        @Override /* ContextBuilder */
        public WriterSerializer build() {
                return (WriterSerializer)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
index e75020a..cad460d 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
@@ -51,6 +51,20 @@ public class SoapXmlSerializerBuilder extends 
XmlSerializerBuilder {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected SoapXmlSerializerBuilder(SoapXmlSerializerBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public SoapXmlSerializerBuilder copy() {
+               return new SoapXmlSerializerBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public SoapXmlSerializer build() {
                return (SoapXmlSerializer)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java
index 089eadc..80a858c 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java
@@ -36,7 +36,7 @@ public class UonParserBuilder extends ReaderParserBuilder {
        /**
         * Constructor, default settings.
         */
-       public UonParserBuilder() {
+       protected UonParserBuilder() {
                super();
                consumes("text/uon");
                contextClass(UonParser.class);
@@ -47,10 +47,24 @@ public class UonParserBuilder extends ReaderParserBuilder {
         *
         * @param copyFrom The bean to copy from.
         */
-       public UonParserBuilder(UonParser copyFrom) {
+       protected UonParserBuilder(UonParser copyFrom) {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected UonParserBuilder(UonParserBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public UonParserBuilder copy() {
+               return new UonParserBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public UonParser build() {
                return (UonParser)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
index dcf8604..28b085f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
@@ -51,6 +51,20 @@ public class UonSerializerBuilder extends 
WriterSerializerBuilder {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected UonSerializerBuilder(UonSerializerBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public UonSerializerBuilder copy() {
+               return new UonSerializerBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public UonSerializer build() {
                return (UonSerializer)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java
index bf2dbcc..27d8313 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java
@@ -36,7 +36,7 @@ public class UrlEncodingParserBuilder extends 
UonParserBuilder {
        /**
         * Constructor, default settings.
         */
-       public UrlEncodingParserBuilder() {
+       protected UrlEncodingParserBuilder() {
                super();
                decoding();
                consumes("application/x-www-form-urlencoded");
@@ -48,10 +48,24 @@ public class UrlEncodingParserBuilder extends 
UonParserBuilder {
         *
         * @param copyFrom The bean to copy from.
         */
-       public UrlEncodingParserBuilder(UrlEncodingParser copyFrom) {
+       protected UrlEncodingParserBuilder(UrlEncodingParser copyFrom) {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected UrlEncodingParserBuilder(UrlEncodingParserBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public UrlEncodingParserBuilder copy() {
+               return new UrlEncodingParserBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public UrlEncodingParser build() {
                return (UrlEncodingParser)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
index b08d034..a1e6aba 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
@@ -51,6 +51,20 @@ public class UrlEncodingSerializerBuilder extends 
UonSerializerBuilder {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected UrlEncodingSerializerBuilder(UrlEncodingSerializerBuilder 
copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public UrlEncodingSerializerBuilder copy() {
+               return new UrlEncodingSerializerBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public UrlEncodingSerializer build() {
                return (UrlEncodingSerializer)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
index 2ad623b..821f906 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
@@ -40,7 +40,7 @@ public class XmlParserBuilder extends ReaderParserBuilder {
        /**
         * Constructor, default settings.
         */
-       public XmlParserBuilder() {
+       protected XmlParserBuilder() {
                super();
                consumes("text/xml,application/xml");
                contextClass(XmlParser.class);
@@ -51,10 +51,24 @@ public class XmlParserBuilder extends ReaderParserBuilder {
         *
         * @param copyFrom The bean to copy from.
         */
-       public XmlParserBuilder(XmlParser copyFrom) {
+       protected XmlParserBuilder(XmlParser copyFrom) {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected XmlParserBuilder(XmlParserBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public XmlParserBuilder copy() {
+               return new XmlParserBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public XmlParser build() {
                return (XmlParser)super.build();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
index 598a94e..bd238ea 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
@@ -51,6 +51,20 @@ public class XmlSerializerBuilder extends 
WriterSerializerBuilder {
                super(copyFrom);
        }
 
+       /**
+        * Copy constructor.
+        *
+        * @param copyFrom The builder to copy from.
+        */
+       protected XmlSerializerBuilder(XmlSerializerBuilder copyFrom) {
+               super(copyFrom);
+       }
+
+       @Override /* ContextBuilder */
+       public XmlSerializerBuilder copy() {
+               return new XmlSerializerBuilder(this);
+       }
+
        @Override /* ContextBuilder */
        public XmlSerializer build() {
                return (XmlSerializer)super.build();
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
index 071b295..bc9a79a 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
@@ -106,7 +106,6 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
        HttpPartSerializer simplePartSerializer;
        HttpPartParser simplePartParser;
 
-
        /**
         * Constructor.
         */
@@ -154,6 +153,11 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
        }
 
        @Override /* ContextBuilder */
+       public RestClientBuilder copy() {
+               throw new NoSuchMethodError("Not implemented.");
+       }
+
+       @Override /* ContextBuilder */
        public RestClient build() {
                contextProperties();
                return (RestClient)super.build();
diff --git 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java
 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java
index d31ac4b..fa9d74c 100644
--- 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java
+++ 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java
@@ -69,28 +69,33 @@ import org.apache.http.protocol.*;
 public class MockRestClientBuilder extends RestClientBuilder {
 
        /**
-        * Copy constructor.
+        * No-arg constructor.
         *
-        * @param copyFrom The bean to copy from.
+        * <p>
+        * Provided so that this class can be easily subclassed.
         */
-       protected MockRestClientBuilder(MockRestClient copyFrom) {
-               super(copyFrom);
+       protected MockRestClientBuilder() {
+               super();
                connectionManager(new MockHttpClientConnectionManager());
                contextClass(MockRestClient.class);
        }
 
        /**
-        * No-arg constructor.
+        * Copy constructor.
         *
-        * <p>
-        * Provided so that this class can be easily subclassed.
+        * @param copyFrom The bean to copy from.
         */
-       protected MockRestClientBuilder() {
-               super();
+       protected MockRestClientBuilder(MockRestClient copyFrom) {
+               super(copyFrom);
                connectionManager(new MockHttpClientConnectionManager());
                contextClass(MockRestClient.class);
        }
 
+       @Override /* ContextBuilder */
+       public MockRestClientBuilder copy() {
+               throw new NoSuchMethodError("Not implemented.");
+       }
+
        /**
         * Specifies the {@link Rest}-annotated bean class or instance to test 
against.
         *
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
index c735f31..d7a37b0 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
@@ -188,6 +188,11 @@ public class RestContextBuilder extends BeanContextBuilder 
implements ServletCon
                }
        }
 
+       @Override /* ContextBuilder */
+       public RestContextBuilder copy() {
+               throw new NoSuchMethodError("Not implemented.");
+       }
+
        @SuppressWarnings("unchecked")
        @Override /* BeanContextBuilder */
        public RestContext build() {
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContextBuilder.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContextBuilder.java
index 3352f66..64dfa4f 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContextBuilder.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContextBuilder.java
@@ -43,6 +43,11 @@ public class RestOperationContextBuilder extends 
BeanContextBuilder {
 
        private BeanStore beanStore;
 
+       @Override /* ContextBuilder */
+       public RestOperationContextBuilder copy() {
+               throw new NoSuchMethodError("Not implemented.");
+       }
+
        @SuppressWarnings("unchecked")
        @Override /* BeanContextBuilder */
        public RestOperationContext build() {
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripAddClassAttrsTest.java
 
b/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripAddClassAttrsTest.java
index da53c54..7da3f3c 100755
--- 
a/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripAddClassAttrsTest.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripAddClassAttrsTest.java
@@ -44,61 +44,61 @@ public class RoundTripAddClassAttrsTest extends 
RoundTripTest {
                        { /* 0 */
                                "JsonSerializer.DEFAULT/JsonParser.DEFAULT",
                                
JsonSerializer.create().addBeanTypes().addRootType(),
-                               new 
JsonParserBuilder().disableInterfaceProxies(),
+                               JsonParser.create().disableInterfaceProxies(),
                                0
                        },
                        { /* 1 */
                                
"JsonSerializer.DEFAULT_SIMPLE/JsonParser.DEFAULT",
                                
JsonSerializer.create().ssq().addBeanTypes().addRootType(),
-                               new 
JsonParserBuilder().disableInterfaceProxies(),
+                               JsonParser.create().disableInterfaceProxies(),
                                0
                        },
                        { /* 2 */
                                "JsonSerializer.DEFAULT_SQ/JsonParser.DEFAULT",
                                
JsonSerializer.create().ssq().addBeanTypes().addRootType(),
-                               new 
JsonParserBuilder().disableInterfaceProxies(),
+                               JsonParser.create().disableInterfaceProxies(),
                                0
                        },
                        { /* 3 */
                                "XmlSerializer.DEFAULT/XmlParser.DEFAULT",
                                
XmlSerializer.create().addBeanTypes().addRootType(),
-                               new 
XmlParserBuilder().disableInterfaceProxies(),
+                               XmlParser.create().disableInterfaceProxies(),
                                CHECK_XML_WHITESPACE | VALIDATE_XML
                        },
                        { /* 4 */
                                "HtmlSerializer.DEFAULT/HtmlParser.DEFAULT",
                                
HtmlSerializer.create().addBeanTypes().addRootType(),
-                               new 
HtmlParserBuilder().disableInterfaceProxies(),
+                               HtmlParser.create().disableInterfaceProxies(),
                                CHECK_XML_WHITESPACE
                        },
                        { /* 5 */
                                
"UonSerializer.DEFAULT_ENCODING/UonParser.DEFAULT_DECODING",
                                
UonSerializer.create().encoding().addBeanTypes().addRootType(),
-                               new 
UonParserBuilder().decoding().disableInterfaceProxies(),
+                               
UonParser.create().decoding().disableInterfaceProxies(),
                                0
                        },
                        { /* 6 */
                                "UonSerializer.DEFAULT/UonParser.DEFAULT",
                                
UonSerializer.create().addBeanTypes().addRootType(),
-                               new 
UonParserBuilder().disableInterfaceProxies(),
+                               UonParser.create().disableInterfaceProxies(),
                                0
                        },
                        { /* 7 */
                                
"UrlEncodingSerializer.DEFAULT/UrlEncodingParser.DEFAULT",
                                
UrlEncodingSerializer.create().addBeanTypes().addRootType(),
-                               new 
UrlEncodingParserBuilder().disableInterfaceProxies(),
+                               
UrlEncodingParser.create().disableInterfaceProxies(),
                                0
                        },
                        { /* 8 */
                                "RdfSerializer.Xml/RdfParser.Xml",
                                
RdfSerializer.create().addBeanTypes().addRootType(),
-                               new 
RdfParserBuilder().disableInterfaceProxies(),
+                               RdfParser.create().disableInterfaceProxies(),
                                0
                        },
                        { /* 9 */
                                
"MsgPackSerializer.DEFAULT/MsgPackParser.DEFAULT",
                                
MsgPackSerializer.create().addBeanTypes().addRootType(),
-                               new 
MsgPackParserBuilder().disableInterfaceProxies(),
+                               
MsgPackParser.create().disableInterfaceProxies(),
                                0
                        }
                });
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockReaderParser.java 
b/juneau-utest/src/test/java/org/apache/juneau/testutils/MockReaderParser.java
index 80fd9c5..4c58b3d 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockReaderParser.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/testutils/MockReaderParser.java
@@ -60,6 +60,11 @@ public class MockReaderParser extends ReaderParser {
                        super.consumes(value);
                        return this;
                }
+
+               @Override
+               public Builder copy() {
+                       throw new NoSuchMethodError("Not implemented.");
+               }
        }
 
        @Override
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockStreamParser.java 
b/juneau-utest/src/test/java/org/apache/juneau/testutils/MockStreamParser.java
index 0e1b05c..bc76d16 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockStreamParser.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/testutils/MockStreamParser.java
@@ -60,6 +60,11 @@ public class MockStreamParser extends InputStreamParser {
                        super.consumes(value);
                        return this;
                }
+
+               @Override
+               public Builder copy() {
+                       throw new NoSuchMethodError("Not implemented.");
+               }
        }
 
        @Override
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockStreamSerializer.java
 
b/juneau-utest/src/test/java/org/apache/juneau/testutils/MockStreamSerializer.java
index 71dd242..2bd1e21 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockStreamSerializer.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/testutils/MockStreamSerializer.java
@@ -70,6 +70,11 @@ public class MockStreamSerializer extends 
OutputStreamSerializer {
                        super.accept(value);
                        return this;
                }
+
+               @Override
+               public Builder copy() {
+                       throw new NoSuchMethodError("Not implemented.");
+               }
        }
 
        @Override
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockWriterSerializer.java
 
b/juneau-utest/src/test/java/org/apache/juneau/testutils/MockWriterSerializer.java
index cb26349..b1693c4 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockWriterSerializer.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/testutils/MockWriterSerializer.java
@@ -77,6 +77,11 @@ public class MockWriterSerializer extends WriterSerializer {
                        super.accept(value);
                        return this;
                }
+
+               @Override
+               public Builder copy() {
+                       throw new NoSuchMethodError("Not implemented.");
+               }
        }
 
        @Override

Reply via email to