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