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 <[email protected]>
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()));

Reply via email to