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

commit 1e7614aa6d85686fb0e062c350e3cf80552790b5
Author: JamesBognar <[email protected]>
AuthorDate: Tue Sep 28 09:34:12 2021 -0400

    Context API refactoring.
---
 .../java/org/apache/juneau/marshall/Marshall.java  |  17 +-
 .../apache/juneau/parser/InputStreamParser.java    |  41 +---
 .../juneau/parser/InputStreamParserBuilder.java    |  14 +-
 .../juneau/parser/InputStreamParserSession.java    |   4 +-
 .../main/java/org/apache/juneau/parser/Parser.java | 234 +++------------------
 .../org/apache/juneau/parser/ParserBuilder.java    | 113 +++++++---
 .../org/apache/juneau/parser/ParserSession.java    |  37 ++--
 .../apache/juneau/parser/ParserSessionArgs.java    |   5 +-
 .../org/apache/juneau/parser/ReaderParser.java     |  74 +------
 .../apache/juneau/parser/ReaderParserBuilder.java  |  24 +--
 .../apache/juneau/parser/ReaderParserSession.java  |  19 +-
 .../juneau/parser/annotation/ParserConfig.java     |  22 +-
 .../parser/annotation/ParserConfigAnnotation.java  |  74 +++++--
 .../juneau/serializer/WriterSerializerSession.java |  18 ++
 .../juneau/rest/client/RestClientBuilder.java      |   6 +-
 .../org/apache/juneau/rest/RestContextBuilder.java |   5 +-
 .../juneau/rest/Header_AcceptCharset_Test.java     |  14 +-
 .../juneau/testutils/MockWriterSerializer.java     |   6 +-
 .../testutils/MockWriterSerializerFunction.java    |   2 +-
 19 files changed, 282 insertions(+), 447 deletions(-)

diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/Marshall.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/Marshall.java
index 3806184..2af5ba9 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/Marshall.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/Marshall.java
@@ -16,6 +16,7 @@ import static org.apache.juneau.internal.ExceptionUtils.*;
 
 import java.io.*;
 import java.lang.reflect.*;
+import java.nio.charset.*;
 import java.text.*;
 
 import org.apache.juneau.*;
@@ -276,11 +277,11 @@ public abstract class Marshall {
         *              <li>{@link Reader}
         *              <li>{@link CharSequence}
         *              <li>{@link InputStream} containing UTF-8 encoded text 
(or charset defined by
-        *                      {@link ReaderParser#RPARSER_streamCharset} 
property value).
+        *                      {@link 
ReaderParserBuilder#streamCharset(Charset)} property value).
         *              <li><code><jk>byte</jk>[]</code> containing UTF-8 
encoded text (or charset defined by
-        *                      {@link ReaderParser#RPARSER_streamCharset} 
property value).
+        *                      {@link 
ReaderParserBuilder#streamCharset(Charset)} property value).
         *              <li>{@link File} containing system encoded text (or 
charset defined by
-        *                      {@link ReaderParser#RPARSER_fileCharset} 
property value).
+        *                      {@link 
ReaderParserBuilder#fileCharset(Charset)} property value).
         *      </ul>
         *      <br>Stream-based parsers can handle the following input class 
types:
         *      <ul>
@@ -288,7 +289,7 @@ public abstract class Marshall {
         *              <li>{@link InputStream}
         *              <li><code><jk>byte</jk>[]</code>
         *              <li>{@link File}
-        *              <li>{@link CharSequence} containing encoded bytes 
according to the {@link InputStreamParser#ISPARSER_binaryFormat} setting.
+        *              <li>{@link CharSequence} containing encoded bytes 
according to the {@link InputStreamParserBuilder#binaryFormat(BinaryFormat)} 
setting.
         *      </ul>
         * @param type
         *      The object type to create.
@@ -318,11 +319,11 @@ public abstract class Marshall {
         *              <li>{@link Reader}
         *              <li>{@link CharSequence}
         *              <li>{@link InputStream} containing UTF-8 encoded text 
(or charset defined by
-        *                      {@link ReaderParser#RPARSER_streamCharset} 
property value).
+        *                      {@link 
ReaderParserBuilder#streamCharset(Charset)} property value).
         *              <li><code><jk>byte</jk>[]</code> containing UTF-8 
encoded text (or charset defined by
-        *                      {@link ReaderParser#RPARSER_streamCharset} 
property value).
+        *                      {@link 
ReaderParserBuilder#streamCharset(Charset)} property value).
         *              <li>{@link File} containing system encoded text (or 
charset defined by
-        *                      {@link ReaderParser#RPARSER_fileCharset} 
property value).
+        *                      {@link 
ReaderParserBuilder#fileCharset(Charset)} property value).
         *      </ul>
         *      <br>Stream-based parsers can handle the following input class 
types:
         *      <ul>
@@ -330,7 +331,7 @@ public abstract class Marshall {
         *              <li>{@link InputStream}
         *              <li><code><jk>byte</jk>[]</code>
         *              <li>{@link File}
-        *              <li>{@link CharSequence} containing encoded bytes 
according to the {@link InputStreamParser#ISPARSER_binaryFormat} setting.
+        *              <li>{@link CharSequence} containing encoded bytes 
according to the {@link InputStreamParserBuilder#binaryFormat(BinaryFormat)} 
setting.
         *      </ul>
         * @param type
         *      The object type to create.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParser.java
index 4820d99..a3f99f2 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParser.java
@@ -32,44 +32,10 @@ import org.apache.juneau.collections.*;
 public abstract class InputStreamParser extends Parser {
 
        
//-------------------------------------------------------------------------------------------------------------------
-       // Configurable properties
-       
//-------------------------------------------------------------------------------------------------------------------
-
-       static final String PREFIX = "InputStreamParser";
-
-       /**
-        * Configuration property:  Binary input format.
-        *
-        * <p>
-        * When using the {@link #parse(Object,Class)} method on stream-based 
parsers and the input is a string, this defines the format to use
-        * when converting the string into a byte array.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.parser.InputStreamParser#ISPARSER_binaryFormat 
ISPARSER_binaryFormat}
-        *      <li><b>Name:</b>  <js>"InputStreamParser.binaryFormat.s"</js>
-        *      <li><b>Data type:</b>  {@link org.apache.juneau.BinaryFormat}
-        *      <li><b>System property:</b>  
<c>InputStreamParser.binaryFormat</c>
-        *      <li><b>Environment variable:</b>  
<c>INPUTSTREAMFORMAT_BINARYFORMAT</c>
-        *      <li><b>Default:</b>  {@link org.apache.juneau.BinaryFormat#HEX}
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.parser.annotation.ParserConfig#binaryFormat()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.parser.InputStreamParserBuilder#binaryFormat(BinaryFormat)}
-        *              </ul>
-        * </ul>
-        */
-       public static final String ISPARSER_binaryFormat = PREFIX + 
".binaryFormat.s";
-
-       
//-------------------------------------------------------------------------------------------------------------------
        // Instance
        
//-------------------------------------------------------------------------------------------------------------------
 
-       private final BinaryFormat binaryFormat;
+       final BinaryFormat binaryFormat;
 
        /**
         * Constructor.
@@ -78,8 +44,7 @@ public abstract class InputStreamParser extends Parser {
         */
        protected InputStreamParser(InputStreamParserBuilder builder) {
                super(builder);
-               ContextProperties cp = getContextProperties();
-               binaryFormat = cp.get(ISPARSER_binaryFormat, 
BinaryFormat.class).orElse(BinaryFormat.HEX);
+               binaryFormat = builder.binaryFormat;
        }
 
        @Override /* Parser */
@@ -94,7 +59,7 @@ public abstract class InputStreamParser extends Parser {
        /**
         * Binary input format.
         *
-        * @see #ISPARSER_binaryFormat
+        * @see InputStreamParserBuilder#binaryFormat(BinaryFormat)
         * @return
         *      The format to use when converting strings to byte arrays.
         */
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 1d1c7a7..2f1dd5b 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
@@ -12,8 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.parser;
 
-import static org.apache.juneau.parser.InputStreamParser.*;
-
 import java.lang.annotation.*;
 import java.lang.reflect.*;
 import java.util.*;
@@ -29,11 +27,14 @@ import org.apache.juneau.internal.*;
 @FluentSetters
 public abstract class InputStreamParserBuilder extends ParserBuilder {
 
+       BinaryFormat binaryFormat;
+
        /**
         * Constructor, default settings.
         */
        protected InputStreamParserBuilder() {
                super();
+               binaryFormat = env("InputStreamParser.binaryFormat", 
BinaryFormat.HEX);
        }
 
        /**
@@ -43,6 +44,7 @@ public abstract class InputStreamParserBuilder extends 
ParserBuilder {
         */
        protected InputStreamParserBuilder(InputStreamParser copyFrom) {
                super(copyFrom);
+               binaryFormat = copyFrom.binaryFormat;
        }
 
        /**
@@ -52,6 +54,7 @@ public abstract class InputStreamParserBuilder extends 
ParserBuilder {
         */
        protected InputStreamParserBuilder(InputStreamParserBuilder copyFrom) {
                super(copyFrom);
+               binaryFormat = copyFrom.binaryFormat;
        }
 
        @Override /* ContextBuilder */
@@ -86,10 +89,6 @@ public abstract class InputStreamParserBuilder extends 
ParserBuilder {
         *      MyBean <jv>myBean</jv> = <jv>parser</jv> .parse(<jv>input</jv> 
, MyBean.<jk>class</jk>);
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link InputStreamParser#ISPARSER_binaryFormat}
-        * </ul>
-        *
         * @param value
         *      The new value for this property.
         *      <br>The default value is {@link BinaryFormat#HEX}.
@@ -97,7 +96,8 @@ public abstract class InputStreamParserBuilder extends 
ParserBuilder {
         */
        @FluentSetter
        public InputStreamParserBuilder binaryFormat(BinaryFormat value) {
-               return set(ISPARSER_binaryFormat, value);
+               binaryFormat = value;
+               return this;
        }
 
        // <FluentSetters>
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserSession.java
index 5635665..a151444 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserSession.java
@@ -58,7 +58,7 @@ public abstract class InputStreamParserSession extends 
ParserSession {
         *              <li>{@link InputStream}
         *              <li><code><jk>byte</jk>[]</code>
         *              <li>{@link File}
-        *              <li>{@link CharSequence} containing encoded bytes 
according to the {@link InputStreamParser#ISPARSER_binaryFormat} setting.
+        *              <li>{@link CharSequence} containing encoded bytes 
according to the {@link InputStreamParserBuilder#binaryFormat(BinaryFormat)} 
setting.
         *      </ul>
         * @return
         *      A new {@link ParserPipe} wrapper around the specified input 
object.
@@ -76,7 +76,7 @@ public abstract class InputStreamParserSession extends 
ParserSession {
        /**
         * Configuration property:  Binary input format.
         *
-        * @see InputStreamParser#ISPARSER_binaryFormat
+        * @see InputStreamParserBuilder#binaryFormat(BinaryFormat)
         * @return
         *      The format to use when converting strings to byte arrays.
         */
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 86b334a..948b19c 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
@@ -16,6 +16,7 @@ import static java.util.Optional.*;
 
 import java.io.*;
 import java.lang.reflect.*;
+import java.nio.charset.*;
 import java.util.*;
 
 import org.apache.juneau.*;
@@ -119,6 +120,10 @@ import org.apache.juneau.utils.*;
 @ConfigurableContext
 public abstract class Parser extends BeanContextable {
 
+       
//-------------------------------------------------------------------------------------------------------------------
+       // Static
+       
//-------------------------------------------------------------------------------------------------------------------
+
        /**
         * Represents no Parser.
         */
@@ -143,186 +148,16 @@ public abstract class Parser extends BeanContextable {
        }
 
        
//-------------------------------------------------------------------------------------------------------------------
-       // Configurable properties
-       
//-------------------------------------------------------------------------------------------------------------------
-
-       static final String PREFIX = "Parser";
-
-       /**
-        * Configuration property:  Auto-close streams.
-        *
-        * <p>
-        * When enabled, <l>InputStreams</l> and <l>Readers</l> passed into 
parsers will be closed
-        * after parsing is complete.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.parser.Parser#PARSER_autoCloseStreams PARSER_autoCloseStreams}
-        *      <li><b>Name:</b>  <js>"Parser.autoCloseStreams.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  <c>Parser.autoCloseStreams</c>
-        *      <li><b>Environment variable:</b>  <c>PARSER_AUTOCLOSESTREAMS</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.parser.annotation.ParserConfig#autoCloseStreams()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.parser.ParserBuilder#autoCloseStreams()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String PARSER_autoCloseStreams = PREFIX + 
".autoCloseStreams.b";
-
-       /**
-        * Configuration property:  Debug output lines.
-        *
-        * <p>
-        * When parse errors occur, this specifies the number of lines of input 
before and after the
-        * error location to be printed as part of the exception message.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.parser.Parser#PARSER_debugOutputLines PARSER_debugOutputLines}
-        *      <li><b>Name:</b>  <js>"Parser.debugOutputLines.i"</js>
-        *      <li><b>Data type:</b>  <jk>int</jk>
-        *      <li><b>System property:</b>  <c>Parser.debugOutputLines</c>
-        *      <li><b>Environment variable:</b>  <c>PARSER_DEBUGOUTPUTLINES</c>
-        *      <li><b>Default:</b>  <c>5</c>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.parser.annotation.ParserConfig#debugOutputLines()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.parser.ParserBuilder#debugOutputLines(int)}
-        *              </ul>
-        * </ul>
-        */
-       public static final String PARSER_debugOutputLines = PREFIX + 
".debugOutputLines.i";
-
-       /**
-        * Configuration property:  Parser listener.
-        *
-        * <p>
-        * Class used to listen for errors and warnings that occur during 
parsing.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.parser.Parser#PARSER_listener PARSER_listener}
-        *      <li><b>Name:</b>  <js>"Parser.listener.c"</js>
-        *      <li><b>Data type:</b>  <c>Class&lt;{@link 
org.apache.juneau.parser.ParserListener}&gt;</c>
-        *      <li><b>Default:</b>  <jk>null</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.parser.annotation.ParserConfig#listener()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.parser.ParserBuilder#listener(Class)}
-        *              </ul>
-        * </ul>
-        */
-       public static final String PARSER_listener = PREFIX + ".listener.c";
-
-       /**
-        * Configuration property:  Strict mode.
-        *
-        * <p>
-        * When enabled, strict mode for the parser is enabled.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.parser.Parser#PARSER_strict PARSER_strict}
-        *      <li><b>Name:</b>  <js>"Parser.strict.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  <c>Parser.strict</c>
-        *      <li><b>Environment variable:</b>  <c>PARSER_STRICT</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.parser.annotation.ParserConfig#strict()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.parser.ParserBuilder#strict()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String PARSER_strict = PREFIX + ".strict.b";
-
-       /**
-        * Configuration property:  Trim parsed strings.
-        *
-        * <p>
-        * When enabled, string values will be trimmed of whitespace using 
{@link String#trim()} before being added to
-        * the POJO.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.parser.Parser#PARSER_trimStrings PARSER_trimStrings}
-        *      <li><b>Name:</b>  <js>"Parser.trimStrings.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  <c>Parser.trimStrings</c>
-        *      <li><b>Environment variable:</b>  <c>PARSER_TRIMSTRINGS</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.parser.annotation.ParserConfig#trimStrings()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.parser.ParserBuilder#trimStrings()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String PARSER_trimStrings = PREFIX + 
".trimStrings.b";
-
-       /**
-        * Configuration property:  Unbuffered.
-        *
-        * <p>
-        * When enabled, don't use internal buffering during parsing.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.parser.Parser#PARSER_unbuffered PARSER_unbuffered}
-        *      <li><b>Name:</b>  <js>"Parser.unbuffered.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  <c>Parser.unbuffered</c>
-        *      <li><b>Environment variable:</b>  <c>PARSER_UNBUFFERED</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.parser.annotation.ParserConfig#unbuffered()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.parser.ParserBuilder#unbuffered()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String PARSER_unbuffered = PREFIX + ".unbuffered.b";
-
-       
//-------------------------------------------------------------------------------------------------------------------
        // Instance
        
//-------------------------------------------------------------------------------------------------------------------
 
-       private final boolean trimStrings, strict, autoCloseStreams, unbuffered;
-       private final int debugOutputLines;
-       private final Class<? extends ParserListener> listener;
+       final boolean trimStrings, strict, autoCloseStreams, unbuffered;
+       final int debugOutputLines;
+       final String consumes;
+       final Class<? extends ParserListener> listener;
 
        /** General parser properties currently set on this parser. */
-       private final MediaType[] consumes;
-
-       final String _consumes;
+       private final MediaType[] consumesArray;
 
        /**
         * Constructor.
@@ -332,19 +167,18 @@ public abstract class Parser extends BeanContextable {
        protected Parser(ParserBuilder builder) {
                super(builder);
 
-               _consumes = ofNullable(builder.consumes).orElse("");
-               ContextProperties cp = getContextProperties();
-               trimStrings = cp.getBoolean(PARSER_trimStrings).orElse(false);
-               strict = cp.getBoolean(PARSER_strict).orElse(false);
-               autoCloseStreams = 
cp.getBoolean(PARSER_autoCloseStreams).orElse(false);
-               debugOutputLines = 
cp.getInteger(PARSER_debugOutputLines).orElse(5);
-               unbuffered = cp.getBoolean(PARSER_unbuffered).orElse(false);
-               listener = cp.getClass(PARSER_listener, 
ParserListener.class).orElse(null);
-
-               String[] consumes = StringUtils.split(_consumes, ',');
-               this.consumes = new MediaType[consumes.length];
-               for (int i = 0; i < consumes.length; i++) {
-                       this.consumes[i] = MediaType.of(consumes[i]);
+               consumes = builder.consumes;
+               trimStrings = builder.trimStrings;
+               strict = builder.strict;
+               autoCloseStreams = builder.autoCloseStreams;
+               debugOutputLines = builder.debugOutputLines;
+               unbuffered = builder.unbuffered;
+               listener = builder.listener;
+
+               String[] _consumes = 
StringUtils.split(ofNullable(consumes).orElse(""), ',');
+               this.consumesArray = new MediaType[_consumes.length];
+               for (int i = 0; i < _consumes.length; i++) {
+                       this.consumesArray[i] = MediaType.of(_consumes[i]);
                }
        }
 
@@ -432,11 +266,11 @@ public abstract class Parser extends BeanContextable {
         *              <li>{@link Reader}
         *              <li>{@link CharSequence}
         *              <li>{@link InputStream} containing UTF-8 encoded text 
(or charset defined by
-        *                      {@link ReaderParser#RPARSER_streamCharset} 
property value).
+        *                      {@link 
ReaderParserBuilder#streamCharset(Charset)} property value).
         *              <li><code><jk>byte</jk>[]</code> containing UTF-8 
encoded text (or charset defined by
-        *                      {@link ReaderParser#RPARSER_streamCharset} 
property value).
+        *                      {@link 
ReaderParserBuilder#streamCharset(Charset)} property value).
         *              <li>{@link File} containing system encoded text (or 
charset defined by
-        *                      {@link ReaderParser#RPARSER_fileCharset} 
property value).
+        *                      {@link 
ReaderParserBuilder#fileCharset(Charset)} property value).
         *      </ul>
         *      <br>Stream-based parsers can handle the following input class 
types:
         *      <ul>
@@ -444,7 +278,7 @@ public abstract class Parser extends BeanContextable {
         *              <li>{@link InputStream}
         *              <li><code><jk>byte</jk>[]</code>
         *              <li>{@link File}
-        *              <li>{@link CharSequence} containing encoded bytes 
according to the {@link InputStreamParser#ISPARSER_binaryFormat} setting.
+        *              <li>{@link CharSequence} containing encoded bytes 
according to the {@link InputStreamParserBuilder#binaryFormat(BinaryFormat)} 
setting.
         *      </ul>
         * @param type
         *      The object type to create.
@@ -674,7 +508,7 @@ public abstract class Parser extends BeanContextable {
         * @return The list of media types.  Never <jk>null</jk>.
         */
        public final MediaType[] getMediaTypes() {
-               return consumes;
+               return consumesArray;
        }
 
        /**
@@ -683,7 +517,7 @@ public abstract class Parser extends BeanContextable {
         * @return The media type.
         */
        public final MediaType getPrimaryMediaType() {
-               return consumes == null || consumes.length == 0 ? null : 
consumes[0];
+               return consumesArray == null || consumesArray.length == 0 ? 
null : consumesArray[0];
        }
 
        /**
@@ -707,7 +541,7 @@ public abstract class Parser extends BeanContextable {
        /**
         * Auto-close streams.
         *
-        * @see #PARSER_autoCloseStreams
+        * @see ParserBuilder#autoCloseStreams()
         * @return
         *      <jk>true</jk> if <l>InputStreams</l> and <l>Readers</l> passed 
into parsers will be closed
         *      after parsing is complete.
@@ -719,7 +553,7 @@ public abstract class Parser extends BeanContextable {
        /**
         * Debug output lines.
         *
-        * @see #PARSER_debugOutputLines
+        * @see ParserBuilder#debugOutputLines(int)
         * @return
         *      The number of lines of input before and after the error 
location to be printed as part of the exception message.
         */
@@ -730,7 +564,7 @@ public abstract class Parser extends BeanContextable {
        /**
         * Parser listener.
         *
-        * @see #PARSER_listener
+        * @see ParserBuilder#listener(Class)
         * @return
         *      Class used to listen for errors and warnings that occur during 
parsing.
         */
@@ -741,7 +575,7 @@ public abstract class Parser extends BeanContextable {
        /**
         * Strict mode.
         *
-        * @see #PARSER_strict
+        * @see ParserBuilder#strict()
         * @return
         *      <jk>true</jk> if strict mode for the parser is enabled.
         */
@@ -752,7 +586,7 @@ public abstract class Parser extends BeanContextable {
        /**
         * Trim parsed strings.
         *
-        * @see #PARSER_trimStrings
+        * @see ParserBuilder#trimStrings()
         * @return
         *      <jk>true</jk> if string values will be trimmed of whitespace 
using {@link String#trim()} before being added to
         *      the POJO.
@@ -764,7 +598,7 @@ public abstract class Parser extends BeanContextable {
        /**
         * Unbuffered.
         *
-        * @see #PARSER_unbuffered
+        * @see ParserBuilder#unbuffered()
         * @return
         *      <jk>true</jk> if parsers don't use internal buffering during 
parsing.
         */
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 afa9702..e728796 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
@@ -12,8 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.parser;
 
-import static org.apache.juneau.parser.Parser.*;
-
 import java.lang.annotation.*;
 import java.lang.reflect.*;
 import java.util.*;
@@ -34,13 +32,23 @@ import org.apache.juneau.xml.*;
 @FluentSetters
 public abstract class ParserBuilder extends BeanContextableBuilder {
 
+       boolean autoCloseStreams, strict, trimStrings, unbuffered;
        String consumes;
+       int debugOutputLines;
+       Class<? extends ParserListener> listener;
 
        /**
         * Constructor, default settings.
         */
        protected ParserBuilder() {
                super();
+               autoCloseStreams = env("Parser.autoCloseStreams", false);
+               strict = env("Parser.strict", false);
+               trimStrings = env("Parser.trimStrings", false);
+               unbuffered = env("Parser.unbuffered", false);
+               debugOutputLines = env("Parser.debugOutputLines", 5);
+               listener = null;
+               consumes = null;
        }
 
        /**
@@ -50,7 +58,13 @@ public abstract class ParserBuilder extends 
BeanContextableBuilder {
         */
        protected ParserBuilder(Parser copyFrom) {
                super(copyFrom);
-               consumes = copyFrom._consumes;
+               autoCloseStreams = copyFrom.autoCloseStreams;
+               strict = copyFrom.strict;
+               trimStrings = copyFrom.trimStrings;
+               unbuffered = copyFrom.unbuffered;
+               debugOutputLines = copyFrom.debugOutputLines;
+               listener = copyFrom.listener;
+               consumes = copyFrom.consumes;
        }
 
        /**
@@ -60,6 +74,12 @@ public abstract class ParserBuilder extends 
BeanContextableBuilder {
         */
        protected ParserBuilder(ParserBuilder copyFrom) {
                super(copyFrom);
+               autoCloseStreams = copyFrom.autoCloseStreams;
+               strict = copyFrom.strict;
+               trimStrings = copyFrom.trimStrings;
+               unbuffered = copyFrom.unbuffered;
+               debugOutputLines = copyFrom.debugOutputLines;
+               listener = copyFrom.listener;
                consumes = copyFrom.consumes;
        }
 
@@ -117,15 +137,23 @@ public abstract class ParserBuilder extends 
BeanContextableBuilder {
         *      <jsm>assertTrue</jsm>(r.isClosed());
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link Parser#PARSER_autoCloseStreams}
-        * </ul>
-        *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public ParserBuilder autoCloseStreams() {
-               return set(PARSER_autoCloseStreams);
+               return autoCloseStreams(true);
+       }
+
+       /**
+        * Same as {@link #autoCloseStreams()} but allows you to explicitly 
specify the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public ParserBuilder autoCloseStreams(boolean value) {
+               autoCloseStreams = value;
+               return this;
        }
 
        /**
@@ -152,10 +180,6 @@ public abstract class ParserBuilder extends 
BeanContextableBuilder {
         *      }
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link Parser#PARSER_debugOutputLines}
-        * </ul>
-        *
         * @param value
         *      The new value for this property.
         *      <br>The default value is <c>5</c>.
@@ -163,7 +187,8 @@ public abstract class ParserBuilder extends 
BeanContextableBuilder {
         */
        @FluentSetter
        public ParserBuilder debugOutputLines(int value) {
-               return set(PARSER_debugOutputLines, value);
+               debugOutputLines = value;
+               return this;
        }
 
        /**
@@ -209,19 +234,15 @@ public abstract class ParserBuilder extends 
BeanContextableBuilder {
         *      }
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link Parser#PARSER_listener}
-        * </ul>
-        *
         * @param value The new value for this property.
         * @return This object (for method chaining).
         */
        @FluentSetter
        public ParserBuilder listener(Class<? extends ParserListener> value) {
-               return set(PARSER_listener, value);
+               listener = value;
+               return this;
        }
 
-
        /**
         * Strict mode.
         *
@@ -273,15 +294,23 @@ public abstract class ParserBuilder extends 
BeanContextableBuilder {
         *      }
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link Parser#PARSER_strict}
-        * </ul>
-        *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public ParserBuilder strict() {
-               return set(PARSER_strict);
+               return strict(true);
+       }
+
+       /**
+        * Same as {@link #strict()} but allows you to explicitly specify the 
value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public ParserBuilder strict(boolean value) {
+               strict = value;
+               return this;
        }
 
        /**
@@ -307,15 +336,23 @@ public abstract class ParserBuilder extends 
BeanContextableBuilder {
         *      <jsm>assertEquals</jsm>(<js>"bar"</js>, 
<jv>myMap</jv>.get(<js>"foo"</js>));
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link Parser#PARSER_trimStrings}
-        * </ul>
-        *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public ParserBuilder trimStrings() {
-               return set(PARSER_trimStrings);
+               return trimStrings(true);
+       }
+
+       /**
+        * Same as {@link #trimStrings()} but allows you to explicitly specify 
the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public ParserBuilder trimStrings(boolean value) {
+               trimStrings = value;
+               return this;
        }
 
        /**
@@ -362,15 +399,23 @@ public abstract class ParserBuilder extends 
BeanContextableBuilder {
         *              </ul>
         * </ul>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link Parser#PARSER_unbuffered}
-        * </ul>
-        *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public ParserBuilder unbuffered() {
-               return set(PARSER_unbuffered);
+               return unbuffered(true);
+       }
+
+       /**
+        * Same as {@link #unbuffered()} but allows you to explicitly specify 
the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public ParserBuilder unbuffered(boolean value) {
+               unbuffered = value;
+               return this;
        }
 
        // <FluentSetters>
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
index 6867bc3..d30c486 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
@@ -15,10 +15,10 @@ package org.apache.juneau.parser;
 import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.ExceptionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.parser.Parser.*;
 
 import java.io.*;
 import java.lang.reflect.*;
+import java.nio.charset.*;
 import java.util.*;
 
 import org.apache.juneau.*;
@@ -63,10 +63,9 @@ public abstract class ParserSession extends BeanSession {
                super(ctx.getBeanContext(), args == null ? 
ParserSessionArgs.DEFAULT : args);
                args = args == null ? ParserSessionArgs.DEFAULT : args;
                this.ctx = ctx;
-               SessionProperties sp = getSessionProperties();
                javaMethod = args.javaMethod;
                outer = args.outer;
-               listener = sp.getInstance(PARSER_listener, 
ParserListener.class).orElseGet(()->ClassUtils.castOrCreate(ParserListener.class,
 ctx.getListener()));
+               listener = ClassUtils.castOrCreate(ParserListener.class, 
ctx.getListener());
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
@@ -117,11 +116,11 @@ public abstract class ParserSession extends BeanSession {
         *              <li>{@link Reader}
         *              <li>{@link CharSequence}
         *              <li>{@link InputStream} containing UTF-8 encoded text 
(or whatever the encoding specified by
-        *                      {@link ReaderParser#RPARSER_streamCharset}).
+        *                      {@link 
ReaderParserBuilder#streamCharset(Charset)}).
         *              <li><code><jk>byte</jk>[]</code> containing UTF-8 
encoded text (or whatever the encoding specified by
-        *                      {@link ReaderParser#RPARSER_streamCharset}).
+        *                      {@link 
ReaderParserBuilder#streamCharset(Charset)}).
         *              <li>{@link File} containing system encoded text (or 
whatever the encoding specified by
-        *                      {@link ReaderParser#RPARSER_fileCharset}).
+        *                      {@link 
ReaderParserBuilder#fileCharset(Charset)}).
         *      </ul>
         *      <br>For byte-based parsers, this can be any of the following 
types:
         *      <ul>
@@ -129,7 +128,7 @@ public abstract class ParserSession extends BeanSession {
         *              <li>{@link InputStream}
         *              <li><code><jk>byte</jk>[]</code>
         *              <li>{@link File}
-        *              <li>{@link CharSequence} containing encoded bytes 
according to the {@link InputStreamParser#ISPARSER_binaryFormat} setting.
+        *              <li>{@link CharSequence} containing encoded bytes 
according to the {@link InputStreamParserBuilder#binaryFormat(BinaryFormat)} 
setting.
         *      </ul>
         * @return
         *      A new {@link ParserPipe} wrapper around the specified input 
object.
@@ -377,11 +376,11 @@ public abstract class ParserSession extends BeanSession {
         *              <li>{@link Reader}
         *              <li>{@link CharSequence}
         *              <li>{@link InputStream} containing UTF-8 encoded text 
(or charset defined by
-        *                      {@link ReaderParser#RPARSER_streamCharset} 
property value).
+        *                      {@link 
ReaderParserBuilder#streamCharset(Charset)} property value).
         *              <li><code><jk>byte</jk>[]</code> containing UTF-8 
encoded text (or charset defined by
-        *                      {@link ReaderParser#RPARSER_streamCharset} 
property value).
+        *                      {@link 
ReaderParserBuilder#streamCharset(Charset)} property value).
         *              <li>{@link File} containing system encoded text (or 
charset defined by
-        *                      {@link ReaderParser#RPARSER_fileCharset} 
property value).
+        *                      {@link 
ReaderParserBuilder#fileCharset(Charset)} property value).
         *      </ul>
         *      <br>Stream-based parsers can handle the following input class 
types:
         *      <ul>
@@ -421,11 +420,11 @@ public abstract class ParserSession extends BeanSession {
         *              <li>{@link Reader}
         *              <li>{@link CharSequence}
         *              <li>{@link InputStream} containing UTF-8 encoded text 
(or charset defined by
-        *                      {@link ReaderParser#RPARSER_streamCharset} 
property value).
+        *                      {@link 
ReaderParserBuilder#streamCharset(Charset)} property value).
         *              <li><code><jk>byte</jk>[]</code> containing UTF-8 
encoded text (or charset defined by
-        *                      {@link ReaderParser#RPARSER_streamCharset} 
property value).
+        *                      {@link 
ReaderParserBuilder#streamCharset(Charset)} property value).
         *              <li>{@link File} containing system encoded text (or 
charset defined by
-        *                      {@link ReaderParser#RPARSER_fileCharset} 
property value).
+        *                      {@link 
ReaderParserBuilder#fileCharset(Charset)} property value).
         *      </ul>
         *      <br>Stream-based parsers can handle the following input class 
types:
         *      <ul>
@@ -928,7 +927,7 @@ public abstract class ParserSession extends BeanSession {
        /**
         * Configuration property:  Auto-close streams.
         *
-        * @see Parser#PARSER_autoCloseStreams
+        * @see ParserBuilder#autoCloseStreams()
         * @return
         *      <jk>true</jk> if <l>InputStreams</l> and <l>Readers</l> passed 
into parsers will be closed
         *      after parsing is complete.
@@ -940,7 +939,7 @@ public abstract class ParserSession extends BeanSession {
        /**
         * Configuration property:  Debug output lines.
         *
-        * @see Parser#PARSER_debugOutputLines
+        * @see ParserBuilder#debugOutputLines(int)
         * @return
         *      The number of lines of input before and after the error 
location to be printed as part of the exception message.
         */
@@ -960,7 +959,7 @@ public abstract class ParserSession extends BeanSession {
        /**
         * Configuration property:  Strict mode.
         *
-        * @see Parser#PARSER_strict
+        * @see ParserBuilder#strict()
         * @return
         *      <jk>true</jk> if strict mode for the parser is enabled.
         */
@@ -971,7 +970,7 @@ public abstract class ParserSession extends BeanSession {
        /**
         * Configuration property:  Trim parsed strings.
         *
-        * @see Parser#PARSER_trimStrings
+        * @see ParserBuilder#trimStrings()
         * @return
         *      <jk>true</jk> if string values will be trimmed of whitespace 
using {@link String#trim()} before being added to
         *      the POJO.
@@ -983,7 +982,7 @@ public abstract class ParserSession extends BeanSession {
        /**
         * Configuration property:  Unbuffered.
         *
-        * @see Parser#PARSER_unbuffered
+        * @see ParserBuilder#unbuffered()
         * @return
         *      <jk>true</jk> if parsers don't use internal buffering during 
parsing.
         */
@@ -998,7 +997,7 @@ public abstract class ParserSession extends BeanSession {
        /**
         * Configuration property:  Parser listener.
         *
-        * @see Parser#PARSER_listener
+        * @see ParserBuilder#listener(Class)
         * @return
         *      Class used to listen for errors and warnings that occur during 
parsing.
         */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSessionArgs.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSessionArgs.java
index 935819c..9f7eaea 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSessionArgs.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSessionArgs.java
@@ -30,6 +30,7 @@ public final class ParserSessionArgs extends BeanSessionArgs {
 
        Method javaMethod;
        Object outer;
+       Charset fileCharset, streamCharset;
 
        /**
         * Default parser session args.
@@ -68,7 +69,7 @@ public final class ParserSessionArgs extends BeanSessionArgs {
         */
        @FluentSetter
        public ParserSessionArgs fileCharset(Charset value) {
-               property(ReaderParser.RPARSER_fileCharset, value);
+               fileCharset = value;
                return this;
        }
 
@@ -119,7 +120,7 @@ public final class ParserSessionArgs extends 
BeanSessionArgs {
         */
        @FluentSetter
        public ParserSessionArgs streamCharset(Charset value) {
-               property(ReaderParser.RPARSER_streamCharset, value);
+               streamCharset = value;
                return this;
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParser.java
index ee45d56..87ecfc0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParser.java
@@ -14,10 +14,8 @@ package org.apache.juneau.parser;
 
 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 Parser} for characters-based parsers.
@@ -35,70 +33,10 @@ import org.apache.juneau.internal.*;
 public abstract class ReaderParser extends Parser {
 
        
//-------------------------------------------------------------------------------------------------------------------
-       // Configurable properties
-       
//-------------------------------------------------------------------------------------------------------------------
-
-       static final String PREFIX = "ReaderParser";
-
-       /**
-        * Configuration property:  File charset.
-        *
-        * <p>
-        * The character set to use for reading <c>Files</c> from the file 
system.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.parser.ReaderParser#RPARSER_fileCharset RPARSER_fileCharset}
-        *      <li><b>Name:</b>  <js>"ReaderParser.fileCharset.s"</js>
-        *      <li><b>Data type:</b>  <c>String</c>
-        *      <li><b>System property:</b>  <c>ReaderParser.fileCharset</c>
-        *      <li><b>Environment variable:</b>  
<c>READERPARSER_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.parser.annotation.ParserConfig#fileCharset()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.parser.ReaderParserBuilder#fileCharset(Charset)}
-        *              </ul>
-        * </ul>
-        */
-       public static final String RPARSER_fileCharset = PREFIX + 
".fileCharset.s";
-
-       /**
-        * Configuration property:  Input stream charset.
-        *
-        * <p>
-        * The character set to use for converting <c>InputStreams</c> and byte 
arrays to readers.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.parser.ReaderParser#RPARSER_streamCharset 
RPARSER_streamCharset}
-        *      <li><b>Name:</b>  <js>"ReaderParser.streamCharset.s"</js>
-        *      <li><b>Data type:</b>  <c>String</c>
-        *      <li><b>System property:</b>  <c>ReaderParser.streamCharset</c>
-        *      <li><b>Environment variable:</b>  
<c>READERPARSER_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.parser.annotation.ParserConfig#streamCharset()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.parser.ReaderParserBuilder#streamCharset(Charset)}
-        *              </ul>
-        * </ul>
-        */
-       public static final String RPARSER_streamCharset = PREFIX + 
".streamCharset.s";
-
-       
//-------------------------------------------------------------------------------------------------------------------
        // Instance
        
//-------------------------------------------------------------------------------------------------------------------
 
-       private final Charset streamCharset, fileCharset;
+       final Charset streamCharset, fileCharset;
 
        /**
         * Constructor.
@@ -107,10 +45,8 @@ public abstract class ReaderParser extends Parser {
         */
        protected ReaderParser(ReaderParserBuilder builder) {
                super(builder);
-
-               ContextProperties cp = getContextProperties();
-               streamCharset = cp.get(RPARSER_streamCharset, 
Charset.class).orElse(IOUtils.UTF8);
-               fileCharset = cp.get(RPARSER_fileCharset, 
Charset.class).orElse(Charset.defaultCharset());
+               streamCharset = builder.streamCharset;
+               fileCharset = builder.fileCharset;
        }
 
        @Override /* Parser */
@@ -125,7 +61,7 @@ public abstract class ReaderParser extends Parser {
        /**
         * File charset.
         *
-        * @see #RPARSER_fileCharset
+        * @see ReaderParserBuilder#fileCharset(Charset)
         * @return
         *      The character set to use for reading <c>Files</c> from the file 
system.
         */
@@ -136,7 +72,7 @@ public abstract class ReaderParser extends Parser {
        /**
         * Input stream charset.
         *
-        * @see #RPARSER_streamCharset
+        * @see ReaderParserBuilder#streamCharset(Charset)
         * @return
         *      The character set to use for converting <c>InputStreams</c> and 
byte arrays to readers.
         */
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 99cb904..7797f46 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
@@ -12,8 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.parser;
 
-import static org.apache.juneau.parser.ReaderParser.*;
-
 import java.lang.annotation.*;
 import java.lang.reflect.*;
 import java.nio.charset.*;
@@ -30,11 +28,15 @@ import org.apache.juneau.internal.*;
 @FluentSetters
 public abstract class ReaderParserBuilder extends ParserBuilder {
 
+       Charset fileCharset, streamCharset;
+
        /**
         * Constructor, default settings.
         */
        protected ReaderParserBuilder() {
                super();
+               fileCharset = env("ReaderParser.fileCharset", 
Charset.defaultCharset());
+               streamCharset = env("ReaderParser.streamCharset", IOUtils.UTF8);
        }
 
        /**
@@ -44,6 +46,8 @@ public abstract class ReaderParserBuilder extends 
ParserBuilder {
         */
        protected ReaderParserBuilder(ReaderParser copyFrom) {
                super(copyFrom);
+               fileCharset = copyFrom.fileCharset;
+               streamCharset = copyFrom.streamCharset;
        }
 
        /**
@@ -53,6 +57,8 @@ public abstract class ReaderParserBuilder extends 
ParserBuilder {
         */
        protected ReaderParserBuilder(ReaderParserBuilder copyFrom) {
                super(copyFrom);
+               fileCharset = copyFrom.fileCharset;
+               streamCharset = copyFrom.streamCharset;
        }
 
        @Override /* ContextBuilder */
@@ -88,10 +94,6 @@ public abstract class ReaderParserBuilder extends 
ParserBuilder {
         *      MyBean <jv>myBean</jv> = <jv>parser</jv>.parse(<jk>new</jk> 
File(<js>"MyBean.txt"</js>), MyBean.<jk>class</jk>);
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link ReaderParser#RPARSER_fileCharset}
-        * </ul>
-        *
         * @param value
         *      The new value for this property.
         *      <br>The default value is <js>"DEFAULT"</js> which causes the 
system default to be used.
@@ -99,7 +101,8 @@ public abstract class ReaderParserBuilder extends 
ParserBuilder {
         */
        @FluentSetter
        public ReaderParserBuilder fileCharset(Charset value) {
-               return set(RPARSER_fileCharset, value);
+               fileCharset = value;
+               return this;
        }
 
        /**
@@ -123,10 +126,6 @@ public abstract class ReaderParserBuilder extends 
ParserBuilder {
         *      MyBean <jv>myBean</jv> = <jv>parser</jv>.parse(<jk>new</jk> 
FileInputStream(<js>"MyBean.txt"</js>), MyBean.<jk>class</jk>);
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link ReaderParser#RPARSER_streamCharset}
-        * </ul>
-        *
         * @param value
         *      The new value for this property.
         *      <br>The default value is <js>"UTF-8"</js>.
@@ -134,7 +133,8 @@ public abstract class ReaderParserBuilder extends 
ParserBuilder {
         */
        @FluentSetter
        public ReaderParserBuilder streamCharset(Charset value) {
-               return set(RPARSER_streamCharset, value);
+               streamCharset = value;
+               return this;
        }
 
        // <FluentSetters>
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserSession.java
index 8e46fab..fa25705 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserSession.java
@@ -12,13 +12,11 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.parser;
 
-
-import static org.apache.juneau.parser.ReaderParser.*;
+import static java.util.Optional.*;
 
 import java.io.*;
 import java.nio.charset.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
 
 /**
@@ -44,9 +42,8 @@ public abstract class ReaderParserSession extends 
ParserSession {
        protected ReaderParserSession(ReaderParser ctx, ParserSessionArgs args) 
{
                super(ctx, args);
                this.ctx = ctx;
-               SessionProperties sp = getSessionProperties();
-               this.fileCharset = sp.get(RPARSER_fileCharset, 
Charset.class).orElse(ctx.getFileCharset());
-               this.streamCharset = sp.get(RPARSER_streamCharset, 
Charset.class).orElse(ctx.getStreamCharset());
+               this.fileCharset = ofNullable(args == null ? null : 
args.fileCharset).orElse(ctx.fileCharset);
+               this.streamCharset = ofNullable(args == null ? null : 
args.streamCharset).orElse(ctx.streamCharset);
        }
 
        @Override /* ParserSession */
@@ -66,11 +63,11 @@ public abstract class ReaderParserSession extends 
ParserSession {
         *              <li>{@link Reader}
         *              <li>{@link CharSequence}
         *              <li>{@link InputStream} containing UTF-8 encoded text 
(or whatever the encoding specified by
-        *                      {@link ReaderParser#RPARSER_streamCharset}).
+        *                      {@link 
ReaderParserBuilder#streamCharset(Charset)}).
         *              <li><code><jk>byte</jk>[]</code> containing UTF-8 
encoded text (or whatever the encoding specified by
-        *                      {@link ReaderParser#RPARSER_streamCharset}).
+        *                      {@link 
ReaderParserBuilder#streamCharset(Charset)}).
         *              <li>{@link File} containing system encoded text (or 
whatever the encoding specified by
-        *                      {@link ReaderParser#RPARSER_fileCharset}).
+        *                      {@link 
ReaderParserBuilder#streamCharset(Charset)}).
         *      </ul>
         * @return
         *      A new {@link ParserPipe} wrapper around the specified input 
object.
@@ -90,7 +87,7 @@ public abstract class ReaderParserSession extends 
ParserSession {
         *
         * @return the file charset defined on this session.
         */
-       protected Charset getFileCharset() {
+       public Charset getFileCharset() {
                return fileCharset;
        }
 
@@ -99,7 +96,7 @@ public abstract class ReaderParserSession extends 
ParserSession {
         *
         * @return the stream charset defined on this session.
         */
-       protected Charset getStreamCharset() {
+       public Charset getStreamCharset() {
                return streamCharset;
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/annotation/ParserConfig.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/annotation/ParserConfig.java
index 5847cb7..cc499e0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/annotation/ParserConfig.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/annotation/ParserConfig.java
@@ -16,7 +16,9 @@ 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.*;
 import org.apache.juneau.html.*;
 import org.apache.juneau.json.*;
@@ -35,7 +37,7 @@ import org.apache.juneau.xml.*;
 @Target({TYPE,METHOD})
 @Retention(RUNTIME)
 @Inherited
-@ContextApply(ParserConfigAnnotation.Apply.class)
+@ContextApply({ParserConfigAnnotation.ParserApply.class,ParserConfigAnnotation.InputStreamParserApply.class,ParserConfigAnnotation.ReaderParserApply.class})
 public @interface ParserConfig {
 
        /**
@@ -70,7 +72,7 @@ public @interface ParserConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link InputStreamParser#ISPARSER_binaryFormat}
+        *      <li class='jm'>{@link 
InputStreamParserBuilder#binaryFormat(BinaryFormat)}
         * </ul>
         */
        String binaryFormat() default "";
@@ -98,7 +100,7 @@ public @interface ParserConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link Parser#PARSER_autoCloseStreams}
+        *      <li class='jm'>{@link ParserBuilder#autoCloseStreams()}
         * </ul>
         */
        String autoCloseStreams() default "";
@@ -120,7 +122,7 @@ public @interface ParserConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link Parser#PARSER_debugOutputLines}
+        *      <li class='jm'>{@link ParserBuilder#debugOutputLines(int)}
         * </ul>
         */
        String debugOutputLines() default "";
@@ -132,7 +134,7 @@ public @interface ParserConfig {
         * Class used to listen for errors and warnings that occur during 
parsing.
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link Parser#PARSER_listener}
+        *      <li class='jm'>{@link ParserBuilder#listener(Class)}
         * </ul>
         */
        Class<? extends ParserListener> listener() default 
ParserListener.Null.class;
@@ -183,7 +185,7 @@ public @interface ParserConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link Parser#PARSER_strict}
+        *      <li class='jm'>{@link ParserBuilder#strict()}
         * </ul>
         */
        String strict() default "";
@@ -207,7 +209,7 @@ public @interface ParserConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link Parser#PARSER_trimStrings}
+        *      <li class='jm'>{@link ParserBuilder#trimStrings()}
         * </ul>
         */
        String trimStrings() default "";
@@ -247,7 +249,7 @@ public @interface ParserConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link Parser#PARSER_unbuffered}
+        *      <li class='jm'>{@link ParserBuilder#unbuffered()}
         * </ul>
         */
        String unbuffered() default "";
@@ -273,7 +275,7 @@ public @interface ParserConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link ReaderParser#RPARSER_fileCharset}
+        *      <li class='jm'>{@link ReaderParserBuilder#fileCharset(Charset)}
         * </ul>
         */
        String fileCharset() default "";
@@ -295,7 +297,7 @@ public @interface ParserConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link ReaderParser#RPARSER_streamCharset}
+        *      <li class='jm'>{@link 
ReaderParserBuilder#streamCharset(Charset)}
         * </ul>
         */
        String streamCharset() default "";
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/annotation/ParserConfigAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/annotation/ParserConfigAnnotation.java
index 77a7d6d..a1c8327 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/annotation/ParserConfigAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/annotation/ParserConfigAnnotation.java
@@ -12,10 +12,8 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.parser.annotation;
 
-import static org.apache.juneau.parser.InputStreamParser.*;
-import static org.apache.juneau.parser.ReaderParser.*;
-
 import org.apache.juneau.*;
+import org.apache.juneau.parser.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.svl.*;
 
@@ -25,32 +23,74 @@ import org.apache.juneau.svl.*;
 public class ParserConfigAnnotation {
 
        /**
-        * Applies {@link ParserConfig} annotations to a {@link 
ContextPropertiesBuilder}.
+        * Applies {@link ParserConfig} annotations to a {@link ParserBuilder}.
+        */
+       public static class ParserApply extends 
AnnotationApplier<ParserConfig,ParserBuilder> {
+
+               /**
+                * Constructor.
+                *
+                * @param vr The resolver for resolving values in annotations.
+                */
+               public ParserApply(VarResolverSession vr) {
+                       super(ParserConfig.class, ParserBuilder.class, vr);
+               }
+
+               @Override
+               public void apply(AnnotationInfo<ParserConfig> ai, 
ParserBuilder b) {
+                       ParserConfig a = ai.getAnnotation();
+
+                       bool(a.autoCloseStreams()).ifPresent(x -> 
b.autoCloseStreams(x));
+                       integer(a.debugOutputLines(), 
"debugOutputLines").ifPresent(x -> b.debugOutputLines(x));
+                       type(a.listener()).ifPresent(x -> b.listener(x));
+                       bool(a.strict()).ifPresent(x -> b.strict(x));
+                       bool(a.trimStrings()).ifPresent(x -> b.trimStrings(x));
+                       bool(a.unbuffered()).ifPresent(x -> b.unbuffered(x));
+               }
+       }
+
+       /**
+        * Applies {@link ParserConfig} annotations to a {@link 
InputStreamParserBuilder}.
+        */
+       public static class InputStreamParserApply extends 
AnnotationApplier<ParserConfig,InputStreamParserBuilder> {
+
+               /**
+                * Constructor.
+                *
+                * @param vr The resolver for resolving values in annotations.
+                */
+               public InputStreamParserApply(VarResolverSession vr) {
+                       super(ParserConfig.class, 
InputStreamParserBuilder.class, vr);
+               }
+
+               @Override
+               public void apply(AnnotationInfo<ParserConfig> ai, 
InputStreamParserBuilder b) {
+                       ParserConfig a = ai.getAnnotation();
+
+                       
string(a.binaryFormat()).map(BinaryFormat::valueOf).ifPresent(x -> 
b.binaryFormat(x));
+               }
+       }
+
+       /**
+        * Applies {@link ParserConfig} annotations to a {@link 
ReaderParserBuilder}.
         */
-       public static class Apply extends 
AnnotationApplier<ParserConfig,ContextPropertiesBuilder> {
+       public static class ReaderParserApply extends 
AnnotationApplier<ParserConfig,ReaderParserBuilder> {
 
                /**
                 * Constructor.
                 *
                 * @param vr The resolver for resolving values in annotations.
                 */
-               public Apply(VarResolverSession vr) {
-                       super(ParserConfig.class, 
ContextPropertiesBuilder.class, vr);
+               public ReaderParserApply(VarResolverSession vr) {
+                       super(ParserConfig.class, ReaderParserBuilder.class, 
vr);
                }
 
                @Override
-               public void apply(AnnotationInfo<ParserConfig> ai, 
ContextPropertiesBuilder b) {
+               public void apply(AnnotationInfo<ParserConfig> ai, 
ReaderParserBuilder b) {
                        ParserConfig a = ai.getAnnotation();
 
-                       bool(a.autoCloseStreams()).ifPresent(x -> 
b.set(PARSER_autoCloseStreams, x));
-                       integer(a.debugOutputLines(), 
"debugOutputLines").ifPresent(x -> b.set(PARSER_debugOutputLines, x));
-                       type(a.listener()).ifPresent(x -> 
b.set(PARSER_listener, x));
-                       bool(a.strict()).ifPresent(x -> b.set(PARSER_strict, 
x));
-                       bool(a.trimStrings()).ifPresent(x -> 
b.set(PARSER_trimStrings, x));
-                       bool(a.unbuffered()).ifPresent(x -> 
b.set(PARSER_unbuffered, x));
-                       string(a.binaryFormat()).ifPresent(x -> 
b.set(ISPARSER_binaryFormat, x));
-                       charset(a.fileCharset()).ifPresent(x -> 
b.set(RPARSER_fileCharset, x));
-                       charset(a.streamCharset()).ifPresent(x -> 
b.set(RPARSER_streamCharset, x));
+                       charset(a.fileCharset()).ifPresent(x -> 
b.fileCharset(x));
+                       charset(a.streamCharset()).ifPresent(x -> 
b.streamCharset(x));
                }
        }
 }
\ No newline at end of file
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 a58dc35..245b33b 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
@@ -133,6 +133,24 @@ public abstract class WriterSerializerSession extends 
SerializerSession {
                return useWhitespace;
        }
 
+       /**
+        * Returns the file charset defined on this session.
+        *
+        * @return the file charset defined on this session.
+        */
+       public Charset getFileCharset() {
+               return fileCharset;
+       }
+
+       /**
+        * Returns the stream charset defined on this session.
+        *
+        * @return the stream charset defined on this session.
+        */
+       public Charset getStreamCharset() {
+               return streamCharset;
+       }
+
        
//-----------------------------------------------------------------------------------------------------------------
        // Other methods
        
//-----------------------------------------------------------------------------------------------------------------
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 a7b826e..7939797 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
@@ -4401,7 +4401,7 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
         * </p>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link Parser#PARSER_debugOutputLines}
+        *      <li class='jm'>{@link ParserBuilder#debugOutputLines(int)}
         * </ul>
         *
         * @param value
@@ -4470,7 +4470,7 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
         * </p>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link Parser#PARSER_strict}
+        *      <li class='jm'>{@link ParserBuilder#strict()}
         * </ul>
         *
         * @return This object (for method chaining).
@@ -4508,7 +4508,7 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
         * </p>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link Parser#PARSER_trimStrings}
+        *      <li class='jm'>{@link ParserBuilder#trimStrings()}
         * </ul>
         *
         * @return This object (for method chaining).
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 6d23a3b..ed438f2 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
@@ -17,7 +17,6 @@ import static org.apache.juneau.http.HttpHeaders.*;
 import static org.apache.juneau.internal.ExceptionUtils.*;
 import static org.apache.juneau.internal.ObjectUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.parser.Parser.*;
 import static org.apache.juneau.rest.HttpRuntimeException.*;
 import static org.apache.juneau.rest.logging.RestLoggingDetail.*;
 import static org.apache.juneau.serializer.Serializer.*;
@@ -5425,7 +5424,7 @@ public class RestContextBuilder extends ContextBuilder 
implements ServletConfig
         * Specifies the parser listener class to use for listening to 
non-fatal parsing errors.
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link Parser#PARSER_listener}
+        *      <li class='jm'>{@link ParserBuilder#listener(Class)}
         * </ul>
         *
         * @param value The new value for this setting.
@@ -5434,7 +5433,7 @@ public class RestContextBuilder extends ContextBuilder 
implements ServletConfig
        @FluentSetter
        public RestContextBuilder parserListener(Class<? extends 
ParserListener> value) {
                if (value != ParserListener.Null.class)
-                       set(PARSER_listener, value);
+                       parsers.forEach(x -> x.listener(value));
                return this;
        }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/Header_AcceptCharset_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/Header_AcceptCharset_Test.java
index ae14442..460b3aa 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/Header_AcceptCharset_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/Header_AcceptCharset_Test.java
@@ -15,12 +15,10 @@ package org.apache.juneau.rest;
 import static org.junit.runners.MethodSorters.*;
 
 import org.apache.juneau.http.annotation.Body;
-import org.apache.juneau.parser.*;
 import org.apache.juneau.plaintext.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.client.*;
 import org.apache.juneau.rest.mock.*;
-import org.apache.juneau.serializer.*;
 import org.apache.juneau.testutils.*;
 import org.junit.*;
 
@@ -67,15 +65,15 @@ public class Header_AcceptCharset_Test {
                        return in;
                }
 
-               public static class TestParser extends MockStreamParser {
-                       protected TestParser(MockStreamParser.Builder builder) {
-                               
super(builder.consumes("text/plain").function((session,in,type) -> 
session.getSessionProperties().get(ReaderParser.RPARSER_streamCharset).get().toString()));
+               public static class TestParser extends MockReaderParser {
+                       protected TestParser(MockReaderParser.Builder builder) {
+                               
super(builder.consumes("text/plain").function((session,in,type) -> 
session.getStreamCharset().toString()));
                        }
                }
 
-               public static class TestSerializer extends MockStreamSerializer 
{
-                       protected TestSerializer(MockStreamSerializer.Builder 
builder) {
-                               
super(builder.produces("text/plain").function((session,o) -> (o.toString() + 
"/" + 
session.getSessionProperties().get(WriterSerializer.WSERIALIZER_streamCharset).orElse(null)).getBytes()));
+               public static class TestSerializer extends MockWriterSerializer 
{
+                       protected TestSerializer(MockWriterSerializer.Builder 
builder) {
+                               
super(builder.produces("text/plain").function((session,o) -> (o.toString() + 
"/" + session.getStreamCharset())));
                        }
                }
        }
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 58fa44d..397eb52 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
@@ -60,7 +60,7 @@ public class MockWriterSerializer extends WriterSerializer 
implements HttpPartSe
 
        private final MockWriterSerializerFunction function;
        private final MockWriterSerializerPartFunction partFunction;
-       private final Function<SerializerSession,Map<String,String>> headers;
+       private final Function<WriterSerializerSession,Map<String,String>> 
headers;
 
 
        protected MockWriterSerializer(Builder builder) {
@@ -101,7 +101,7 @@ public class MockWriterSerializer extends WriterSerializer 
implements HttpPartSe
        public static class Builder extends WriterSerializerBuilder {
                MockWriterSerializerFunction function = (s,o) -> 
StringUtils.stringify(o);
                MockWriterSerializerPartFunction partFunction = (t,s,o) -> 
StringUtils.stringify(o);
-               Function<SerializerSession,Map<String,String>> headers = (s) -> 
Collections.emptyMap();
+               Function<WriterSerializerSession,Map<String,String>> headers = 
(s) -> Collections.emptyMap();
 
                public Builder() {
                        super();
@@ -121,7 +121,7 @@ public class MockWriterSerializer extends WriterSerializer 
implements HttpPartSe
                        return this;
                }
 
-               public Builder 
headers(Function<SerializerSession,Map<String,String>> value) {
+               public Builder 
headers(Function<WriterSerializerSession,Map<String,String>> value) {
                        headers = value;
                        return this;
                }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockWriterSerializerFunction.java
 
b/juneau-utest/src/test/java/org/apache/juneau/testutils/MockWriterSerializerFunction.java
index 7799a5f..2898157 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockWriterSerializerFunction.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/testutils/MockWriterSerializerFunction.java
@@ -15,4 +15,4 @@ package org.apache.juneau.testutils;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.serializer.*;
 
-public interface MockWriterSerializerFunction extends 
Function2<SerializerSession,Object,String> {}
+public interface MockWriterSerializerFunction extends 
Function2<WriterSerializerSession,Object,String> {}

Reply via email to