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<{@link
org.apache.juneau.parser.ParserListener}></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> {}