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

commit e591f0eecaf49477d22cf4734cfa9d744ffaf517
Author: JamesBognar <[email protected]>
AuthorDate: Tue Sep 28 10:40:01 2021 -0400

    Context API refactoring.
---
 .../apache/juneau/json/JsonSerializerBuilder.java  |   2 +-
 .../juneau/serializer/SerializerSessionArgs.java   |   8 +-
 .../apache/juneau/serializer/WriterSerializer.java | 194 +++------------------
 .../juneau/serializer/WriterSerializerBuilder.java |  94 +++++-----
 .../juneau/serializer/WriterSerializerSession.java |  16 +-
 .../serializer/annotation/SerializerConfig.java    |  13 +-
 .../annotation/SerializerConfigAnnotation.java     |  33 +++-
 .../juneau/rest/client/RestClientBuilder.java      |  28 +--
 .../juneau/SerializerPropertiesComboTest.java      |   7 +-
 .../client/RestClient_Config_Serializer_Test.java  |   1 -
 10 files changed, 132 insertions(+), 264 deletions(-)

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 17ff6a2..aebd0ab 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
@@ -248,7 +248,7 @@ public class JsonSerializerBuilder extends 
WriterSerializerBuilder {
         * Shortcut for calling <c>simple().sq()</c>.
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link JsonSerializer#WSERIALIZER_quoteChar}
+        *      <li class='jm'>{@link WriterSerializerBuilder#quoteChar(char)}
         * </ul>
         *
         * @return This object.
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 4f3d904..a524bec 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
@@ -41,6 +41,8 @@ public final class SerializerSessionArgs extends 
BeanSessionArgs {
 
        Method javaMethod;
        VarResolverSession resolver;
+       Boolean useWhitespace;
+       Charset fileCharset, streamCharset;
 
        /**
         * Static creator.
@@ -74,7 +76,7 @@ public final class SerializerSessionArgs extends 
BeanSessionArgs {
         */
        @FluentSetter
        public SerializerSessionArgs fileCharset(Charset value) {
-               property(WriterSerializer.WSERIALIZER_fileCharset, value);
+               fileCharset = value;
                return this;
        }
 
@@ -128,7 +130,7 @@ public final class SerializerSessionArgs extends 
BeanSessionArgs {
         */
        @FluentSetter
        public SerializerSessionArgs streamCharset(Charset value) {
-               property(WriterSerializer.WSERIALIZER_streamCharset, value);
+               streamCharset = value;
                return this;
        }
 
@@ -165,7 +167,7 @@ public final class SerializerSessionArgs extends 
BeanSessionArgs {
         */
        @FluentSetter
        public SerializerSessionArgs useWhitespace(Boolean value) {
-               property(WriterSerializer.WSERIALIZER_useWhitespace, value);
+               useWhitespace = value;
                return this;
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
index dbdfe37..b18325e 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
@@ -13,13 +13,12 @@
 package org.apache.juneau.serializer;
 
 import static org.apache.juneau.internal.ExceptionUtils.*;
+import static java.util.Optional.*;
 
 import java.nio.charset.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
-import org.apache.juneau.internal.*;
 
 /**
  * Subclass of {@link Serializer} for character-based serializers.
@@ -29,164 +28,15 @@ import org.apache.juneau.internal.*;
 public abstract class WriterSerializer extends Serializer {
 
        
//-------------------------------------------------------------------------------------------------------------------
-       // Configurable properties
-       
//-------------------------------------------------------------------------------------------------------------------
-
-       static final String PREFIX = "WriterSerializer";
-
-       /**
-        * Configuration property:  File charset.
-        *
-        * <p>
-        * The character set to use for writing <c>Files</c> to the file system.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.serializer.WriterSerializer#WSERIALIZER_fileCharset 
WSERIALIZER_fileCharset}
-        *      <li><b>Name:</b>  <js>"WriterSerializer.fileCharset.s"</js>
-        *      <li><b>Data type:</b>  <c>String</c>
-        *      <li><b>System property:</b>  <c>WriterSerializer.fileCharset</c>
-        *      <li><b>Environment variable:</b>  
<c>WRITERSERIALIZER_FILECHARSET</c>
-        *      <li><b>Default:</b>  <js>"DEFAULT"</js>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.serializer.annotation.SerializerConfig#fileCharset()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.serializer.WriterSerializerBuilder#fileCharset(Charset)}
-        *              </ul>
-        * </ul>
-        */
-       public static final String WSERIALIZER_fileCharset = PREFIX + 
".fileCharset.s";
-
-       /**
-        * Configuration property:  Maximum indentation.
-        *
-        * <p>
-        * Specifies the maximum indentation level in the serialized document.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.serializer.WriterSerializer#WSERIALIZER_maxIndent 
WSERIALIZER_maxIndent}
-        *      <li><b>Name:</b>  <js>"WriterSerializer.maxIndent.i"</js>
-        *      <li><b>Data type:</b>  <jk>int</jk>
-        *      <li><b>System property:</b>  <c>WriterSerializer.maxIndent</c>
-        *      <li><b>Environment variable:</b>  
<c>WRITERSERIALIZER_MAXINDENT</c>
-        *      <li><b>Default:</b>  <c>100</c>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.serializer.annotation.SerializerConfig#maxIndent()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.serializer.WriterSerializerBuilder#maxIndent(int)}
-        *              </ul>
-        * </ul>
-        */
-       public static final String WSERIALIZER_maxIndent = PREFIX + 
".maxIndent.i";
-
-       /**
-        * Configuration property:  Quote character.
-        *
-        * <p>
-        * Specifies the character to use for quoting attributes and values.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.serializer.WriterSerializer#WSERIALIZER_quoteChar 
WSERIALIZER_quoteChar}
-        *      <li><b>Name:</b>  <js>"WriterSerializer.quoteChar.s"</js>
-        *      <li><b>Data type:</b>  <c>String</c>
-        *      <li><b>System property:</b>  <c>WriterSerializer.quoteChar</c>
-        *      <li><b>Environment variable:</b>  
<c>WRITERSERIALIZER_QUOTECHAR</c>
-        *      <li><b>Default:</b>  <js>"\""</js>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.serializer.annotation.SerializerConfig#quoteChar()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.serializer.WriterSerializerBuilder#quoteChar(char)}
-        *                      <li class='jm'>{@link 
org.apache.juneau.serializer.WriterSerializerBuilder#sq()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String WSERIALIZER_quoteChar = PREFIX + 
".quoteChar.s";
-
-       /**
-        * Allows you to override the quote-char setting.
-        */
-       public static final String WSERIALIZER_quoteCharOverride = PREFIX + 
".quoteCharOverride.s";
-
-       /**
-        * Configuration property:  Output stream charset.
-        *
-        * <p>
-        * The character set to use when writing to <c>OutputStreams</c>.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.serializer.WriterSerializer#WSERIALIZER_streamCharset 
WSERIALIZER_streamCharset}
-        *      <li><b>Name:</b>  <js>"WriterSerializer.streamCharset.s"</js>
-        *      <li><b>Data type:</b>  <c>String</c>
-        *      <li><b>System property:</b>  
<c>WriterSerializer.streamCharset</c>
-        *      <li><b>Environment variable:</b>  
<c>WRITERSERIALIZER_STREAMCHARSET</c>
-        *      <li><b>Default:</b>  <js>"UTF-8"</js>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.serializer.annotation.SerializerConfig#streamCharset()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.serializer.WriterSerializerBuilder#streamCharset(Charset)}
-        *              </ul>
-        * </ul>
-        */
-       public static final String WSERIALIZER_streamCharset = PREFIX + 
".streamCharset.s";
-
-       /**
-        * Configuration property:  Use whitespace.
-        *
-        * <p>
-        * When enabled, whitespace is added to the output to improve 
readability.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.serializer.WriterSerializer#WSERIALIZER_useWhitespace 
WSERIALIZER_useWhitespace}
-        *      <li><b>Name:</b>  <js>"WriterSerializer.useWhitespace.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  
<c>WriterSerializer.useWhitespace</c>
-        *      <li><b>Environment variable:</b>  
<c>WRITERSERIALIZER_USEWHITESPACE</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>true</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.serializer.annotation.SerializerConfig#useWhitespace()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.serializer.WriterSerializerBuilder#useWhitespace()}
-        *                      <li class='jm'>{@link 
org.apache.juneau.serializer.WriterSerializerBuilder#ws()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String WSERIALIZER_useWhitespace = PREFIX + 
".useWhitespace.b";
-
-       
//-------------------------------------------------------------------------------------------------------------------
        // Instance
        
//-------------------------------------------------------------------------------------------------------------------
 
-       private final Charset fileCharset;
-       private final int maxIndent;
-       private final char quoteChar;
-       private final Charset streamCharset;
-       private final boolean useWhitespace;
+       final Charset fileCharset, streamCharset;
+       final int maxIndent;
+       final Character quoteChar, quoteCharOverride;
+       final boolean useWhitespace;
 
-       private final Character quoteCharRaw;
+       private final char quoteCharValue;
 
        /**
         * Constructor.
@@ -197,14 +47,14 @@ public abstract class WriterSerializer extends Serializer {
        protected WriterSerializer(WriterSerializerBuilder builder) {
                super(builder);
 
-               ContextProperties cp = getContextProperties();
-               maxIndent = cp.getInteger(WSERIALIZER_maxIndent).orElse(100);
-               quoteChar = 
cp.getString(WSERIALIZER_quoteCharOverride).orElse(cp.getString(WSERIALIZER_quoteChar).orElse("\"")).charAt(0);
-               String _quoteCharRaw = 
cp.getString(WSERIALIZER_quoteCharOverride).orElse(cp.getString(WSERIALIZER_quoteChar).orElse(null));
-               quoteCharRaw = _quoteCharRaw == null ? null : 
_quoteCharRaw.charAt(0);
-               streamCharset = cp.get(WSERIALIZER_streamCharset, 
Charset.class).orElse(IOUtils.UTF8);
-               fileCharset = cp.get(WSERIALIZER_fileCharset, 
Charset.class).orElse(Charset.defaultCharset());
-               useWhitespace = 
cp.getBoolean(WSERIALIZER_useWhitespace).orElse(false);
+               maxIndent = builder.maxIndent;
+               quoteChar = builder.quoteChar;
+               quoteCharOverride = builder.quoteCharOverride;
+               streamCharset = builder.streamCharset;
+               fileCharset = builder.fileCharset;
+               useWhitespace = builder.useWhitespace;
+
+               quoteCharValue = 
ofNullable(quoteCharOverride).orElse(ofNullable(quoteChar).orElse('"'));
        }
 
        @Override
@@ -278,7 +128,7 @@ public abstract class WriterSerializer extends Serializer {
        /**
         * File charset.
         *
-        * @see #WSERIALIZER_fileCharset
+        * @see WriterSerializerBuilder#fileCharset(Charset)
         * @return
         *      The character set to use when writing to <c>Files</c> on the 
file system.
         */
@@ -289,7 +139,7 @@ public abstract class WriterSerializer extends Serializer {
        /**
         * Maximum indentation.
         *
-        * @see #WSERIALIZER_maxIndent
+        * @see WriterSerializerBuilder#maxIndent(int)
         * @return
         *      The maximum indentation level in the serialized document.
         */
@@ -300,29 +150,29 @@ public abstract class WriterSerializer extends Serializer 
{
        /**
         * Quote character.
         *
-        * @see #WSERIALIZER_quoteChar
+        * @see WriterSerializerBuilder#quoteChar(char)
         * @return
         *      The character used for quoting attributes and values.
         */
        protected char getQuoteChar() {
-               return quoteChar;
+               return quoteCharValue;
        }
 
        /**
         * Quote character.
         *
-        * @see #WSERIALIZER_quoteChar
+        * @see WriterSerializerBuilder#quoteChar(char)
         * @return
         *      The character used for quoting attributes and values.
         */
        protected Character quoteChar() {
-               return quoteCharRaw;
+               return ofNullable(quoteCharOverride).orElse(quoteChar);
        }
 
        /**
         * Output stream charset.
         *
-        * @see #WSERIALIZER_streamCharset
+        * @see WriterSerializerBuilder#streamCharset(Charset)
         * @return
         *      The character set to use when writing to <c>OutputStreams</c> 
and byte arrays.
         */
@@ -333,7 +183,7 @@ public abstract class WriterSerializer extends Serializer {
        /**
         * Trim strings.
         *
-        * @see #WSERIALIZER_useWhitespace
+        * @see WriterSerializerBuilder#useWhitespace()
         * @return
         *      When enabled, whitespace is added to the output to improve 
readability.
         */
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 c7ab869..6329c2a 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
@@ -12,8 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.serializer;
 
-import static org.apache.juneau.serializer.WriterSerializer.*;
-
 import java.lang.annotation.*;
 import java.lang.reflect.*;
 import java.nio.charset.*;
@@ -31,11 +29,22 @@ import org.apache.juneau.json.*;
 @FluentSetters
 public abstract class WriterSerializerBuilder extends SerializerBuilder {
 
+       boolean useWhitespace;
+       Charset fileCharset, streamCharset;
+       int maxIndent;
+       Character quoteChar, quoteCharOverride;
+
        /**
         * Constructor, default settings.
         */
        protected WriterSerializerBuilder() {
                super();
+               fileCharset = Charset.defaultCharset();
+               streamCharset = IOUtils.UTF8;
+               maxIndent = env("WriterSerializer.maxIndent", 100);
+               quoteChar = env("WriterSerializer.quoteChar", (Character)null);
+               quoteCharOverride = env("WriterSerializer.quoteCharOverride", 
(Character)null);
+               useWhitespace = env("WriterSerializer.useWhitespace", false);
        }
 
        /**
@@ -45,6 +54,12 @@ public abstract class WriterSerializerBuilder extends 
SerializerBuilder {
         */
        protected WriterSerializerBuilder(WriterSerializer copyFrom) {
                super(copyFrom);
+               fileCharset = copyFrom.fileCharset;
+               streamCharset = copyFrom.streamCharset;
+               maxIndent = copyFrom.maxIndent;
+               quoteChar = copyFrom.quoteChar;
+               quoteCharOverride = copyFrom.quoteCharOverride;
+               useWhitespace = copyFrom.useWhitespace;
        }
 
        /**
@@ -54,6 +69,12 @@ public abstract class WriterSerializerBuilder extends 
SerializerBuilder {
         */
        protected WriterSerializerBuilder(WriterSerializerBuilder copyFrom) {
                super(copyFrom);
+               fileCharset = copyFrom.fileCharset;
+               streamCharset = copyFrom.streamCharset;
+               maxIndent = copyFrom.maxIndent;
+               quoteChar = copyFrom.quoteChar;
+               quoteCharOverride = copyFrom.quoteCharOverride;
+               useWhitespace = copyFrom.useWhitespace;
        }
 
        @Override /* ContextBuilder */
@@ -89,10 +110,6 @@ public abstract class WriterSerializerBuilder extends 
SerializerBuilder {
         *      <jv>serializer</jv>.serialize(<jk>new</jk> 
File(<js>"MyBean.txt"</js>), <jv>myBean</jv>);
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link WriterSerializer#WSERIALIZER_fileCharset}
-        * </ul>
-        *
         * @param value
         *      The new value for this property.
         *      <br>The default is the system JVM setting.
@@ -100,11 +117,12 @@ public abstract class WriterSerializerBuilder extends 
SerializerBuilder {
         */
        @FluentSetter
        public WriterSerializerBuilder fileCharset(Charset value) {
-               return set(WSERIALIZER_fileCharset, value);
+               fileCharset = value;
+               return this;
        }
 
        /**
-        *  Maximum indentation.
+        * Maximum indentation.
         *
         * <p>
         * Specifies the maximum indentation level in the serialized document.
@@ -123,10 +141,6 @@ public abstract class WriterSerializerBuilder extends 
SerializerBuilder {
         *              .build();
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link WriterSerializer#WSERIALIZER_maxIndent}
-        * </ul>
-        *
         * @param value
         *      The new value for this property.
         *      <br>The default is <c>100</c>.
@@ -134,7 +148,8 @@ public abstract class WriterSerializerBuilder extends 
SerializerBuilder {
         */
        @FluentSetter
        public WriterSerializerBuilder maxIndent(int value) {
-               return set(WSERIALIZER_maxIndent, value);
+               maxIndent = value;
+               return this;
        }
 
        /**
@@ -164,10 +179,6 @@ public abstract class WriterSerializerBuilder extends 
SerializerBuilder {
         *      String <jv>json</jv> = 
<jv>serializer</jv>.toString(<jk>new</jk> MyBean());
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link WriterSerializer#WSERIALIZER_quoteChar}
-        * </ul>
-        *
         * @param value
         *      The new value for this property.
         *      <br>The default is <js>'"'</js>.
@@ -175,24 +186,29 @@ public abstract class WriterSerializerBuilder extends 
SerializerBuilder {
         */
        @FluentSetter
        public WriterSerializerBuilder quoteChar(char value) {
-               return set(WSERIALIZER_quoteChar, value);
+               quoteChar = value;
+               return this;
        }
 
        /**
-        * Same as {@link #quoteChar(char)} but overrides it if it has a 
default setting on the serializer.
+        * Quote character override.
+        *
+        * <p>
+        * Similar to {@link #quoteChar(char)} but takes precedence over that 
setting.
         *
         * <p>
-        * For example, you can use this to override the quote character on 
{@link SimpleJsonSerializer} even though
-        * the quote char is normally a single quote on that class.
+        * Allows you to override the quote character even if it's set by a 
subclass such as {@link SimpleJsonSerializer}.
+        *
         *
         * @param value
         *      The new value for this property.
-        *      <br>The default is <js>'"'</js>.
+        *      <br>The default is <jk>null</jk>.
         * @return This object (for method chaining).
         */
        @FluentSetter
        public WriterSerializerBuilder quoteCharOverride(char value) {
-               return set(WSERIALIZER_quoteCharOverride, value);
+               quoteCharOverride = value;
+               return this;
        }
 
        /**
@@ -222,10 +238,6 @@ public abstract class WriterSerializerBuilder extends 
SerializerBuilder {
         *      String <jv>json</jv> = 
<jv>serializer</jv>.toString(<jk>new</jk> MyBean());
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link WriterSerializer#WSERIALIZER_quoteChar}
-        * </ul>
-        *
         * @return This object (for method chaining).
         */
        @FluentSetter
@@ -254,10 +266,6 @@ public abstract class WriterSerializerBuilder extends 
SerializerBuilder {
         *      <jv>serializer</jv>.serializer(<jk>new</jk> 
FileOutputStreamStream(<js>"MyBean.txt"</js>), <jv>myBean</jv>);
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link 
WriterSerializer#WSERIALIZER_streamCharset}
-        * </ul>
-        *
         * @param value
         *      The new value for this property.
         *      <br>The default is the system JVM setting.
@@ -265,7 +273,8 @@ public abstract class WriterSerializerBuilder extends 
SerializerBuilder {
         */
        @FluentSetter
        public WriterSerializerBuilder streamCharset(Charset value) {
-               return set(WSERIALIZER_streamCharset, value);
+               streamCharset = value;
+               return this;
        }
 
        /**
@@ -291,14 +300,23 @@ public abstract class WriterSerializerBuilder extends 
SerializerBuilder {
         *      String <jv>json</jv> = 
<jv>serializer</jv>.serialize(<jk>new</jk> MyBean());
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link 
WriterSerializer#WSERIALIZER_useWhitespace}
-        * </ul>
         * @return This object (for method chaining).
         */
        @FluentSetter
        public WriterSerializerBuilder useWhitespace() {
-               return set(WSERIALIZER_useWhitespace);
+               return useWhitespace(true);
+       }
+
+       /**
+        * Same as {@link #useWhitespace()} but allows you to explicitly 
specify the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public WriterSerializerBuilder useWhitespace(boolean value) {
+               useWhitespace = value;
+               return this;
        }
 
        /**
@@ -324,10 +342,6 @@ public abstract class WriterSerializerBuilder extends 
SerializerBuilder {
         *      String <jv>json</jv> = 
<jv>serializer</jv>.serialize(<jk>new</jk> MyBean());
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link 
WriterSerializer#WSERIALIZER_useWhitespace}
-        * </ul>
-        *
         * @return This object (for method chaining).
         */
        @FluentSetter
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerSession.java
index 245b33b..e3197f4 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerSession.java
@@ -12,12 +12,11 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.serializer;
 
-import static org.apache.juneau.serializer.WriterSerializer.*;
+import static java.util.Optional.*;
 
 import java.io.*;
 import java.nio.charset.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
 
 /**
@@ -57,10 +56,9 @@ public abstract class WriterSerializerSession extends 
SerializerSession {
        protected WriterSerializerSession(WriterSerializer ctx, 
SerializerSessionArgs args) {
                super(ctx, args);
                this.ctx = ctx;
-               SessionProperties sp = getSessionProperties();
-               this.streamCharset = sp.get(WSERIALIZER_streamCharset, 
Charset.class).orElse(ctx.getStreamCharset());
-               this.fileCharset = sp.get(WSERIALIZER_fileCharset, 
Charset.class).orElse(ctx.getFileCharset());
-               this.useWhitespace = 
sp.getBoolean(WSERIALIZER_useWhitespace).orElse(ctx.isUseWhitespace());
+               streamCharset = ofNullable(args == null ? null : 
args.streamCharset).orElse(ctx.streamCharset);
+               fileCharset = ofNullable(args == null ? null : 
args.fileCharset).orElse(ctx.fileCharset);
+               useWhitespace = ofNullable(args == null ? null : 
args.useWhitespace).orElse(ctx.useWhitespace);
        }
 
        @Override /* SerializerSession */
@@ -103,7 +101,7 @@ public abstract class WriterSerializerSession extends 
SerializerSession {
        /**
         * Configuration property:  Maximum indentation.
         *
-        * @see WriterSerializer#WSERIALIZER_maxIndent
+        * @see WriterSerializerBuilder#maxIndent(int)
         * @return
         *      The maximum indentation level in the serialized document.
         */
@@ -114,7 +112,7 @@ public abstract class WriterSerializerSession extends 
SerializerSession {
        /**
         * Configuration property:  Quote character.
         *
-        * @see WriterSerializer#WSERIALIZER_quoteChar
+        * @see WriterSerializerBuilder#quoteChar(char)
         * @return
         *      The character used for quoting attributes and values.
         */
@@ -125,7 +123,7 @@ public abstract class WriterSerializerSession extends 
SerializerSession {
        /**
         * Configuration property:  Use whitespace.
         *
-        * @see WriterSerializer#WSERIALIZER_useWhitespace
+        * @see WriterSerializerBuilder#useWhitespace()
         * @return
         *      The character used for quoting attributes and values.
         */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfig.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfig.java
index 1322ef5..9ed376e 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfig.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfig.java
@@ -16,6 +16,7 @@ import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
 
 import java.lang.annotation.*;
+import java.nio.charset.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
@@ -32,7 +33,7 @@ import org.apache.juneau.serializer.*;
 @Target({TYPE,METHOD})
 @Retention(RUNTIME)
 @Inherited
-@ContextApply(SerializerConfigAnnotation.Apply.class)
+@ContextApply({SerializerConfigAnnotation.Apply.class,SerializerConfigAnnotation.WriterSerializerApply.class})
 public @interface SerializerConfig {
 
        /**
@@ -432,7 +433,7 @@ public @interface SerializerConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link WriterSerializer#WSERIALIZER_fileCharset}
+        *      <li class='jm'>{@link 
WriterSerializerBuilder#fileCharset(java.nio.charset.Charset)}
         * </ul>
         */
        String fileCharset() default "";
@@ -455,7 +456,7 @@ public @interface SerializerConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link WriterSerializer#WSERIALIZER_maxIndent}
+        *      <li class='jm'>{@link WriterSerializerBuilder#maxIndent(int)}
         * </ul>
         */
        String maxIndent() default "";
@@ -476,7 +477,7 @@ public @interface SerializerConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link WriterSerializer#WSERIALIZER_quoteChar}
+        *      <li class='jm'>{@link WriterSerializerBuilder#quoteChar(char)}
         * </ul>
         */
        String quoteChar() default "";
@@ -502,7 +503,7 @@ public @interface SerializerConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link 
WriterSerializer#WSERIALIZER_streamCharset}
+        *      <li class='jm'>{@link 
WriterSerializerBuilder#streamCharset(Charset)}
         * </ul>
         */
        String streamCharset() default "";
@@ -525,7 +526,7 @@ public @interface SerializerConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link 
WriterSerializer#WSERIALIZER_useWhitespace}
+        *      <li class='jm'>{@link WriterSerializerBuilder#useWhitespace()}
         * </ul>
         */
        String useWhitespace() default "";
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfigAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfigAnnotation.java
index 2ff27a4..db02a6d 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfigAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/annotation/SerializerConfigAnnotation.java
@@ -14,10 +14,10 @@ package org.apache.juneau.serializer.annotation;
 
 import static org.apache.juneau.BeanTraverseContext.*;
 import static org.apache.juneau.serializer.OutputStreamSerializer.*;
-import static org.apache.juneau.serializer.WriterSerializer.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.reflect.*;
+import org.apache.juneau.serializer.*;
 import org.apache.juneau.svl.*;
 
 /**
@@ -56,15 +56,36 @@ public class SerializerConfigAnnotation {
                        string(a.uriRelativity()).ifPresent(x -> 
b.set(SERIALIZER_uriRelativity, x));
                        string(a.uriResolution()).ifPresent(x -> 
b.set(SERIALIZER_uriResolution, x));
                        string(a.binaryFormat()).ifPresent(x -> 
b.set(OSSERIALIZER_binaryFormat, x));
-                       charset(a.fileCharset()).ifPresent(x -> 
b.set(WSERIALIZER_fileCharset, x));
-                       integer(a.maxIndent(), "maxIndent").ifPresent(x -> 
b.set(WSERIALIZER_maxIndent, x));
-                       character(a.quoteChar(), "quoteChar").ifPresent(x -> 
b.set(WSERIALIZER_quoteChar, x));
-                       charset(a.streamCharset()).ifPresent(x -> 
b.set(WSERIALIZER_streamCharset, x));
-                       bool(a.useWhitespace()).ifPresent(x -> 
b.set(WSERIALIZER_useWhitespace, x));
                        bool(a.detectRecursions()).ifPresent(x -> 
b.set(BEANTRAVERSE_detectRecursions, x));
                        bool(a.ignoreRecursions()).ifPresent(x -> 
b.set(BEANTRAVERSE_ignoreRecursions, x));
                        integer(a.initialDepth(), "initialDepth").ifPresent(x 
-> b.set(BEANTRAVERSE_initialDepth, x));
                        integer(a.maxDepth(), "maxDepth").ifPresent(x -> 
b.set(BEANTRAVERSE_maxDepth, x));
                }
        }
+
+       /**
+        * Applies {@link SerializerConfig} annotations to a {@link 
WriterSerializerBuilder}.
+        */
+       public static class WriterSerializerApply extends 
AnnotationApplier<SerializerConfig,WriterSerializerBuilder> {
+
+               /**
+                * Constructor.
+                *
+                * @param vr The resolver for resolving values in annotations.
+                */
+               public WriterSerializerApply(VarResolverSession vr) {
+                       super(SerializerConfig.class, 
WriterSerializerBuilder.class, vr);
+               }
+
+               @Override
+               public void apply(AnnotationInfo<SerializerConfig> ai, 
WriterSerializerBuilder b) {
+                       SerializerConfig a = ai.getAnnotation();
+
+                       charset(a.fileCharset()).ifPresent(x -> 
b.fileCharset(x));
+                       integer(a.maxIndent(), "maxIndent").ifPresent(x -> 
b.maxIndent(x));
+                       character(a.quoteChar(), "quoteChar").ifPresent(x -> 
b.quoteChar(x));
+                       charset(a.streamCharset()).ifPresent(x -> 
b.streamCharset(x));
+                       bool(a.useWhitespace()).ifPresent(x -> 
b.useWhitespace(x));
+               }
+       }
 }
\ No newline at end of file
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 7939797..dbeb990 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
@@ -4170,7 +4170,7 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
         * </p>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link WriterSerializer#WSERIALIZER_maxIndent}
+        *      <li class='jm'>{@link WriterSerializerBuilder#maxIndent(int)}
         * </ul>
         *
         * @param value
@@ -4215,7 +4215,7 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
         * </p>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link WriterSerializer#WSERIALIZER_quoteChar}
+        *      <li class='jm'>{@link WriterSerializerBuilder#quoteChar(char)}
         * </ul>
         *
         * @param value
@@ -4230,24 +4230,6 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
        }
 
        /**
-        * Same as {@link #quoteChar(char)} but overrides it if it has a 
default setting on the serializer.
-        *
-        * <p>
-        * For example, you can use this to override the quote character on 
{@link SimpleJsonSerializer} even though
-        * the quote char is normally a single quote on that class.
-        *
-        * @param value
-        *      The new value for this property.
-        *      <br>The default is <js>'"'</js>.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestClientBuilder quoteCharOverride(char value) {
-               serializers().forEachWS(x -> x.quoteCharOverride(value));
-               return this;
-       }
-
-       /**
         * <i><l>WriterSerializer</l> configuration property:&emsp;</i>  Quote 
character.
         *
         * <p>
@@ -4278,7 +4260,7 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
         * </p>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link WriterSerializer#WSERIALIZER_quoteChar}
+        *      <li class='jm'>{@link WriterSerializerBuilder#quoteChar(char)}
         * </ul>
         *
         * @return This object (for method chaining).
@@ -4316,7 +4298,7 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
         * </p>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link 
WriterSerializer#WSERIALIZER_useWhitespace}
+        *      <li class='jm'>{@link WriterSerializerBuilder#useWhitespace()}
         * </ul>
         * @return This object (for method chaining).
         */
@@ -4353,7 +4335,7 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
         * </p>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link 
WriterSerializer#WSERIALIZER_useWhitespace}
+        *      <li class='jm'>{@link WriterSerializerBuilder#useWhitespace()}
         * </ul>
         *
         * @return This object (for method chaining).
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/SerializerPropertiesComboTest.java
 
b/juneau-utest/src/test/java/org/apache/juneau/SerializerPropertiesComboTest.java
index f22f025..90569fc 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/SerializerPropertiesComboTest.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/SerializerPropertiesComboTest.java
@@ -13,11 +13,11 @@
 package org.apache.juneau;
 
 import static org.apache.juneau.serializer.Serializer.*;
-import static org.apache.juneau.serializer.WriterSerializer.*;
 import java.util.*;
 
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
+import org.apache.juneau.serializer.*;
 import org.apache.juneau.xml.*;
 import org.junit.runner.*;
 import org.junit.runners.*;
@@ -353,7 +353,7 @@ public class SerializerPropertiesComboTest extends 
ComboRoundTripTest {
                                .rdfXml("<rdf:RDF>\n  <rdf:Description>\n    
<jp:f1>1</jp:f1>\n    <jp:f2 rdf:parseType='Resource'>\n      
<jp:f1>2</jp:f1>\n      <jp:f2 rdf:parseType='Resource'>\n        
<jp:f1>3</jp:f1>\n      </jp:f2>\n    </jp:f2>\n  
</rdf:Description>\n</rdf:RDF>\n")
                                .rdfXmlT("<rdf:RDF>\n  <rdf:Description>\n    
<jp:f1>1</jp:f1>\n    <jp:f2 rdf:parseType='Resource'>\n      
<jp:f1>2</jp:f1>\n      <jp:f2 rdf:parseType='Resource'>\n        
<jp:f1>3</jp:f1>\n      </jp:f2>\n    </jp:f2>\n  
</rdf:Description>\n</rdf:RDF>\n")
                                .rdfXmlR("<rdf:RDF>\n  <rdf:Description>\n    
<jp:f1>1</jp:f1>\n    <jp:f2 rdf:parseType='Resource'>\n      
<jp:f1>2</jp:f1>\n      <jp:f2 rdf:parseType='Resource'>\n        
<jp:f1>3</jp:f1>\n      </jp:f2>\n    </jp:f2>\n  
</rdf:Description>\n</rdf:RDF>\n")
-                               .properties(OMap.of(WSERIALIZER_maxIndent, 2, 
WSERIALIZER_useWhitespace, true))
+                               .apply(WriterSerializerBuilder.class, x -> 
x.maxIndent(2).useWhitespace())
                        },
                        {       /* 11 */
                                new ComboInput<>(
@@ -383,7 +383,8 @@ public class SerializerPropertiesComboTest extends 
ComboRoundTripTest {
                                
.rdfXmlT("<rdf:RDF>\n<rdf:Description>\n<jp:t>T11</jp:t>\n<jp:f>\n<rdf:Seq>\n<rdf:li
 
rdf:parseType='Resource'>\n<jp:f>\n<rdf:Seq>\n<rdf:li>_x0020_foo_x0020_</rdf:li>\n</rdf:Seq>\n</jp:f>\n</rdf:li>\n</rdf:Seq>\n</jp:f>\n</rdf:Description>\n</rdf:RDF>\n")
                                .rdfXmlR("<rdf:RDF>\n  <rdf:Description>\n    
<jp:_type>T11</jp:_type>\n    <jp:f>\n      <rdf:Seq>\n        <rdf:li 
rdf:parseType='Resource'>\n          <jp:f>\n            <rdf:Seq>\n            
  <rdf:li>_x0020_foo_x0020_</rdf:li>\n            </rdf:Seq>\n          
</jp:f>\n        </rdf:li>\n      </rdf:Seq>\n    </jp:f>\n  
</rdf:Description>\n</rdf:RDF>\n")
                                .apply(XmlSerializerBuilder.class, x -> 
x.addNamespaceUrisToRoot())
-                               
.properties(OMap.of(WSERIALIZER_quoteCharOverride, '|', 
SERIALIZER_addBeanTypes, true, SERIALIZER_addRootType, true))
+                               .apply(WriterSerializerBuilder.class, x -> 
x.quoteCharOverride('|'))
+                               .properties(OMap.of(SERIALIZER_addBeanTypes, 
true, SERIALIZER_addRootType, true))
                                .skipTest(x -> x.startsWith("parse") || 
x.startsWith("verify"))
                        },
                });
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_Serializer_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_Serializer_Test.java
index ba73db5..18b7f2c 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_Serializer_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_Serializer_Test.java
@@ -214,7 +214,6 @@ public class RestClient_Config_Serializer_Test {
                A15 x = new A15();
                
MockRestClient.create(A.class).json().quoteChar('\'').build().post("/echoBody",x).run().assertBody().is("{'f1':'foo'}");
                
MockRestClient.create(A.class).json().quoteChar('|').build().post("/echoBody",x).run().assertBody().is("{|f1|:|foo|}");
-               
client().quoteCharOverride('|').build().post("/echoBody",x).run().assertBody().is("{f1:|foo|}");
        }
 
        @Test

Reply via email to