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: </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<MyBean> {
+ * <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: </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<MyBean> {
+ * <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: </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<MyBean> {
+ * <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: </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<MyBean> {
- * <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: </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<MyBean> {
- * <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: </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<MyBean> {
- * <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()));