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 48e1811  PropertyStore refactoring.
48e1811 is described below

commit 48e1811474e096d001459c22ff3d9e62d9ea857d
Author: JamesBognar <[email protected]>
AuthorDate: Sun Feb 7 21:07:18 2021 -0500

    PropertyStore refactoring.
---
 .../apache/juneau/dto/swagger/ui/SwaggerUI.java    |   3 +-
 .../apache/juneau/jena/RdfSerializerSession.java   |   7 +-
 .../src/main/java/org/apache/juneau/Session.java   | 170 +------------------
 .../java/org/apache/juneau/SessionProperties.java  | 181 +++++++++++++++++++++
 .../juneau/html/HtmlDocSerializerSession.java      |  25 +--
 .../org/apache/juneau/parser/ParserSession.java    |   4 +-
 .../apache/juneau/parser/ReaderParserSession.java  |   6 +-
 .../juneau/serializer/SerializerSession.java       |   3 +-
 .../juneau/serializer/WriterSerializerSession.java |   8 +-
 .../juneau/soap/SoapXmlSerializerSession.java      |   4 +-
 .../org/apache/juneau/uon/UonParserSession.java    |   3 +-
 .../apache/juneau/xml/XmlSerializerSession.java    |   5 +-
 .../org/apache/juneau/rest/client/RestRequest.java |   5 -
 .../juneau/rest/client/RestResponseBody.java       |   2 +-
 .../test/java/org/apache/juneau/rest/Nls_Test.java |   2 +-
 .../juneau/rest/annotation/RestHook_Test.java      |  12 +-
 .../juneau/rest/annotation/Rest_RVars_Test.java    |   5 +-
 17 files changed, 244 insertions(+), 201 deletions(-)

diff --git 
a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
 
b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
index c29ce57..e4dba85 100644
--- 
a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
+++ 
b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
@@ -93,7 +93,8 @@ public class SwaggerUI extends PojoSwap<Swagger,Div> {
 
                Session(BeanSession bs, Swagger swagger) {
                        this.swagger = swagger.copy();
-                       this.resolveRefsMaxDepth = 
bs.getProperty(SWAGGERUI_resolveRefsMaxDepth, Integer.class, 1);
+                       SessionProperties sp = bs.getSessionProperties();
+                       this.resolveRefsMaxDepth = 
sp.getInteger(SWAGGERUI_resolveRefsMaxDepth).orElse(1);
                }
        }
 
diff --git 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
index 886de83..503f987 100644
--- 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
+++ 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
@@ -60,7 +60,8 @@ public final class RdfSerializerSession extends 
WriterSerializerSession {
                super(ctx, args);
                this.ctx = ctx;
 
-               namespaces = getInstanceArrayProperty(RDF_namespaces, 
Namespace.class, ctx.namespaces);
+               SessionProperties sp = getSessionProperties();
+               namespaces = sp.getInstanceArray(RDF_namespaces, 
Namespace.class).orElse(ctx.namespaces);
                model = ModelFactory.createDefaultModel();
                addModelPrefix(ctx.getJuneauNs());
                addModelPrefix(ctx.getJuneauBpNs());
@@ -85,9 +86,9 @@ public final class RdfSerializerSession extends 
WriterSerializerSession {
                        if (e.getKey().startsWith(propPrefix, 5))
                                writer.setProperty(e.getKey().substring(5 + 
propPrefix.length()), e.getValue());
 
-               for (String k : getPropertyKeys())
+               for (String k : sp.keySet())
                        if (k.startsWith("RdfCommon.jena.") && 
k.startsWith(propPrefix, 15))
-                               writer.setProperty(k.substring(15 + 
propPrefix.length()), getProperty(k));
+                               writer.setProperty(k.substring(15 + 
propPrefix.length()), sp.get(k).orElse(null));
        }
 
        /*
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 dc1c58b..8b5b3ea 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
@@ -13,19 +13,15 @@
 package org.apache.juneau;
 
 import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.Context.*;
 
-import java.lang.reflect.*;
 import java.text.*;
 import java.time.*;
 import java.util.*;
 
 import org.apache.juneau.collections.*;
 import org.apache.juneau.http.*;
-import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
-import org.apache.juneau.reflect.*;
 
 /**
  * A one-time-use non-thread-safe object that's meant to be used once and then 
thrown away.
@@ -36,7 +32,7 @@ import org.apache.juneau.reflect.*;
  */
 public abstract class Session {
 
-       private final OMap properties;
+       private final SessionProperties properties;
        private Map<String,Object> cache;
        private List<String> warnings;                 // Any warnings 
encountered.
 
@@ -56,152 +52,23 @@ public abstract class Session {
         */
        protected Session(Context ctx, SessionArgs args) {
                this.ctx = ctx;
-               this.properties = args.properties == null ? OMap.EMPTY_MAP : 
args.properties;
-               debug = getProperty(CONTEXT_debug, Boolean.class, 
ctx.isDebug());
-               locale = getProperty(CONTEXT_locale, Locale.class, 
ctx.getDefaultLocale());
-               timeZone = getProperty(CONTEXT_timeZone, TimeZone.class, 
ctx.getDefaultTimeZone());
-               mediaType = getProperty(CONTEXT_mediaType, MediaType.class, 
ctx.getDefaultMediaType());
+               SessionProperties sp = this.properties = new 
SessionProperties(args.properties == null ? OMap.EMPTY_MAP : args.properties);
+               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());
        }
 
        /**
-        * Returns <jk>true</jk> if this session has the specified property 
defined.
+        * Returns the session properties on this session.
         *
-        * @param key The property key.
-        * @return <jk>true</jk> if this session has the specified property 
defined.
+        * @return The session properties on this session.  Never <jk>null</jk>.
         */
-       public final boolean hasProperty(String key) {
-               return properties != null && properties.containsKey(key);
-       }
-
-       /**
-        * Returns the session property with the specified key.
-        *
-        * <p>
-        * The returned type is the raw value of the property.
-        *
-        * @param key The property key.
-        * @return The session property, or <jk>null</jk> if the property does 
not exist.
-        */
-       public final Object getProperty(String key) {
-               if (properties == null)
-                       return null;
-               return properties.get(key);
-       }
-
-       /**
-        * Returns the session property with the specified key and type.
-        *
-        * @param key The property key.
-        * @param type The type to convert the property to.
-        * @param def The default value if the session property does not exist 
or is <jk>null</jk>.
-        * @return The session property.
-        */
-       @SuppressWarnings("unchecked")
-       public final <T> T getProperty(String key, Class<T> type, T def) {
-               if (properties == null)
-                       return def;
-               Object o = properties.get(key);
-               if (o == null)
-                       return def;
-               type = (Class<T>)ClassInfo.of(type).getWrapperIfPrimitive();
-               T t = properties.get(key, type);
-               return t == null ? def : t;
-       }
-
-       /**
-        * Same as {@link #getProperty(String, Class, Object)} but allows for 
more than one default value.
-        *
-        * @param key The property key.
-        * @param type The type to convert the property to.
-        * @param def
-        *      The default values if the session property does not exist or is 
<jk>null</jk>.
-        *      The first non-null value is returned.
-        * @return The session property.
-        */
-       @SafeVarargs
-       public final <T> T getProperty(String key, Class<T> type, T...def) {
-               return getProperty(key, type, ObjectUtils.firstNonNull(def));
-       }
-
-       /**
-        * Returns the session class property with the specified name.
-        *
-        * @param key The property name.
-        * @param type The class type of the property.
-        * @param def The default value.
-        * @return The property value, or the default value if it doesn't exist.
-        */
-       @SuppressWarnings("unchecked")
-       public final <T> Class<? extends T> getClassProperty(String key, 
Class<T> type, Class<? extends T> def) {
-               return getProperty(key, Class.class, def);
-       }
-
-       /**
-        * Returns an instantiation of the specified class property.
-        *
-        * @param key The property name.
-        * @param type The class type of the property.
-        * @param def
-        *      The default instance or class to instantiate if the property 
doesn't exist.
-        * @return A new property instance.
-        */
-       public <T> T getInstanceProperty(String key, Class<T> type, Object def) 
{
-               return newInstance(type, getProperty(key), def);
-       }
-
-       /**
-        * Returns the specified property as an array of instantiated objects.
-        *
-        * @param key The property name.
-        * @param type The class type of the property.
-        * @param def The default object to return if the property doesn't 
exist.
-        * @return A new property instance.
-        */
-       @SuppressWarnings("unchecked")
-       public <T> T[] getInstanceArrayProperty(String key, Class<T> type, T[] 
def) {
-               Object o = getProperty(key);
-               T[] t = null;
-               if (o == null)
-                       t = def;
-               else if (o.getClass().isArray()) {
-                       if (o.getClass().getComponentType() == type)
-                               t = (T[])o;
-                       else {
-                               t = (T[])Array.newInstance(type, 
Array.getLength(o));
-                               for (int i = 0; i < Array.getLength(o); i++)
-                                       t[i] = newInstance(type, Array.get(o, 
i), null);
-                       }
-               } else if (o instanceof Collection) {
-                       Collection<?> c = (Collection<?>)o;
-                       t = (T[])Array.newInstance(type, c.size());
-                       int i = 0;
-                       for (Object o2 : c)
-                               t[i++] = newInstance(type, o2, null);
-               }
-               if (t != null)
-                       return t;
-               throw new ConfigException("Could not instantiate property 
''{0}'' as type {1}", key, type);
-       }
-
-       /**
-        * Returns the session properties.
-        *
-        * @return The session properties passed in through the constructor.
-        */
-       protected OMap getProperties() {
+       public final SessionProperties getSessionProperties() {
                return properties;
        }
 
        /**
-        * Returns the session property keys.
-        *
-        * @return The session property keys passed in through the constructor.
-        */
-       public Set<String> getPropertyKeys() {
-               return properties.keySet();
-       }
-
-       /**
         * Returns the context that created this session.
         *
         * @return The context that created this session.
@@ -210,25 +77,6 @@ public abstract class Session {
                return ctx;
        }
 
-       @SuppressWarnings("unchecked")
-       private <T> T newInstance(Class<T> type, Object o, Object def) {
-               T t = null;
-               if (o == null) {
-                       if (def == null)
-                               return null;
-                       t = castOrCreate(type, def);
-               }
-               else if (type.isInstance(o))
-                       t = (T)o;
-               else if (o.getClass() == Class.class)
-                       t = castOrCreate(type, o);
-               else if (o.getClass() == String.class)
-                       t = ClassUtils.fromString(type, o.toString());
-               if (t != null)
-                       return t;
-               throw new ConfigException("Could not instantiate type ''{0}'' 
as type {1}", o, type);
-       }
-
        /**
         * Adds an arbitrary object to this session's cache.
         *
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/SessionProperties.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/SessionProperties.java
new file mode 100644
index 0000000..2a8860c
--- /dev/null
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/SessionProperties.java
@@ -0,0 +1,181 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau;
+
+import static org.apache.juneau.internal.ClassUtils.*;
+
+import java.lang.reflect.*;
+import java.util.*;
+
+import org.apache.juneau.collections.*;
+import org.apache.juneau.internal.*;
+
+/**
+ * Contains the configurable properties for a single context session.
+ */
+public class SessionProperties {
+
+       private final OMap map;
+
+       /**
+        * Constructor.
+        *
+        * @param map The map containing the properties for this session.
+        */
+       public SessionProperties(OMap map) {
+               this.map = map;
+       }
+
+       /**
+        * Returns <jk>true</jk> if this session has the specified property 
defined.
+        *
+        * @param key The property key.
+        * @return <jk>true</jk> if this session has the specified property 
defined.
+        */
+       public final boolean contains(String key) {
+               return map != null && map.containsKey(key);
+       }
+
+       /**
+        * Returns the property with the specified name.
+        *
+        * @param key The property name.
+        * @return The property value.  Never <jk>null</jk>.
+        */
+       public final Optional<Object> get(String key) {
+               return Optional.ofNullable(map == null ? null : map.get(key));
+       }
+
+       /**
+        * Returns the session property with the specified key and type.
+        *
+        * @param key The property key.
+        * @param type The type to convert the property to.
+        * @return The session property.
+        */
+       public final <T> Optional<T> get(String key, Class<T> type) {
+               return Optional.ofNullable(find(key, type));
+       }
+
+       /**
+        * Shortcut for calling <code>get(key, String.<jk>class</jk>)</code>.
+        *
+        * @param key The property name.
+        * @return The property value, never <jk>null</jk>.
+        */
+       public final Optional<String> getString(String key) {
+               return Optional.ofNullable(find(key, String.class));
+       }
+
+       /**
+        * Shortcut for calling <code>get(key, Boolean.<jk>class</jk>)</code>.
+        *
+        * @param key The property name.
+        * @return The property value, never <jk>null</jk>.
+        */
+       public final Optional<Boolean> getBoolean(String key) {
+               return Optional.ofNullable(find(key, Boolean.class));
+       }
+
+       /**
+        * Shortcut for calling <code>get(key, Integer.<jk>class</jk>)</code>.
+        *
+        * @param key The property name.
+        * @return The property value, never <jk>null</jk>.
+        */
+       public final Optional<Integer> getInteger(String key) {
+               return Optional.ofNullable(find(key, Integer.class));
+       }
+
+       /**
+        * Returns the session property as the specified instance type with the 
specified key.
+        *
+        * @param key The property key.
+        * @param type The type to convert the property to.
+        * @return The session property.
+        */
+       public <T> Optional<T> getInstance(String key, Class<T> type) {
+               Object o = map == null ? null : map.get(key);
+               return Optional.ofNullable(newInstance(type, o));
+       }
+
+       /**
+        * Returns the specified property as an array of instantiated objects.
+        *
+        * @param key The property name.
+        * @param type The class type of the property.
+        * @return A new property instance.
+        */
+       @SuppressWarnings("unchecked")
+       public <T> Optional<T[]> getInstanceArray(String key, Class<T> type) {
+               Object o = map == null ? null : map.get(key);
+               T[] t = null;
+               if (o == null)
+                       return Optional.empty();
+               else if (o.getClass().isArray()) {
+                       if (o.getClass().getComponentType() == type)
+                               t = (T[])o;
+                       else {
+                               t = (T[])Array.newInstance(type, 
Array.getLength(o));
+                               for (int i = 0; i < Array.getLength(o); i++)
+                                       t[i] = newInstance(type, Array.get(o, 
i));
+                       }
+               } else if (o instanceof Collection) {
+                       Collection<?> c = (Collection<?>)o;
+                       t = (T[])Array.newInstance(type, c.size());
+                       int i = 0;
+                       for (Object o2 : c)
+                               t[i++] = newInstance(type, o2);
+               }
+               return Optional.ofNullable(t);
+       }
+
+       /**
+        * Returns all the keys in these properties.
+        *
+        * @return All the keys in these properties.
+        */
+       public Set<String> keySet() {
+               return map == null ? Collections.emptySet() : map.keySet();
+       }
+
+       /**
+        * Returns the contents of this session as an unmodifiable map.
+        *
+        * @return The contents of this session as an unmodifiable map.
+        */
+       public Map<String,Object> asMap() {
+               return Collections.unmodifiableMap(map);
+       }
+
+       private <T> T find(String key, Class<T> c) {
+               Object o = map == null ? null : map.get(key);
+               return newInstance(c, o);
+       }
+
+       @SuppressWarnings("unchecked")
+       private <T> T newInstance(Class<T> type, Object o) {
+               T t = null;
+               if (o == null)
+                       return null;
+               else if (type.isInstance(o))
+                       t = (T)o;
+               else if (o.getClass() == Class.class)
+                       t = castOrCreate(type, o);
+               else if (o.getClass() == String.class)
+                       t = ClassUtils.fromString(type, o.toString());
+               if (t != null)
+                       return t;
+               throw new ConfigException("Could not instantiate type ''{0}'' 
as type {1}", o, type);
+       }
+}
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
index 7403416..719202f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
@@ -17,6 +17,7 @@ import static org.apache.juneau.html.HtmlDocSerializer.*;
 import java.io.IOException;
 import java.util.*;
 
+import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.svl.*;
@@ -53,20 +54,22 @@ public class HtmlDocSerializerSession extends 
HtmlStrippedDocSerializerSession {
                super(ctx, args);
                this.ctx = ctx;
 
-               header = getProperty(HTMLDOC_header, String[].class, 
ctx.getHeader());
-               nav = getProperty(HTMLDOC_nav, String[].class, ctx.getNav());
-               aside = getProperty(HTMLDOC_aside, String[].class, 
ctx.getAside());
-               asideFloat = getProperty(HTMLDOC_asideFloat, AsideFloat.class, 
ctx.getAsideFloat());
-               footer = getProperty(HTMLDOC_footer, String[].class, 
ctx.getFooter());
-               navlinks = getProperty(HTMLDOC_navlinks, String[].class, 
ctx.getNavlinks());
+               SessionProperties sp = getSessionProperties();
+
+               header = sp.get(HTMLDOC_header, 
String[].class).orElse(ctx.getHeader());
+               nav = sp.get(HTMLDOC_nav, String[].class).orElse(ctx.getNav());
+               aside = sp.get(HTMLDOC_aside, 
String[].class).orElse(ctx.getAside());
+               asideFloat = sp.get(HTMLDOC_asideFloat, 
AsideFloat.class).orElse(ctx.getAsideFloat());
+               footer = sp.get(HTMLDOC_footer, 
String[].class).orElse(ctx.getFooter());
+               navlinks = sp.get(HTMLDOC_navlinks, 
String[].class).orElse(ctx.getNavlinks());
 
                // These can contain dups after variable resolution, so de-dup 
them with hashsets.
-               style = ASet.of(getProperty(HTMLDOC_style, String[].class, 
ctx.getStyle()));
-               stylesheet = ASet.of(getProperty(HTMLDOC_stylesheet, 
String[].class, ctx.getStylesheet()));
-               script = ASet.of(getProperty(HTMLDOC_script, String[].class, 
ctx.getScript()));
+               style = ASet.of(sp.get(HTMLDOC_style, 
String[].class).orElse(ctx.getStyle()));
+               stylesheet = ASet.of(sp.get(HTMLDOC_stylesheet, 
String[].class).orElse(ctx.getStylesheet()));
+               script = ASet.of(sp.get(HTMLDOC_script, 
String[].class).orElse(ctx.getScript()));
 
-               head = getProperty(HTMLDOC_head, String[].class, ctx.getHead());
-               nowrap = getProperty(HTMLDOC_nowrap, boolean.class, 
ctx.isNowrap());
+               head = sp.get(HTMLDOC_head, 
String[].class).orElse(ctx.getHead());
+               nowrap = sp.get(HTMLDOC_nowrap, 
boolean.class).orElse(ctx.isNowrap());
 
                addVarBean(HtmlWidgetMap.class, ctx.getWidgets());
        }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
index 744ef40..0c47735 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
@@ -22,6 +22,7 @@ import java.util.*;
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
+import org.apache.juneau.internal.*;
 import org.apache.juneau.transform.*;
 import org.apache.juneau.utils.*;
 
@@ -60,9 +61,10 @@ public abstract class ParserSession extends BeanSession {
                super(ctx, args == null ? ParserSessionArgs.DEFAULT : args);
                args = args == null ? ParserSessionArgs.DEFAULT : args;
                this.ctx = ctx;
+               SessionProperties sp = getSessionProperties();
                javaMethod = args.javaMethod;
                outer = args.outer;
-               listener = getInstanceProperty(PARSER_listener, 
ParserListener.class, ctx.getListener());
+               listener = sp.getInstance(PARSER_listener, 
ParserListener.class).orElseGet(()->ClassUtils.castOrCreate(ParserListener.class,
 ctx.getListener()));
        }
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserSession.java
index d8b1a6d..adc86bb 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserSession.java
@@ -18,6 +18,7 @@ import static org.apache.juneau.parser.ReaderParser.*;
 import java.io.*;
 import java.nio.charset.*;
 
+import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
 
 /**
@@ -43,8 +44,9 @@ public abstract class ReaderParserSession extends 
ParserSession {
        protected ReaderParserSession(ReaderParser ctx, ParserSessionArgs args) 
{
                super(ctx, args);
                this.ctx = ctx;
-               this.fileCharset = getProperty(RPARSER_fileCharset, 
Charset.class, ctx.getFileCharset());
-               this.streamCharset = getProperty(RPARSER_streamCharset, 
Charset.class, ctx.getStreamCharset());
+               SessionProperties sp = getSessionProperties();
+               this.fileCharset = sp.get(RPARSER_fileCharset, 
Charset.class).orElse(ctx.getFileCharset());
+               this.streamCharset = sp.get(RPARSER_streamCharset, 
Charset.class).orElse(ctx.getStreamCharset());
        }
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
index 3068572..2a6d88f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
@@ -77,8 +77,9 @@ public abstract class SerializerSession extends 
BeanTraverseSession {
                super(ctx, args == null ? SerializerSessionArgs.DEFAULT : args);
                this.ctx = ctx;
                args = args == null ? SerializerSessionArgs.DEFAULT : args;
+               SessionProperties sp = getSessionProperties();
                this.javaMethod = args.javaMethod;
-               this.uriResolver = UriResolver.of(ctx.getUriResolution(), 
ctx.getUriRelativity(), getProperty(SERIALIZER_uriContext, UriContext.class, 
ctx.getUriContext()));
+               this.uriResolver = UriResolver.of(ctx.getUriResolution(), 
ctx.getUriRelativity(), sp.get(SERIALIZER_uriContext, 
UriContext.class).orElse(ctx.getUriContext()));
                this.listener = castOrCreate(SerializerListener.class, 
ctx.getListener());
                this.vrs = args.resolver;
        }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerSession.java
index 5e8a170..6578f2c 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerSession.java
@@ -17,6 +17,7 @@ import static org.apache.juneau.serializer.WriterSerializer.*;
 import java.io.*;
 import java.nio.charset.*;
 
+import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
 
 /**
@@ -56,9 +57,10 @@ public abstract class WriterSerializerSession extends 
SerializerSession {
        protected WriterSerializerSession(WriterSerializer ctx, 
SerializerSessionArgs args) {
                super(ctx, args);
                this.ctx = ctx;
-               this.streamCharset = getProperty(WSERIALIZER_streamCharset, 
Charset.class, ctx.getStreamCharset());
-               this.fileCharset = getProperty(WSERIALIZER_fileCharset, 
Charset.class, ctx.getFileCharset());
-               this.useWhitespace = getProperty(WSERIALIZER_useWhitespace, 
Boolean.class, ctx.isUseWhitespace());
+               SessionProperties sp = getSessionProperties();
+               this.streamCharset = sp.get(WSERIALIZER_streamCharset, 
Charset.class).orElse(ctx.getStreamCharset());
+               this.fileCharset = sp.get(WSERIALIZER_fileCharset, 
Charset.class).orElse(ctx.getFileCharset());
+               this.useWhitespace = 
sp.getBoolean(WSERIALIZER_useWhitespace).orElse(ctx.isUseWhitespace());
        }
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerSession.java
index 3783f25..aab17cc 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerSession.java
@@ -17,6 +17,7 @@ import static org.apache.juneau.soap.SoapXmlSerializer.*;
 import java.io.IOException;
 import java.util.*;
 
+import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.xml.*;
@@ -47,7 +48,8 @@ public class SoapXmlSerializerSession extends 
XmlSerializerSession {
        public SoapXmlSerializerSession(SoapXmlSerializer ctx, 
SerializerSessionArgs args) {
                super(ctx, args);
 
-               soapAction = getProperty(SOAPXML_SOAPAction, String.class, 
ctx.soapAction);
+               SessionProperties sp = getSessionProperties();
+               soapAction = sp.get(SOAPXML_SOAPAction, 
String.class).orElse(ctx.soapAction);
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
index 6167730..5112ddb 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
@@ -56,7 +56,8 @@ public class UonParserSession extends ReaderParserSession 
implements HttpPartPar
        protected UonParserSession(UonParser ctx, ParserSessionArgs args) {
                super(ctx, args);
                this.ctx = ctx;
-               decoding = getProperty(UON_decoding, boolean.class, 
ctx.isDecoding());
+               SessionProperties sp = getSessionProperties();
+               decoding = sp.get(UON_decoding, 
boolean.class).orElse(ctx.isDecoding());
        }
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
index 1b489df..5bde3dc 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
@@ -59,8 +59,9 @@ public class XmlSerializerSession extends 
WriterSerializerSession {
        protected XmlSerializerSession(XmlSerializer ctx, SerializerSessionArgs 
args) {
                super(ctx, args);
                this.ctx = ctx;
-               namespaces = getInstanceArrayProperty(XML_namespaces, 
Namespace.class, ctx.getNamespaces());
-               defaultNamespace = 
findDefaultNamespace(getInstanceProperty(XML_defaultNamespace, Namespace.class, 
ctx.getDefaultNamespace()));
+               SessionProperties sp = getSessionProperties();
+               namespaces = sp.getInstanceArray(XML_namespaces, 
Namespace.class).orElse(ctx.getNamespaces());
+               defaultNamespace = 
findDefaultNamespace(sp.getInstance(XML_defaultNamespace, 
Namespace.class).orElse(ctx.getDefaultNamespace()));
        }
 
        private Namespace findDefaultNamespace(Namespace n) {
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java
index c8bf15c..9ca6ec2 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java
@@ -3415,11 +3415,6 @@ public class RestRequest extends BeanSession implements 
HttpUriRequest, Configur
                return def;
        }
 
-       @Override
-       public OMap getProperties() {
-               return super.getProperties();
-       }
-
        @SuppressWarnings("unchecked")
        private static Map<Object,Object> toMap(Object o) {
                return (Map<Object,Object>)o;
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestResponseBody.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestResponseBody.java
index b7b6ac2..6c83177 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestResponseBody.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestResponseBody.java
@@ -788,7 +788,7 @@ public class RestResponseBody implements HttpEntity {
                                        ParserSessionArgs pArgs =
                                                ParserSessionArgs
                                                        .create()
-                                                       .properties(new 
OMap().inner(request.getProperties()))
+                                                       .properties(new 
OMap().inner(request.getSessionProperties().asMap()))
                                                        
.locale(response.getLocale())
                                                        .mediaType(mt)
                                                        .schema(schema);
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/Nls_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/rest/Nls_Test.java
index e72b458..438ee3d 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/Nls_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/Nls_Test.java
@@ -57,7 +57,7 @@ public class Nls_Test {
                        return new WriterSerializerSession(args) {
                                @Override /* SerializerSession */
                                protected void doSerialize(SerializerPipe out, 
Object o) throws IOException, SerializeException {
-                                       
out.getWriter().write(getProperty("TestProperty", String.class));
+                                       
out.getWriter().write(getSessionProperties().getString("TestProperty").orElse(null));
                                }
                        };
                }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestHook_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestHook_Test.java
index 27fa79e..39b8dd4 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestHook_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestHook_Test.java
@@ -92,7 +92,8 @@ public class RestHook_Test {
                                @Override /* ParserSession */
                                @SuppressWarnings("unchecked")
                                protected <T> T doParse(ParserPipe pipe, 
ClassMeta<T> type) throws IOException, ParseException, ExecutableException {
-                                       return (T)("p1="+getProperty("p1", 
String.class)+",p2="+getProperty("p2", String.class)+",p3="+getProperty("p3", 
String.class)+",p4="+getProperty("p4", String.class)+",p5="+getProperty("p5", 
String.class));
+                                       SessionProperties sp = 
getSessionProperties();
+                                       return 
(T)("p1="+sp.get("p1").orElse(null)+",p2="+sp.get("p2").orElse(null)+",p3="+sp.get("p3").orElse(null)+",p4="+sp.get("p4").orElse(null)+",p5="+sp.get("p5").orElse(null));
                                }
                        };
                }
@@ -167,13 +168,14 @@ public class RestHook_Test {
                        return new WriterSerializerSession(args) {
                                @Override /* SerializerSession */
                                protected void doSerialize(SerializerPipe out, 
Object o) throws IOException, SerializeException {
-                                       
out.getWriter().write("p1="+getProperty("p1", 
String.class)+",p2="+getProperty("p2", String.class)+",p3="+getProperty("p3", 
String.class)+",p4="+getProperty("p4", String.class)+",p5="+getProperty("p5", 
String.class));
+                                       SessionProperties sp = 
getSessionProperties();
+                                       
out.getWriter().write("p1="+sp.get("p1").orElse(null)+",p2="+sp.get("p2").orElse(null)+",p3="+sp.get("p3").orElse(null)+",p4="+sp.get("p4").orElse(null)+",p5="+sp.get("p5").orElse(null));
                                }
                                @Override /* SerializerSession */
                                public Map<String,String> getResponseHeaders() {
-                                       OMap p = getProperties();
-                                       if 
(p.containsKey("Override-Content-Type"))
-                                               return 
AMap.of("Content-Type",p.getString("Override-Content-Type"));
+                                       SessionProperties sp = 
getSessionProperties();
+                                       if 
(sp.contains("Override-Content-Type"))
+                                               return 
AMap.of("Content-Type",sp.getString("Override-Content-Type").orElse(null));
                                        return Collections.emptyMap();
                                }
                        };
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_RVars_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_RVars_Test.java
index 1abf5c2..75bfab0 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_RVars_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_RVars_Test.java
@@ -70,9 +70,10 @@ public class Rest_RVars_Test {
                                return new WriterSerializerSession(args) {
                                        @Override /* SerializerSession */
                                        protected void 
doSerialize(SerializerPipe out, Object o) throws IOException, 
SerializeException {
+                                               SessionProperties sp = 
getSessionProperties();
                                                
out.getWriter().write(format("A1=%s,A2=%s,B1=%s,B2=%s,C=%s,R1a=%s,R1b=%s,R2=%s,R3=%s,R4=%s,R5=%s,R6=%s",
-                                                       getProperty("A1"), 
getProperty("A2"), getProperty("B1"), getProperty("B2"), getProperty("C"),
-                                                       getProperty("R1a"), 
getProperty("R1b"), getProperty("R2"), getProperty("R3"), getProperty("R4"), 
getProperty("R5"), getProperty("R6")));
+                                                       
sp.get("A1").orElse(null), sp.get("A2").orElse(null), 
sp.get("B1").orElse(null), sp.get("B2").orElse(null), sp.get("C").orElse(null),
+                                                       
sp.get("R1a").orElse(null), sp.get("R1b").orElse(null), 
sp.get("R2").orElse(null), sp.get("R3").orElse(null), 
sp.get("R4").orElse(null), sp.get("R5").orElse(null), 
sp.get("R6").orElse(null)));
                                        }
                                };
                        }

Reply via email to