You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2021/08/07 15:19:54 UTC

[juneau] branch master updated: Move locale/mediaType/timeZone from Context to BeanContext.

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 6a3ca16  Move locale/mediaType/timeZone from Context to BeanContext.
6a3ca16 is described below

commit 6a3ca16a2acfc53b0bf17799621a0f39abdc5e33
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Sat Aug 7 11:19:36 2021 -0400

    Move locale/mediaType/timeZone from Context to BeanContext.
---
 .../org/apache/juneau/config/ConfigBuilder.java    |  19 ---
 .../config/store/ConfigClasspathStoreBuilder.java  |  19 ---
 .../config/store/ConfigFileStoreBuilder.java       |  19 ---
 .../config/store/ConfigMemoryStoreBuilder.java     |  19 ---
 .../juneau/config/store/ConfigStoreBuilder.java    |  19 ---
 .../main/java/org/apache/juneau/BeanContext.java   | 136 +++++++++++++++++
 .../java/org/apache/juneau/BeanContextBuilder.java | 170 ++++++++++++++++++---
 .../main/java/org/apache/juneau/BeanSession.java   |  78 ++++++++++
 .../java/org/apache/juneau/BeanSessionArgs.java    |  98 +++++++++---
 .../src/main/java/org/apache/juneau/Context.java   | 135 ----------------
 .../java/org/apache/juneau/ContextBuilder.java     | 154 -------------------
 .../src/main/java/org/apache/juneau/Session.java   |  76 ---------
 .../main/java/org/apache/juneau/SessionArgs.java   |  79 ----------
 .../org/apache/juneau/annotation/BeanConfig.java   |  18 +--
 .../juneau/annotation/BeanConfigAnnotation.java    |   6 +-
 15 files changed, 458 insertions(+), 587 deletions(-)

diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java
index c119d22..e4ca351 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java
@@ -20,7 +20,6 @@ import java.util.*;
 import org.apache.juneau.*;
 import org.apache.juneau.config.encode.*;
 import org.apache.juneau.config.store.*;
-import org.apache.juneau.http.header.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
@@ -348,18 +347,6 @@ public class ConfigBuilder extends ContextBuilder {
 	}
 
 	@Override /* GENERATED - ContextBuilder */
-	public ConfigBuilder locale(Locale value) {
-		super.locale(value);
-		return this;
-	}
-
-	@Override /* GENERATED - ContextBuilder */
-	public ConfigBuilder mediaType(MediaType value) {
-		super.mediaType(value);
-		return this;
-	}
-
-	@Override /* GENERATED - ContextBuilder */
 	public ConfigBuilder prependTo(String name, Object value) {
 		super.prependTo(name, value);
 		return this;
@@ -402,12 +389,6 @@ public class ConfigBuilder extends ContextBuilder {
 	}
 
 	@Override /* GENERATED - ContextBuilder */
-	public ConfigBuilder timeZone(TimeZone value) {
-		super.timeZone(value);
-		return this;
-	}
-
-	@Override /* GENERATED - ContextBuilder */
 	public ConfigBuilder unset(String name) {
 		super.unset(name);
 		return this;
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStoreBuilder.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStoreBuilder.java
index 9a7704c..fa47c37 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStoreBuilder.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStoreBuilder.java
@@ -16,7 +16,6 @@ import java.lang.reflect.*;
 import java.util.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.http.header.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.svl.*;
@@ -103,18 +102,6 @@ public class ConfigClasspathStoreBuilder extends ConfigStoreBuilder {
 	}
 
 	@Override /* GENERATED - ContextBuilder */
-	public ConfigClasspathStoreBuilder locale(Locale value) {
-		super.locale(value);
-		return this;
-	}
-
-	@Override /* GENERATED - ContextBuilder */
-	public ConfigClasspathStoreBuilder mediaType(MediaType value) {
-		super.mediaType(value);
-		return this;
-	}
-
-	@Override /* GENERATED - ContextBuilder */
 	public ConfigClasspathStoreBuilder prependTo(String name, Object value) {
 		super.prependTo(name, value);
 		return this;
@@ -157,12 +144,6 @@ public class ConfigClasspathStoreBuilder extends ConfigStoreBuilder {
 	}
 
 	@Override /* GENERATED - ContextBuilder */
-	public ConfigClasspathStoreBuilder timeZone(TimeZone value) {
-		super.timeZone(value);
-		return this;
-	}
-
-	@Override /* GENERATED - ContextBuilder */
 	public ConfigClasspathStoreBuilder unset(String name) {
 		super.unset(name);
 		return this;
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStoreBuilder.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStoreBuilder.java
index c856479..476b47f 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStoreBuilder.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStoreBuilder.java
@@ -20,7 +20,6 @@ import java.nio.charset.*;
 import java.util.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.http.header.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.svl.*;
@@ -277,18 +276,6 @@ public class ConfigFileStoreBuilder extends ConfigStoreBuilder {
 	}
 
 	@Override /* GENERATED - ContextBuilder */
-	public ConfigFileStoreBuilder locale(Locale value) {
-		super.locale(value);
-		return this;
-	}
-
-	@Override /* GENERATED - ContextBuilder */
-	public ConfigFileStoreBuilder mediaType(MediaType value) {
-		super.mediaType(value);
-		return this;
-	}
-
-	@Override /* GENERATED - ContextBuilder */
 	public ConfigFileStoreBuilder prependTo(String name, Object value) {
 		super.prependTo(name, value);
 		return this;
@@ -331,12 +318,6 @@ public class ConfigFileStoreBuilder extends ConfigStoreBuilder {
 	}
 
 	@Override /* GENERATED - ContextBuilder */
-	public ConfigFileStoreBuilder timeZone(TimeZone value) {
-		super.timeZone(value);
-		return this;
-	}
-
-	@Override /* GENERATED - ContextBuilder */
 	public ConfigFileStoreBuilder unset(String name) {
 		super.unset(name);
 		return this;
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStoreBuilder.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStoreBuilder.java
index 876b899..64f50a4 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStoreBuilder.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStoreBuilder.java
@@ -16,7 +16,6 @@ import java.lang.reflect.*;
 import java.util.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.http.header.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.svl.*;
@@ -103,18 +102,6 @@ public class ConfigMemoryStoreBuilder extends ConfigStoreBuilder {
 	}
 
 	@Override /* GENERATED - ContextBuilder */
-	public ConfigMemoryStoreBuilder locale(Locale value) {
-		super.locale(value);
-		return this;
-	}
-
-	@Override /* GENERATED - ContextBuilder */
-	public ConfigMemoryStoreBuilder mediaType(MediaType value) {
-		super.mediaType(value);
-		return this;
-	}
-
-	@Override /* GENERATED - ContextBuilder */
 	public ConfigMemoryStoreBuilder prependTo(String name, Object value) {
 		super.prependTo(name, value);
 		return this;
@@ -157,12 +144,6 @@ public class ConfigMemoryStoreBuilder extends ConfigStoreBuilder {
 	}
 
 	@Override /* GENERATED - ContextBuilder */
-	public ConfigMemoryStoreBuilder timeZone(TimeZone value) {
-		super.timeZone(value);
-		return this;
-	}
-
-	@Override /* GENERATED - ContextBuilder */
 	public ConfigMemoryStoreBuilder unset(String name) {
 		super.unset(name);
 		return this;
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStoreBuilder.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStoreBuilder.java
index f4a08a7..47bc730 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStoreBuilder.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStoreBuilder.java
@@ -16,7 +16,6 @@ import java.lang.reflect.*;
 import java.util.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.http.header.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.svl.*;
@@ -101,18 +100,6 @@ public abstract class ConfigStoreBuilder extends ContextBuilder {
 	}
 
 	@Override /* GENERATED - ContextBuilder */
-	public ConfigStoreBuilder locale(Locale value) {
-		super.locale(value);
-		return this;
-	}
-
-	@Override /* GENERATED - ContextBuilder */
-	public ConfigStoreBuilder mediaType(MediaType value) {
-		super.mediaType(value);
-		return this;
-	}
-
-	@Override /* GENERATED - ContextBuilder */
 	public ConfigStoreBuilder prependTo(String name, Object value) {
 		super.prependTo(name, value);
 		return this;
@@ -155,12 +142,6 @@ public abstract class ConfigStoreBuilder extends ContextBuilder {
 	}
 
 	@Override /* GENERATED - ContextBuilder */
-	public ConfigStoreBuilder timeZone(TimeZone value) {
-		super.timeZone(value);
-		return this;
-	}
-
-	@Override /* GENERATED - ContextBuilder */
 	public ConfigStoreBuilder unset(String name) {
 		super.unset(name);
 		return this;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
index 0f1d6c5..f2cfdcd 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
@@ -26,6 +26,7 @@ import java.util.concurrent.*;
 
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
+import org.apache.juneau.http.header.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.serializer.*;
@@ -709,6 +710,69 @@ public class BeanContext extends Context implements MetaProvider {
 	public static final String BEAN_ignoreUnknownBeanProperties = PREFIX + ".ignoreUnknownBeanProperties.b";
 
 	/**
+	 * Configuration property:  Locale.
+	 *
+	 * <p>
+	 * Specifies the default locale for serializer and parser sessions when not specified via {@link BeanSessionArgs#locale(Locale)}.
+	 * Typically used for POJO swaps that need to deal with locales such as swaps that convert <l>Date</l> and <l>Calendar</l>
+	 * objects to strings by accessing it via the session passed into the {@link PojoSwap#swap(BeanSession, Object)} and
+	 * {@link PojoSwap#unswap(BeanSession, Object, ClassMeta, String)} methods.
+	 *
+	 * <h5 class='section'>Property:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li><b>ID:</b>  {@link org.apache.juneau.BeanContext#BEAN_locale CONTEXT_locale}
+	 * 	<li><b>Name:</b>  <js>"Context.locale.s"</js>
+	 * 	<li><b>Data type:</b>  {@link java.util.Locale}
+	 * 	<li><b>System property:</b>  <c>Context.locale</c>
+	 * 	<li><b>Environment variable:</b>  <c>CONTEXT_LOCALE</c>
+	 * 	<li><b>Default:</b>  <jk>null</jk> (defaults to {@link java.util.Locale#getDefault()})
+	 * 	<li><b>Session property:</b>  <jk>true</jk>
+	 * 	<li><b>Annotations:</b>
+	 * 		<ul>
+	 * 			<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#locale()}
+	 * 		</ul>
+	 * 	<li><b>Methods:</b>
+	 * 		<ul>
+	 * 			<li class='jm'>{@link org.apache.juneau.BeanContextBuilder#locale(Locale)}
+	 * 			<li class='jm'>{@link org.apache.juneau.BeanSessionArgs#locale(Locale)}
+	 * 		</ul>
+	 * </ul>
+	 */
+	public static final String BEAN_locale = PREFIX + ".locale.s";
+
+	/**
+	 * Configuration property:  Media type.
+	 *
+	 * <p>
+	 * Specifies the default media type for serializer and parser sessions when not specified via {@link BeanSessionArgs#mediaType(MediaType)}.
+	 * Typically used for POJO swaps that need to serialize the same POJO classes differently depending on
+	 * the specific requested media type.   For example, a swap could handle a request for media types <js>"application/json"</js>
+	 * and <js>"application/json+foo"</js> slightly differently even though they're both being handled by the same JSON
+	 * serializer or parser.
+	 *
+	 * <h5 class='section'>Property:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li><b>ID:</b>  {@link org.apache.juneau.BeanContext#BEAN_mediaType CONTEXT_mediaType}
+	 * 	<li><b>Name:</b>  <js>"Context.mediaType.s"</js>
+	 * 	<li><b>Data type:</b>  {@link org.apache.juneau.http.header.MediaType}
+	 * 	<li><b>System property:</b>  <c>Context.mediaType</c>
+	 * 	<li><b>Environment variable:</b>  <c>CONTEXT_MEDIATYPE</c>
+	 * 	<li><b>Default:</b>  <jk>null</jk>
+	 * 	<li><b>Session property:</b>  <jk>true</jk>
+	 * 	<li><b>Annotations:</b>
+	 * 		<ul>
+	 * 			<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#mediaType()}
+	 * 		</ul>
+	 * 	<li><b>Methods:</b>
+	 * 		<ul>
+	 * 			<li class='jm'>{@link org.apache.juneau.BeanContextBuilder#mediaType(MediaType)}
+	 * 			<li class='jm'>{@link org.apache.juneau.BeanSessionArgs#mediaType(MediaType)}
+	 * 		</ul>
+	 * </ul>
+	 */
+	public static final String BEAN_mediaType = PREFIX + ".mediaType.s";
+
+	/**
 	 * Configuration property:  Bean class exclusions.
 	 *
 	 * <p>
@@ -860,6 +924,37 @@ public class BeanContext extends Context implements MetaProvider {
 	public static final String BEAN_swaps = PREFIX + ".swaps.lo";
 
 	/**
+	 * Configuration property:  Time zone.
+	 *
+	 * <p>
+	 * Specifies the default time zone for serializer and parser sessions when not specified via {@link BeanSessionArgs#timeZone(TimeZone)}.
+	 * Typically used for POJO swaps that need to deal with timezones such as swaps that convert <l>Date</l> and <l>Calendar</l>
+	 * objects to strings by accessing it via the session passed into the {@link PojoSwap#swap(BeanSession, Object)} and
+	 * {@link PojoSwap#unswap(BeanSession, Object, ClassMeta, String)} methods.
+	 *
+	 * <h5 class='section'>Property:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li><b>ID:</b>  {@link org.apache.juneau.BeanContext#BEAN_timeZone CONTEXT_timeZone}
+	 * 	<li><b>Name:</b>  <js>"Context.timeZone.s"</js>
+	 * 	<li><b>Data type:</b>  {@link java.util.TimeZone}
+	 * 	<li><b>System property:</b>  <c>Context.timeZone</c>
+	 * 	<li><b>Environment variable:</b>  <c>CONTEXT_TIMEZONE</c>
+	 * 	<li><b>Default:</b>  <jk>null</jk>
+	 * 	<li><b>Session property:</b>  <jk>true</jk>
+	 * 	<li><b>Annotations:</b>
+	 * 		<ul>
+	 * 			<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#timeZone()}
+	 * 		</ul>
+	 * 	<li><b>Methods:</b>
+	 * 		<ul>
+	 * 			<li class='jm'>{@link org.apache.juneau.BeanContextBuilder#timeZone(TimeZone)}
+	 * 			<li class='jm'>{@link org.apache.juneau.BeanSessionArgs#timeZone(TimeZone)}
+	 * 		</ul>
+	 * </ul>
+	 */
+	public static final String BEAN_timeZone = PREFIX + ".timeZone.s";
+
+	/**
 	 * Configuration property:  Use enum names.
 	 *
 	 * <p>
@@ -992,6 +1087,10 @@ public class BeanContext extends Context implements MetaProvider {
 	private final String typePropertyName;
 	private final ReflectionMap<Annotation> annotations;
 
+	private final Locale locale;
+	private final TimeZone timeZone;
+	private final MediaType mediaType;
+
 	final Map<Class,ClassMeta> cmCache;
 	private final ClassMeta<Object> cmObject;  // Reusable ClassMeta that represents general Objects.
 	private final ClassMeta<String> cmString;  // Reusable ClassMeta that represents general Strings.
@@ -1069,6 +1168,10 @@ public class BeanContext extends Context implements MetaProvider {
 
 		propertyNamer = cp.getInstance(BEAN_propertyNamer, PropertyNamer.class).orElseGet(BasicPropertyNamer::new);
 
+		locale = cp.getInstance(BEAN_locale, Locale.class).orElseGet(()->Locale.getDefault());
+		timeZone = cp.getInstance(BEAN_timeZone, TimeZone.class).orElse(null);
+		mediaType = cp.getInstance(BEAN_mediaType, MediaType.class).orElse(null);
+
 		List<String> l1 = new LinkedList<>();
 		List<String> l2 = new LinkedList<>();
 		for (String s : cp.getArray(BEAN_notBeanPackages, String.class).orElse(DEFAULT_NOTBEAN_PACKAGES)) {
@@ -2283,6 +2386,39 @@ public class BeanContext extends Context implements MetaProvider {
 	}
 
 	/**
+	 * Locale.
+	 *
+	 * @see #BEAN_locale
+	 * @return
+	 * 	The default locale for serializer and parser sessions.
+	 */
+	public final Locale getDefaultLocale() {
+		return locale;
+	}
+
+	/**
+	 * Media type.
+	 *
+	 * @see #BEAN_mediaType
+	 * @return
+	 * 	The default media type value for serializer and parser sessions.
+	 */
+	public final MediaType getDefaultMediaType() {
+		return mediaType;
+	}
+
+	/**
+	 * Time zone.
+	 *
+	 * @see #BEAN_timeZone
+	 * @return
+	 * 	The default timezone for serializer and parser sessions.
+	 */
+	public final TimeZone getDefaultTimeZone() {
+		return timeZone;
+	}
+
+	/**
 	 * Returns the serializer to use for serializing beans when using the {@link BeanSession#convertToType(Object, Class)}
 	 * and related methods.
 	 *
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
index c05b32b..47d4fd1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
@@ -2185,6 +2185,108 @@ public class BeanContextBuilder extends ContextBuilder {
 	}
 
 	/**
+	 * <i><l>Context</l> configuration property:&emsp;</i>  Locale.
+	 *
+	 * <p>
+	 * Specifies the default locale for serializer and parser sessions when not specified via {@link BeanSessionArgs#locale(Locale)}.
+	 * Typically used for POJO swaps that need to deal with locales such as swaps that convert <l>Date</l> and <l>Calendar</l>
+	 * objects to strings by accessing it via the session passed into the {@link PojoSwap#swap(BeanSession, Object)} and
+	 * {@link PojoSwap#unswap(BeanSession, Object, ClassMeta, String)} methods.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Define a POJO swap that skips serializing beans if we're in the UK.</jc>
+	 * 	<jk>public class</jk> MyBeanSwap <jk>extends</jk> StringSwap&lt;MyBean&gt; {
+	 * 		<ja>@Override</ja>
+	 * 		public String swap(BeanSession <jv>session</jv>, MyBean <jv>o</jv>) throws Exception {
+	 * 			<jk>if</jk> (<jv>session</jv>.getLocale().equals(Locale.<jsf>UK</jsf>))
+	 * 				<jk>return null</jk>;
+	 * 			<jk>return</jk> <jv>o</jv>.toString();
+	 * 		}
+	 * 	}
+	 *
+	 * 	<jc>// Create a serializer that uses the specified locale if it's not passed in through session args.</jc>
+	 * 	WriterSerializer <jv>serializer</jv> = JsonSerializer
+	 * 		.<jsm>create</jsm>()
+	 * 		.locale(Locale.<jsf>UK</jsf>)
+	 * 		.pojoSwaps(MyBeanSwap.<jk>class</jk>)
+	 * 		.build();
+	 *
+	 * 	<jc>// Define on session-args instead.</jc>
+	 * 	SerializerSessionArgs <jv>sessionArgs</jv> = <jk>new</jk> SerializerSessionArgs().locale(Locale.<jsf>UK</jsf>);
+	 * 	<jk>try</jk> (WriterSerializerSession <jv>session</jv> = <jv>serializer</jv>.createSession(<jv>sessionArgs</jv>)) {
+	 *
+	 * 		<jc>// Produces "null" if in the UK.</jc>
+	 * 		String <jv>json</jv> = <jv>session</jv>.serialize(<jk>new</jk> MyBean());
+	 * 	}
+	 * </p>
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#locale()}
+	 * 	<li class='jm'>{@link org.apache.juneau.BeanSessionArgs#locale(Locale)}
+	 * 	<li class='jf'>{@link BeanContext#BEAN_locale}
+	 * </ul>
+	 *
+	 * @param value The new value for this property.
+	 * @return This object (for method chaining).
+	 */
+	@FluentSetter
+	public BeanContextBuilder locale(Locale value) {
+		return set(BEAN_locale, value);
+	}
+
+	/**
+	 * <i><l>Context</l> configuration property:&emsp;</i>  Media type.
+	 *
+	 * <p>
+	 * Specifies the default media type for serializer and parser sessions when not specified via {@link BeanSessionArgs#mediaType(MediaType)}.
+	 * Typically used for POJO swaps that need to serialize the same POJO classes differently depending on
+	 * the specific requested media type.   For example, a swap could handle a request for media types <js>"application/json"</js>
+	 * and <js>"application/json+foo"</js> slightly differently even though they're both being handled by the same JSON
+	 * serializer or parser.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Define a POJO swap that skips serializing beans if the media type is application/json.</jc>
+	 * 	<jk>public class</jk> MyBeanSwap <jk>extends</jk> StringSwap&lt;MyBean&gt; {
+	 * 		<ja>@Override</ja>
+	 * 		<jk>public</jk> String swap(BeanSession <jv>session</jv>, MyBean <jv>o</jv>) throws Exception {
+	 * 			<jk>if</jk> (<jv>session</jv>.getMediaType().equals(<js>"application/json"</js>))
+	 * 				<jk>return null</jk>;
+	 * 			<jk>return</jk> <jv>o</jv>.toString();
+	 * 		}
+	 * 	}
+	 *
+	 * 	<jc>// Create a serializer that uses the specified media type if it's not passed in through session args.</jc>
+	 * 	WriterSerializer <jv>serializer</jv> = JsonSerializer
+	 * 		.<jsm>create</jsm>()
+	 * 		.mediaType(MediaType.<jsf>JSON</jsf>)
+	 * 		.build();
+	 *
+	 * 	<jc>// Define on session-args instead.</jc>
+	 * 	SerializerSessionArgs <jv>sessionArgs</jv> = <jk>new</jk> SerializerSessionArgs().mediaType(MediaType.<jsf>JSON</jsf>);
+	 * 	<jk>try</jk> (WriterSerializerSession <jv>session</jv> = <jv>serializer</jv>.createSession(<jv>sessionArgs</jv>)) {
+	 *
+	 * 		<jc>// Produces "null" since it's JSON.</jc>
+	 * 		String <jv>json</jv> = <jv>session</jv>.serialize(<jk>new</jk> MyBean());
+	 * 	}
+	 * </p>
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#mediaType()}
+	 * 	<li class='jm'>{@link org.apache.juneau.BeanSessionArgs#mediaType(MediaType)}
+	 * 	<li class='jf'>{@link BeanContext#BEAN_mediaType}
+	 * </ul>
+	 *
+	 * @param value The new value for this property.
+	 * @return This object (for method chaining).
+	 */
+	@FluentSetter
+	public BeanContextBuilder mediaType(MediaType value) {
+		return set(BEAN_mediaType, value);
+	}
+
+	/**
 	 * Bean class exclusions.
 	 *
 	 * <p>
@@ -2631,6 +2733,56 @@ public class BeanContextBuilder extends ContextBuilder {
 	}
 
 	/**
+	 * <i><l>Context</l> configuration property:&emsp;</i>  TimeZone.
+	 *
+	 * <p>
+	 * Specifies the default time zone for serializer and parser sessions when not specified via {@link BeanSessionArgs#timeZone(TimeZone)}.
+	 * Typically used for POJO swaps that need to deal with timezones such as swaps that convert <l>Date</l> and <l>Calendar</l>
+	 * objects to strings by accessing it via the session passed into the {@link PojoSwap#swap(BeanSession, Object)} and
+	 * {@link PojoSwap#unswap(BeanSession, Object, ClassMeta, String)} methods.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Define a POJO swap that skips serializing beans if the time zone is GMT.</jc>
+	 * 	<jk>public class</jk> MyBeanSwap <jk>extends</jk> StringSwap&lt;MyBean&gt; {
+	 * 		<ja>@Override</ja>
+	 * 		<jk>public</jk> String swap(BeanSession <jv>session</jv>, MyBean <jv>o</jv>) throws Exception {
+	 * 			<jk>if</jk> (<jv>session</jv>.getTimeZone().equals(TimeZone.<jsf>GMT</jsf>))
+	 * 				<jk>return null</jk>;
+	 * 			<jk>return</jk> <jv>o</jv>.toString();
+	 * 		}
+	 * 	}
+	 *
+	 * 	<jc>// Create a serializer that uses GMT if the timezone is not specified in the session args.</jc>
+	 * 	WriterSerializer <jv>serializer</jv> = JsonSerializer
+	 * 		.<jsm>create</jsm>()
+	 * 		.timeZone(TimeZone.<jsf>GMT</jsf>)
+	 * 		.build();
+	 *
+	 * 	<jc>// Define on session-args instead.</jc>
+	 * 	SerializerSessionArgs <jv>sessionArgs</jv> = <jk>new</jk> SerializerSessionArgs().timeZone(TimeZone.<jsf>GMT</jsf>);
+	 * 	<jk>try</jk> (WriterSerializerSession <jv>session</jv> = JsonSerializer.<jsf>DEFAULT</jsf>.createSession(<jv>sessionArgs</jv>)) {
+	 *
+	 * 		<jc>// Produces "null" since the time zone is GMT.</jc>
+	 * 		String <jv>json</jv> = <jv>session</jv>.serialize(<jk>new</jk> MyBean());
+	 * 	}
+	 * </p>
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#timeZone()}
+	 * 	<li class='jm'>{@link org.apache.juneau.BeanSessionArgs#timeZone(TimeZone)}
+	 * 	<li class='jf'>{@link BeanContext#BEAN_timeZone}
+	 * </ul>
+	 *
+	 * @param value The new value for this property.
+	 * @return This object (for method chaining).
+	 */
+	@FluentSetter
+	public BeanContextBuilder timeZone(TimeZone value) {
+		return set(BEAN_timeZone, value);
+	}
+
+	/**
 	 * An identifying name for this class.
 	 *
 	 * <p>
@@ -2922,18 +3074,6 @@ public class BeanContextBuilder extends ContextBuilder {
 	}
 
 	@Override /* GENERATED - ContextBuilder */
-	public BeanContextBuilder locale(Locale value) {
-		super.locale(value);
-		return this;
-	}
-
-	@Override /* GENERATED - ContextBuilder */
-	public BeanContextBuilder mediaType(MediaType value) {
-		super.mediaType(value);
-		return this;
-	}
-
-	@Override /* GENERATED - ContextBuilder */
 	public BeanContextBuilder prependTo(String name, Object value) {
 		super.prependTo(name, value);
 		return this;
@@ -2976,12 +3116,6 @@ public class BeanContextBuilder extends ContextBuilder {
 	}
 
 	@Override /* GENERATED - ContextBuilder */
-	public BeanContextBuilder timeZone(TimeZone value) {
-		super.timeZone(value);
-		return this;
-	}
-
-	@Override /* GENERATED - ContextBuilder */
 	public BeanContextBuilder unset(String name) {
 		super.unset(name);
 		return this;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
index 1747c93..a453f6a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
+import static org.apache.juneau.BeanContext.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.assertions.Assertions.*;
 import static org.apache.juneau.internal.ClassUtils.*;
@@ -21,6 +22,7 @@ import java.io.*;
 import java.lang.reflect.*;
 import java.nio.charset.*;
 import java.text.*;
+import java.time.*;
 import java.util.*;
 import java.util.Date;
 import java.util.concurrent.atomic.*;
@@ -29,6 +31,7 @@ import java.util.logging.*;
 import javax.xml.bind.*;
 
 import org.apache.juneau.collections.*;
+import org.apache.juneau.http.header.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
@@ -50,6 +53,9 @@ public class BeanSession extends Session {
 	private final BeanContext ctx;
 	private final HttpPartSchema schema;
 	private final Stack<StringBuilder> sbStack;
+	private final Locale locale;
+	private final TimeZone timeZone;
+	private final MediaType mediaType;
 
 	/**
 	 * Create a new session using properties specified in the context.
@@ -65,6 +71,10 @@ public class BeanSession extends Session {
 		this.ctx = ctx;
 		schema = args.schema;
 		sbStack = args.unmodifiable ? null : new Stack<>();
+		SessionProperties sp = args.properties;
+		locale = sp.get(BEAN_locale, Locale.class).orElse(ctx.getDefaultLocale());
+		timeZone = sp.get(BEAN_timeZone, TimeZone.class).orElse(ctx.getDefaultTimeZone());
+		mediaType = sp.get(BEAN_mediaType, MediaType.class).orElse(ctx.getDefaultMediaType());
 	}
 
 	/**
@@ -1067,6 +1077,38 @@ public class BeanSession extends Session {
 	}
 
 	/**
+	 * Configuration property:  Locale.
+	 *
+	 * <p>
+	 * The locale is determined in the following order:
+	 * <ol>
+	 * 	<li><c>locale</c> parameter passed in through constructor.
+	 * 	<li>{@link BeanContext#BEAN_locale} entry in parameter passed in through constructor.
+	 * 	<li>{@link BeanContext#BEAN_locale} setting on bean context.
+	 * 	<li>Locale returned by {@link Locale#getDefault()}.
+	 * </ol>
+	 *
+	 * @see BeanContext#BEAN_locale
+	 * @return The session locale.
+	 */
+	public Locale getLocale() {
+		return locale;
+	}
+
+	/**
+	 * Configuration property:  Media type.
+	 *
+	 * <p>
+	 * For example, <js>"application/json"</js>.
+	 *
+	 * @see BeanContext#BEAN_mediaType
+	 * @return The media type for this session, or <jk>null</jk> if not specified.
+	 */
+	public final MediaType getMediaType() {
+		return mediaType;
+	}
+
+	/**
 	 * Returns the type property name as defined by {@link BeanContext#BEAN_typePropertyName}.
 	 *
 	 * @param cm
@@ -1469,6 +1511,42 @@ public class BeanSession extends Session {
 	}
 
 	/**
+	 * Configuration property:  Time zone.
+	 *
+	 * <p>
+	 * The timezone is determined in the following order:
+	 * <ol>
+	 * 	<li><c>timeZone</c> parameter passed in through constructor.
+	 * 	<li>{@link BeanContext#BEAN_timeZone} entry in parameter passed in through constructor.
+	 * 	<li>{@link BeanContext#BEAN_timeZone} setting on bean context.
+	 * </ol>
+	 *
+	 * @see BeanContext#BEAN_timeZone
+	 * @return The session timezone, or <jk>null</jk> if timezone not specified.
+	 */
+	public final TimeZone getTimeZone() {
+		return timeZone;
+	}
+
+	/**
+	 * Configuration property:  Time zone.
+	 *
+	 * <p>
+	 * The timezone is determined in the following order:
+	 * <ol>
+	 * 	<li><c>timeZone</c> parameter passed in through constructor.
+	 * 	<li>{@link BeanContext#BEAN_timeZone} entry in parameter passed in through constructor.
+	 * 	<li>{@link BeanContext#BEAN_timeZone} setting on bean context.
+	 * </ol>
+	 *
+	 * @see BeanContext#BEAN_timeZone
+	 * @return The session timezone, or the system timezone if not specified.  Never <jk>null</jk>.
+	 */
+	public final ZoneId getTimeZoneId() {
+		return timeZone == null ? ZoneId.systemDefault() : timeZone.toZoneId();
+	}
+
+	/**
 	 * Configuration property:  Use enum names.
 	 *
 	 * @see BeanContext#BEAN_useEnumNames
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSessionArgs.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSessionArgs.java
index ac0d232..22e22f7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSessionArgs.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSessionArgs.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
+import static org.apache.juneau.BeanContext.*;
+
 import java.util.*;
 
 import org.apache.juneau.collections.*;
@@ -51,6 +53,58 @@ public class BeanSessionArgs extends SessionArgs {
 	//-----------------------------------------------------------------------------------------------------------------
 
 	/**
+	 * The session locale.
+	 *
+	 * <p>
+	 * Specifies the default locale for serializer and parser sessions.
+	 *
+	 * <p>
+	 * If not specified, defaults to {@link BeanContext#BEAN_locale}.
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#locale()}
+	 * 	<li class='jm'>{@link org.apache.juneau.BeanContextBuilder#locale(Locale)}
+	 * 	<li class='jf'>{@link BeanContext#BEAN_locale}
+	 * </ul>
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>If <jk>null</jk>, then the locale defined on the context is used.
+	 * @return This object (for method chaining).
+	 */
+	@FluentSetter
+	public BeanSessionArgs locale(Locale value) {
+		property(BEAN_locale, value);
+		return this;
+	}
+
+	/**
+	 * The session media type.
+	 *
+	 * <p>
+	 * Specifies the default media type value for serializer and parser sessions.
+	 *
+	 * <p>
+	 * If not specified, defaults to {@link BeanContext#BEAN_mediaType}.
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#mediaType()}
+	 * 	<li class='jm'>{@link org.apache.juneau.BeanContextBuilder#mediaType(MediaType)}
+	 * 	<li class='jf'>{@link BeanContext#BEAN_mediaType}
+	 * </ul>
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk>.
+	 * @return This object (for method chaining).
+	 */
+	@FluentSetter
+	public BeanSessionArgs mediaType(MediaType value) {
+		property(BEAN_mediaType, value);
+		return this;
+	}
+
+	/**
 	 * HTTP-part schema.
 	 *
 	 * <p>
@@ -67,23 +121,37 @@ public class BeanSessionArgs extends SessionArgs {
 		return this;
 	}
 
-	// <FluentSetters>
-
-	@Override /* GENERATED - SessionArgs */
-	public BeanSessionArgs debug(Boolean value) {
-		super.debug(value);
+	/**
+	 * The session timezone.
+	 *
+	 * <p>
+	 * Specifies the default timezone for serializer and parser sessions.
+	 *
+	 * <p>
+	 * If not specified, defaults to {@link BeanContext#BEAN_timeZone}.
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#timeZone()}
+	 * 	<li class='jm'>{@link org.apache.juneau.BeanContextBuilder#timeZone(TimeZone)}
+	 * 	<li class='jf'>{@link BeanContext#BEAN_timeZone}
+	 * </ul>
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk>.
+	 * @return This object (for method chaining).
+	 */
+	@FluentSetter
+	public BeanSessionArgs timeZone(TimeZone value) {
+		property(BEAN_timeZone, value);
 		return this;
 	}
 
-	@Override /* GENERATED - SessionArgs */
-	public BeanSessionArgs locale(Locale value) {
-		super.locale(value);
-		return this;
-	}
+	// <FluentSetters>
 
 	@Override /* GENERATED - SessionArgs */
-	public BeanSessionArgs mediaType(MediaType value) {
-		super.mediaType(value);
+	public BeanSessionArgs debug(Boolean value) {
+		super.debug(value);
 		return this;
 	}
 
@@ -100,12 +168,6 @@ public class BeanSessionArgs extends SessionArgs {
 	}
 
 	@Override /* GENERATED - SessionArgs */
-	public BeanSessionArgs timeZone(TimeZone value) {
-		super.timeZone(value);
-		return this;
-	}
-
-	@Override /* GENERATED - SessionArgs */
 	public BeanSessionArgs unmodifiable() {
 		super.unmodifiable();
 		return this;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
index a7eb62d..daf0f8d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
@@ -18,11 +18,9 @@ import java.util.*;
 
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
-import org.apache.juneau.http.header.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.transform.*;
 
 /**
  * A reusable stateless thread-safe read-only configuration, typically used for creating one-time use {@link Session}
@@ -86,108 +84,11 @@ public abstract class Context {
 	 */
 	public static final String CONTEXT_debug = PREFIX + ".debug.b";
 
-	/**
-	 * Configuration property:  Locale.
-	 *
-	 * <p>
-	 * Specifies the default locale for serializer and parser sessions when not specified via {@link SessionArgs#locale(Locale)}.
-	 * Typically used for POJO swaps that need to deal with locales such as swaps that convert <l>Date</l> and <l>Calendar</l>
-	 * objects to strings by accessing it via the session passed into the {@link PojoSwap#swap(BeanSession, Object)} and
-	 * {@link PojoSwap#unswap(BeanSession, Object, ClassMeta, String)} methods.
-	 *
-	 * <h5 class='section'>Property:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li><b>ID:</b>  {@link org.apache.juneau.Context#CONTEXT_locale CONTEXT_locale}
-	 * 	<li><b>Name:</b>  <js>"Context.locale.s"</js>
-	 * 	<li><b>Data type:</b>  {@link java.util.Locale}
-	 * 	<li><b>System property:</b>  <c>Context.locale</c>
-	 * 	<li><b>Environment variable:</b>  <c>CONTEXT_LOCALE</c>
-	 * 	<li><b>Default:</b>  <jk>null</jk> (defaults to {@link java.util.Locale#getDefault()})
-	 * 	<li><b>Session property:</b>  <jk>true</jk>
-	 * 	<li><b>Annotations:</b>
-	 * 		<ul>
-	 * 			<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#locale()}
-	 * 		</ul>
-	 * 	<li><b>Methods:</b>
-	 * 		<ul>
-	 * 			<li class='jm'>{@link org.apache.juneau.ContextBuilder#locale(Locale)}
-	 * 			<li class='jm'>{@link org.apache.juneau.SessionArgs#locale(Locale)}
-	 * 		</ul>
-	 * </ul>
-	 */
-	public static final String CONTEXT_locale = PREFIX + ".locale.s";
-
-	/**
-	 * Configuration property:  Media type.
-	 *
-	 * <p>
-	 * Specifies the default media type for serializer and parser sessions when not specified via {@link SessionArgs#mediaType(MediaType)}.
-	 * Typically used for POJO swaps that need to serialize the same POJO classes differently depending on
-	 * the specific requested media type.   For example, a swap could handle a request for media types <js>"application/json"</js>
-	 * and <js>"application/json+foo"</js> slightly differently even though they're both being handled by the same JSON
-	 * serializer or parser.
-	 *
-	 * <h5 class='section'>Property:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li><b>ID:</b>  {@link org.apache.juneau.Context#CONTEXT_mediaType CONTEXT_mediaType}
-	 * 	<li><b>Name:</b>  <js>"Context.mediaType.s"</js>
-	 * 	<li><b>Data type:</b>  {@link org.apache.juneau.http.header.MediaType}
-	 * 	<li><b>System property:</b>  <c>Context.mediaType</c>
-	 * 	<li><b>Environment variable:</b>  <c>CONTEXT_MEDIATYPE</c>
-	 * 	<li><b>Default:</b>  <jk>null</jk>
-	 * 	<li><b>Session property:</b>  <jk>true</jk>
-	 * 	<li><b>Annotations:</b>
-	 * 		<ul>
-	 * 			<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#mediaType()}
-	 * 		</ul>
-	 * 	<li><b>Methods:</b>
-	 * 		<ul>
-	 * 			<li class='jm'>{@link org.apache.juneau.ContextBuilder#mediaType(MediaType)}
-	 * 			<li class='jm'>{@link org.apache.juneau.SessionArgs#mediaType(MediaType)}
-	 * 		</ul>
-	 * </ul>
-	 */
-	public static final String CONTEXT_mediaType = PREFIX + ".mediaType.s";
-
-	/**
-	 * Configuration property:  Time zone.
-	 *
-	 * <p>
-	 * Specifies the default time zone for serializer and parser sessions when not specified via {@link SessionArgs#timeZone(TimeZone)}.
-	 * Typically used for POJO swaps that need to deal with timezones such as swaps that convert <l>Date</l> and <l>Calendar</l>
-	 * objects to strings by accessing it via the session passed into the {@link PojoSwap#swap(BeanSession, Object)} and
-	 * {@link PojoSwap#unswap(BeanSession, Object, ClassMeta, String)} methods.
-	 *
-	 * <h5 class='section'>Property:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li><b>ID:</b>  {@link org.apache.juneau.Context#CONTEXT_timeZone CONTEXT_timeZone}
-	 * 	<li><b>Name:</b>  <js>"Context.timeZone.s"</js>
-	 * 	<li><b>Data type:</b>  {@link java.util.TimeZone}
-	 * 	<li><b>System property:</b>  <c>Context.timeZone</c>
-	 * 	<li><b>Environment variable:</b>  <c>CONTEXT_TIMEZONE</c>
-	 * 	<li><b>Default:</b>  <jk>null</jk>
-	 * 	<li><b>Session property:</b>  <jk>true</jk>
-	 * 	<li><b>Annotations:</b>
-	 * 		<ul>
-	 * 			<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#timeZone()}
-	 * 		</ul>
-	 * 	<li><b>Methods:</b>
-	 * 		<ul>
-	 * 			<li class='jm'>{@link org.apache.juneau.ContextBuilder#timeZone(TimeZone)}
-	 * 			<li class='jm'>{@link org.apache.juneau.SessionArgs#timeZone(TimeZone)}
-	 * 		</ul>
-	 * </ul>
-	 */
-	public static final String CONTEXT_timeZone = PREFIX + ".timeZone.s";
-
 
 	final ContextProperties properties;
 	private final int identityCode;
 
 	private final boolean debug;
-	private final Locale locale;
-	private final TimeZone timeZone;
-	private final MediaType mediaType;
 
 	/**
 	 * Constructor for this class.
@@ -203,9 +104,6 @@ public abstract class Context {
 		cp = properties;
 		this.identityCode = allowReuse ? new HashCode().add(className(this)).add(cp).get() : System.identityHashCode(this);
 		debug = cp.getBoolean(CONTEXT_debug).orElse(false);
-		locale = cp.getInstance(CONTEXT_locale, Locale.class).orElseGet(()->Locale.getDefault());
-		timeZone = cp.getInstance(CONTEXT_timeZone, TimeZone.class).orElse(null);
-		mediaType = cp.getInstance(CONTEXT_mediaType, MediaType.class).orElse(null);
 	}
 
 	/**
@@ -327,39 +225,6 @@ public abstract class Context {
 		return debug;
 	}
 
-	/**
-	 * Locale.
-	 *
-	 * @see #CONTEXT_locale
-	 * @return
-	 * 	The default locale for serializer and parser sessions.
-	 */
-	public final Locale getDefaultLocale() {
-		return locale;
-	}
-
-	/**
-	 * Media type.
-	 *
-	 * @see #CONTEXT_mediaType
-	 * @return
-	 * 	The default media type value for serializer and parser sessions.
-	 */
-	public final MediaType getDefaultMediaType() {
-		return mediaType;
-	}
-
-	/**
-	 * Time zone.
-	 *
-	 * @see #CONTEXT_timeZone
-	 * @return
-	 * 	The default timezone for serializer and parser sessions.
-	 */
-	public final TimeZone getDefaultTimeZone() {
-		return timeZone;
-	}
-
 	//-----------------------------------------------------------------------------------------------------------------
 	// Other methods
 	//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
index dfc04fc..bc4bbf9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
@@ -21,7 +21,6 @@ import org.apache.juneau.annotation.*;
 import org.apache.juneau.assertions.*;
 import org.apache.juneau.csv.annotation.*;
 import org.apache.juneau.html.annotation.*;
-import org.apache.juneau.http.header.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.jso.annotation.*;
 import org.apache.juneau.json.annotation.*;
@@ -35,7 +34,6 @@ import org.apache.juneau.serializer.*;
 import org.apache.juneau.serializer.annotation.*;
 import org.apache.juneau.soap.annotation.*;
 import org.apache.juneau.svl.*;
-import org.apache.juneau.transform.*;
 import org.apache.juneau.uon.annotation.*;
 import org.apache.juneau.urlencoding.annotation.*;
 import org.apache.juneau.xml.annotation.*;
@@ -347,158 +345,6 @@ public abstract class ContextBuilder {
 	}
 
 	/**
-	 * <i><l>Context</l> configuration property:&emsp;</i>  Locale.
-	 *
-	 * <p>
-	 * Specifies the default locale for serializer and parser sessions when not specified via {@link SessionArgs#locale(Locale)}.
-	 * Typically used for POJO swaps that need to deal with locales such as swaps that convert <l>Date</l> and <l>Calendar</l>
-	 * objects to strings by accessing it via the session passed into the {@link PojoSwap#swap(BeanSession, Object)} and
-	 * {@link PojoSwap#unswap(BeanSession, Object, ClassMeta, String)} methods.
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode w800'>
-	 * 	<jc>// Define a POJO swap that skips serializing beans if we're in the UK.</jc>
-	 * 	<jk>public class</jk> MyBeanSwap <jk>extends</jk> StringSwap&lt;MyBean&gt; {
-	 * 		<ja>@Override</ja>
-	 * 		public String swap(BeanSession <jv>session</jv>, MyBean <jv>o</jv>) throws Exception {
-	 * 			<jk>if</jk> (<jv>session</jv>.getLocale().equals(Locale.<jsf>UK</jsf>))
-	 * 				<jk>return null</jk>;
-	 * 			<jk>return</jk> <jv>o</jv>.toString();
-	 * 		}
-	 * 	}
-	 *
-	 * 	<jc>// Create a serializer that uses the specified locale if it's not passed in through session args.</jc>
-	 * 	WriterSerializer <jv>serializer</jv> = JsonSerializer
-	 * 		.<jsm>create</jsm>()
-	 * 		.locale(Locale.<jsf>UK</jsf>)
-	 * 		.pojoSwaps(MyBeanSwap.<jk>class</jk>)
-	 * 		.build();
-	 *
-	 * 	<jc>// Define on session-args instead.</jc>
-	 * 	SerializerSessionArgs <jv>sessionArgs</jv> = <jk>new</jk> SerializerSessionArgs().locale(Locale.<jsf>UK</jsf>);
-	 * 	<jk>try</jk> (WriterSerializerSession <jv>session</jv> = <jv>serializer</jv>.createSession(<jv>sessionArgs</jv>)) {
-	 *
-	 * 		<jc>// Produces "null" if in the UK.</jc>
-	 * 		String <jv>json</jv> = <jv>session</jv>.serialize(<jk>new</jk> MyBean());
-	 * 	}
-	 * </p>
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#locale()}
-	 * 	<li class='jm'>{@link org.apache.juneau.SessionArgs#locale(Locale)}
-	 * 	<li class='jf'>{@link Context#CONTEXT_locale}
-	 * </ul>
-	 *
-	 * @param value The new value for this property.
-	 * @return This object (for method chaining).
-	 */
-	@FluentSetter
-	public ContextBuilder locale(Locale value) {
-		return set(CONTEXT_locale, value);
-	}
-
-	/**
-	 * <i><l>Context</l> configuration property:&emsp;</i>  Media type.
-	 *
-	 * <p>
-	 * Specifies the default media type for serializer and parser sessions when not specified via {@link SessionArgs#mediaType(MediaType)}.
-	 * Typically used for POJO swaps that need to serialize the same POJO classes differently depending on
-	 * the specific requested media type.   For example, a swap could handle a request for media types <js>"application/json"</js>
-	 * and <js>"application/json+foo"</js> slightly differently even though they're both being handled by the same JSON
-	 * serializer or parser.
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode w800'>
-	 * 	<jc>// Define a POJO swap that skips serializing beans if the media type is application/json.</jc>
-	 * 	<jk>public class</jk> MyBeanSwap <jk>extends</jk> StringSwap&lt;MyBean&gt; {
-	 * 		<ja>@Override</ja>
-	 * 		<jk>public</jk> String swap(BeanSession <jv>session</jv>, MyBean <jv>o</jv>) throws Exception {
-	 * 			<jk>if</jk> (<jv>session</jv>.getMediaType().equals(<js>"application/json"</js>))
-	 * 				<jk>return null</jk>;
-	 * 			<jk>return</jk> <jv>o</jv>.toString();
-	 * 		}
-	 * 	}
-	 *
-	 * 	<jc>// Create a serializer that uses the specified media type if it's not passed in through session args.</jc>
-	 * 	WriterSerializer <jv>serializer</jv> = JsonSerializer
-	 * 		.<jsm>create</jsm>()
-	 * 		.mediaType(MediaType.<jsf>JSON</jsf>)
-	 * 		.build();
-	 *
-	 * 	<jc>// Define on session-args instead.</jc>
-	 * 	SerializerSessionArgs <jv>sessionArgs</jv> = <jk>new</jk> SerializerSessionArgs().mediaType(MediaType.<jsf>JSON</jsf>);
-	 * 	<jk>try</jk> (WriterSerializerSession <jv>session</jv> = <jv>serializer</jv>.createSession(<jv>sessionArgs</jv>)) {
-	 *
-	 * 		<jc>// Produces "null" since it's JSON.</jc>
-	 * 		String <jv>json</jv> = <jv>session</jv>.serialize(<jk>new</jk> MyBean());
-	 * 	}
-	 * </p>
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#mediaType()}
-	 * 	<li class='jm'>{@link org.apache.juneau.SessionArgs#mediaType(MediaType)}
-	 * 	<li class='jf'>{@link Context#CONTEXT_mediaType}
-	 * </ul>
-	 *
-	 * @param value The new value for this property.
-	 * @return This object (for method chaining).
-	 */
-	@FluentSetter
-	public ContextBuilder mediaType(MediaType value) {
-		return set(CONTEXT_mediaType, value);
-	}
-
-	/**
-	 * <i><l>Context</l> configuration property:&emsp;</i>  TimeZone.
-	 *
-	 * <p>
-	 * Specifies the default time zone for serializer and parser sessions when not specified via {@link SessionArgs#timeZone(TimeZone)}.
-	 * Typically used for POJO swaps that need to deal with timezones such as swaps that convert <l>Date</l> and <l>Calendar</l>
-	 * objects to strings by accessing it via the session passed into the {@link PojoSwap#swap(BeanSession, Object)} and
-	 * {@link PojoSwap#unswap(BeanSession, Object, ClassMeta, String)} methods.
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode w800'>
-	 * 	<jc>// Define a POJO swap that skips serializing beans if the time zone is GMT.</jc>
-	 * 	<jk>public class</jk> MyBeanSwap <jk>extends</jk> StringSwap&lt;MyBean&gt; {
-	 * 		<ja>@Override</ja>
-	 * 		<jk>public</jk> String swap(BeanSession <jv>session</jv>, MyBean <jv>o</jv>) throws Exception {
-	 * 			<jk>if</jk> (<jv>session</jv>.getTimeZone().equals(TimeZone.<jsf>GMT</jsf>))
-	 * 				<jk>return null</jk>;
-	 * 			<jk>return</jk> <jv>o</jv>.toString();
-	 * 		}
-	 * 	}
-	 *
-	 * 	<jc>// Create a serializer that uses GMT if the timezone is not specified in the session args.</jc>
-	 * 	WriterSerializer <jv>serializer</jv> = JsonSerializer
-	 * 		.<jsm>create</jsm>()
-	 * 		.timeZone(TimeZone.<jsf>GMT</jsf>)
-	 * 		.build();
-	 *
-	 * 	<jc>// Define on session-args instead.</jc>
-	 * 	SerializerSessionArgs <jv>sessionArgs</jv> = <jk>new</jk> SerializerSessionArgs().timeZone(TimeZone.<jsf>GMT</jsf>);
-	 * 	<jk>try</jk> (WriterSerializerSession <jv>session</jv> = JsonSerializer.<jsf>DEFAULT</jsf>.createSession(<jv>sessionArgs</jv>)) {
-	 *
-	 * 		<jc>// Produces "null" since the time zone is GMT.</jc>
-	 * 		String <jv>json</jv> = <jv>session</jv>.serialize(<jk>new</jk> MyBean());
-	 * 	}
-	 * </p>
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#timeZone()}
-	 * 	<li class='jm'>{@link org.apache.juneau.SessionArgs#timeZone(TimeZone)}
-	 * 	<li class='jf'>{@link Context#CONTEXT_timeZone}
-	 * </ul>
-	 *
-	 * @param value The new value for this property.
-	 * @return This object (for method chaining).
-	 */
-	@FluentSetter
-	public ContextBuilder timeZone(TimeZone value) {
-		return set(CONTEXT_timeZone, value);
-	}
-
-	/**
 	 * Sets a free-form configuration property on this object.
 	 *
 	 * <p>
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java
index 0a825f5..2765723 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java
@@ -16,11 +16,9 @@ import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.Context.*;
 
 import java.text.*;
-import java.time.*;
 import java.util.*;
 
 import org.apache.juneau.collections.*;
-import org.apache.juneau.http.header.*;
 import org.apache.juneau.json.*;
 
 /**
@@ -38,9 +36,6 @@ public abstract class Session {
 
 	private final Context ctx;
 	private final boolean debug;
-	private final Locale locale;
-	private final TimeZone timeZone;
-	private final MediaType mediaType;
 	private final boolean unmodifiable;
 
 
@@ -59,9 +54,6 @@ public abstract class Session {
 			sp = sp.unmodifiable();
 		properties = sp;
 		debug = sp.get(CONTEXT_debug, Boolean.class).orElse(ctx.isDebug());
-		locale = sp.get(CONTEXT_locale, Locale.class).orElse(ctx.getDefaultLocale());
-		timeZone = sp.get(CONTEXT_timeZone, TimeZone.class).orElse(ctx.getDefaultTimeZone());
-		mediaType = sp.get(CONTEXT_mediaType, MediaType.class).orElse(ctx.getDefaultMediaType());
 	}
 
 	/**
@@ -186,74 +178,6 @@ public abstract class Session {
 		return debug;
 	}
 
-	/**
-	 * Configuration property:  Locale.
-	 *
-	 * <p>
-	 * The locale is determined in the following order:
-	 * <ol>
-	 * 	<li><c>locale</c> parameter passed in through constructor.
-	 * 	<li>{@link Context#CONTEXT_locale} entry in parameter passed in through constructor.
-	 * 	<li>{@link Context#CONTEXT_locale} setting on bean context.
-	 * 	<li>Locale returned by {@link Locale#getDefault()}.
-	 * </ol>
-	 *
-	 * @see Context#CONTEXT_locale
-	 * @return The session locale.
-	 */
-	public Locale getLocale() {
-		return locale;
-	}
-
-	/**
-	 * Configuration property:  Media type.
-	 *
-	 * <p>
-	 * For example, <js>"application/json"</js>.
-	 *
-	 * @see Context#CONTEXT_mediaType
-	 * @return The media type for this session, or <jk>null</jk> if not specified.
-	 */
-	public final MediaType getMediaType() {
-		return mediaType;
-	}
-
-	/**
-	 * Configuration property:  Time zone.
-	 *
-	 * <p>
-	 * The timezone is determined in the following order:
-	 * <ol>
-	 * 	<li><c>timeZone</c> parameter passed in through constructor.
-	 * 	<li>{@link Context#CONTEXT_timeZone} entry in parameter passed in through constructor.
-	 * 	<li>{@link Context#CONTEXT_timeZone} setting on bean context.
-	 * </ol>
-	 *
-	 * @see Context#CONTEXT_timeZone
-	 * @return The session timezone, or <jk>null</jk> if timezone not specified.
-	 */
-	public final TimeZone getTimeZone() {
-		return timeZone;
-	}
-
-	/**
-	 * Configuration property:  Time zone.
-	 *
-	 * <p>
-	 * The timezone is determined in the following order:
-	 * <ol>
-	 * 	<li><c>timeZone</c> parameter passed in through constructor.
-	 * 	<li>{@link Context#CONTEXT_timeZone} entry in parameter passed in through constructor.
-	 * 	<li>{@link Context#CONTEXT_timeZone} setting on bean context.
-	 * </ol>
-	 *
-	 * @see Context#CONTEXT_timeZone
-	 * @return The session timezone, or the system timezone if not specified.  Never <jk>null</jk>.
-	 */
-	public final ZoneId getTimeZoneId() {
-		return timeZone == null ? ZoneId.systemDefault() : timeZone.toZoneId();
-	}
-
 	//-----------------------------------------------------------------------------------------------------------------
 	// Other methods
 	//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/SessionArgs.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/SessionArgs.java
index ef05927..acddb8e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/SessionArgs.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/SessionArgs.java
@@ -17,7 +17,6 @@ import static org.apache.juneau.Context.*;
 import java.util.*;
 
 import org.apache.juneau.collections.*;
-import org.apache.juneau.http.header.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
 
@@ -70,84 +69,6 @@ public class SessionArgs {
 	}
 
 	/**
-	 * The session locale.
-	 *
-	 * <p>
-	 * Specifies the default locale for serializer and parser sessions.
-	 *
-	 * <p>
-	 * If not specified, defaults to {@link Context#CONTEXT_locale}.
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#locale()}
-	 * 	<li class='jm'>{@link org.apache.juneau.ContextBuilder#locale(Locale)}
-	 * 	<li class='jf'>{@link Context#CONTEXT_locale}
-	 * </ul>
-	 *
-	 * @param value
-	 * 	The new value for this property.
-	 * 	<br>If <jk>null</jk>, then the locale defined on the context is used.
-	 * @return This object (for method chaining).
-	 */
-	@FluentSetter
-	public SessionArgs locale(Locale value) {
-		property(CONTEXT_locale, value);
-		return this;
-	}
-
-	/**
-	 * The session media type.
-	 *
-	 * <p>
-	 * Specifies the default media type value for serializer and parser sessions.
-	 *
-	 * <p>
-	 * If not specified, defaults to {@link Context#CONTEXT_mediaType}.
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#mediaType()}
-	 * 	<li class='jm'>{@link org.apache.juneau.ContextBuilder#mediaType(MediaType)}
-	 * 	<li class='jf'>{@link Context#CONTEXT_mediaType}
-	 * </ul>
-	 *
-	 * @param value
-	 * 	The new value for this property.
-	 * 	<br>Can be <jk>null</jk>.
-	 * @return This object (for method chaining).
-	 */
-	@FluentSetter
-	public SessionArgs mediaType(MediaType value) {
-		property(CONTEXT_mediaType, value);
-		return this;
-	}
-
-	/**
-	 * The session timezone.
-	 *
-	 * <p>
-	 * Specifies the default timezone for serializer and parser sessions.
-	 *
-	 * <p>
-	 * If not specified, defaults to {@link BeanContext#CONTEXT_timeZone}.
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#timeZone()}
-	 * 	<li class='jm'>{@link org.apache.juneau.ContextBuilder#timeZone(TimeZone)}
-	 * 	<li class='jf'>{@link Context#CONTEXT_timeZone}
-	 * </ul>
-	 *
-	 * @param value
-	 * 	The new value for this property.
-	 * 	<br>Can be <jk>null</jk>.
-	 * @return This object (for method chaining).
-	 */
-	@FluentSetter
-	public SessionArgs timeZone(TimeZone value) {
-		property(CONTEXT_timeZone, value);
-		return this;
-	}
-
-	/**
 	 * Create an unmodifiable session.
 	 *
 	 * <p>
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java
index 16d6019..6418e47 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java
@@ -644,9 +644,9 @@ public @interface BeanConfig {
 	 * </ul>
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='jm'>{@link org.apache.juneau.ContextBuilder#locale(Locale)}
-	 * 	<li class='jm'>{@link org.apache.juneau.SessionArgs#locale(Locale)}
-	 * 	<li class='jf'>{@link Context#CONTEXT_locale}
+	 * 	<li class='jm'>{@link org.apache.juneau.BeanContextBuilder#locale(Locale)}
+	 * 	<li class='jm'>{@link org.apache.juneau.BeanSessionArgs#locale(Locale)}
+	 * 	<li class='jf'>{@link BeanContext#BEAN_locale}
 	 * </ul>
 	 */
 	String locale() default "";
@@ -663,9 +663,9 @@ public @interface BeanConfig {
 	 * </ul>
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='jm'>{@link org.apache.juneau.ContextBuilder#mediaType(MediaType)}
-	 * 	<li class='jm'>{@link org.apache.juneau.SessionArgs#mediaType(MediaType)}
-	 * 	<li class='jf'>{@link Context#CONTEXT_mediaType}
+	 * 	<li class='jm'>{@link org.apache.juneau.BeanContextBuilder#mediaType(MediaType)}
+	 * 	<li class='jm'>{@link org.apache.juneau.BeanSessionArgs#mediaType(MediaType)}
+	 * 	<li class='jf'>{@link BeanContext#BEAN_mediaType}
 	 * </ul>
 	 */
 	String mediaType() default "";
@@ -852,9 +852,9 @@ public @interface BeanConfig {
 	 * </ul>
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='jm'>{@link org.apache.juneau.ContextBuilder#timeZone(TimeZone)}
-	 * 	<li class='jm'>{@link org.apache.juneau.SessionArgs#timeZone(TimeZone)}
-	 * 	<li class='jf'>{@link Context#CONTEXT_timeZone}
+	 * 	<li class='jm'>{@link org.apache.juneau.BeanContextBuilder#timeZone(TimeZone)}
+	 * 	<li class='jm'>{@link org.apache.juneau.BeanSessionArgs#timeZone(TimeZone)}
+	 * 	<li class='jf'>{@link BeanContext#BEAN_timeZone}
 	 * </ul>
 	 */
 	String timeZone() default "";
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
index d5cfbc7..1fdefc5 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
@@ -68,8 +68,8 @@ public class BeanConfigAnnotation {
 			cpb.setIfNotEmpty(BEAN_ignoreUnknownBeanProperties, bool(a.ignoreUnknownBeanProperties()));
 			cpb.setIfNotEmpty(BEAN_disableIgnoreUnknownNullBeanProperties, bool(a.disableIgnoreUnknownNullBeanProperties()));
 			asList(a.interfaces()).stream().map(x -> BeanAnnotation.create(x).interfaceClass(x).build()).forEach(x -> cpb.prependTo(BEAN_annotations, x));
-			cpb.setIfNotEmpty(CONTEXT_locale, locale(a.locale()));
-			cpb.setIfNotEmpty(CONTEXT_mediaType, mediaType(a.mediaType()));
+			cpb.setIfNotEmpty(BEAN_locale, locale(a.locale()));
+			cpb.setIfNotEmpty(BEAN_mediaType, mediaType(a.mediaType()));
 			cpb.setIfNotEmpty(BEAN_notBeanClasses, a.notBeanClasses());
 			cpb.setIfNotEmpty(BEAN_notBeanClasses, a.notBeanClasses_replace());
 			cpb.addTo(BEAN_notBeanPackages, stringList(a.notBeanPackages()));
@@ -78,7 +78,7 @@ public class BeanConfigAnnotation {
 			cpb.setIfNotEmpty(BEAN_sortProperties, bool(a.sortProperties()));
 			cpb.prependTo(BEAN_swaps, a.swaps());
 			cpb.setIfNotEmpty(BEAN_swaps, a.swaps_replace());
-			cpb.setIfNotEmpty(CONTEXT_timeZone, timeZone(a.timeZone()));
+			cpb.setIfNotEmpty(BEAN_timeZone, timeZone(a.timeZone()));
 			cpb.setIfNotEmpty(BEAN_useEnumNames, bool(a.useEnumNames()));
 			cpb.setIfNotEmpty(BEAN_disableInterfaceProxies, bool(a.disableInterfaceProxies()));
 			cpb.setIfNotEmpty(BEAN_useJavaBeanIntrospector, bool(a.useJavaBeanIntrospector()));