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

commit fd8fc7d6f0352b9cfbeaf4fb0f2951bca11d86c6
Author: JamesBognar <[email protected]>
AuthorDate: Sun Feb 7 19:37:49 2021 -0500

    PropertyStore refactoring.
---
 .../main/java/org/apache/juneau/config/Config.java | 10 ++--
 .../java/org/apache/juneau/jena/RdfParser.java     |  4 +-
 .../main/java/org/apache/juneau/BeanContext.java   |  2 +-
 .../src/main/java/org/apache/juneau/Context.java   |  6 +--
 .../main/java/org/apache/juneau/PropertyStore.java | 59 +++++-----------------
 .../java/org/apache/juneau/cp/BeanFactory.java     | 16 ++++++
 .../org/apache/juneau/html/HtmlDocSerializer.java  |  2 +-
 .../juneau/jsonschema/JsonSchemaGenerator.java     |  2 +-
 .../main/java/org/apache/juneau/xml/XmlParser.java |  6 +--
 .../java/org/apache/juneau/xml/XmlSerializer.java  |  2 +-
 .../org/apache/juneau/rest/client/RestClient.java  | 26 +++++-----
 .../apache/juneau/rest/mock/MockRestClient.java    |  4 +-
 .../java/org/apache/juneau/rest/RestContext.java   | 11 ++--
 .../apache/juneau/rest/RestOperationContext.java   |  4 +-
 14 files changed, 70 insertions(+), 84 deletions(-)

diff --git 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
index 9ac813d..d35b325 100644
--- 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
@@ -447,14 +447,14 @@ public final class Config extends Context implements 
ConfigEventListener, Writab
                super(ps, true);
 
                name = ps.getString(CONFIG_name).orElse("Configuration.cfg");
-               store = ps.getInstance(CONFIG_store, ConfigStore.class, 
ConfigFileStore.DEFAULT);
+               store = ps.getInstance(CONFIG_store, 
ConfigStore.class).orElse(ConfigFileStore.DEFAULT);
                configMap = store.getMap(name);
                configMap.register(this);
-               serializer = ps.getInstance(CONFIG_serializer, 
WriterSerializer.class, SimpleJsonSerializer.DEFAULT);
-               parser = ps.getInstance(CONFIG_parser, ReaderParser.class, 
JsonParser.DEFAULT);
+               serializer = ps.getInstance(CONFIG_serializer, 
WriterSerializer.class).orElse(SimpleJsonSerializer.DEFAULT);
+               parser = ps.getInstance(CONFIG_parser, 
ReaderParser.class).orElse(JsonParser.DEFAULT);
                beanSession = parser.createBeanSession();
-               encoder = ps.getInstance(CONFIG_encoder, ConfigEncoder.class, 
ConfigXorEncoder.INSTANCE);
-               varSession = ps.getInstance(CONFIG_varResolver, 
VarResolver.class, VarResolver.DEFAULT)
+               encoder = ps.getInstance(CONFIG_encoder, 
ConfigEncoder.class).orElse(ConfigXorEncoder.INSTANCE);
+               varSession = ps.getInstance(CONFIG_varResolver, 
VarResolver.class).orElse(VarResolver.DEFAULT)
                        .builder()
                        .vars(ConfigVar.class)
                        .bean(Config.class, this)
diff --git 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
index c745d22..d4347a5 100644
--- 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
+++ 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
@@ -131,8 +131,8 @@ public class RdfParser extends ReaderParser implements 
RdfCommon, RdfMetaProvide
                trimWhitespace = 
ps.getBoolean(RDF_trimWhitespace).orElse(false);
                looseCollections = 
ps.getBoolean(RDF_looseCollections).orElse(false);
                rdfLanguage = 
ps.getString(RDF_language).orElse("RDF/XML-ABBREV");
-               juneauNs = ps.getInstance(RDF_juneauNs, Namespace.class, 
DEFAULT_JUNEAU_NS);
-               juneauBpNs = ps.getInstance(RDF_juneauBpNs, Namespace.class, 
DEFAULT_JUNEAUBP_NS);
+               juneauNs = ps.getInstance(RDF_juneauNs, 
Namespace.class).orElse(DEFAULT_JUNEAU_NS);
+               juneauBpNs = ps.getInstance(RDF_juneauBpNs, 
Namespace.class).orElse(DEFAULT_JUNEAUBP_NS);
                collectionFormat = ps.get(RDF_collectionFormat, 
RdfCollectionFormat.class).orElse(RdfCollectionFormat.DEFAULT);
 
                ASortedMap<String,Object> m = ASortedMap.create();
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 ba63e90..5c82386 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
@@ -2135,7 +2135,7 @@ public class BeanContext extends Context implements 
MetaProvider {
 
                notBeanClasses = 
ps.getClassArray(BEAN_notBeanClasses).orElse(DEFAULT_NOTBEAN_CLASSES);
 
-               propertyNamer = ps.getInstance(BEAN_propertyNamer, 
PropertyNamer.class, BasicPropertyNamer.class);
+               propertyNamer = ps.getInstance(BEAN_propertyNamer, 
PropertyNamer.class).orElseGet(BasicPropertyNamer::new);
 
                List<String> l1 = new LinkedList<>();
                List<String> l2 = new LinkedList<>();
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 0454001..efc39d6 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
@@ -342,9 +342,9 @@ public abstract class Context {
                ps = propertyStore;
                this.identityCode = allowReuse ? new 
HashCode().add(getClass().getName()).add(ps).get() : 
System.identityHashCode(this);
                debug = ps.getBoolean(CONTEXT_debug).orElse(false);
-               locale = ps.getInstance(CONTEXT_locale, Locale.class, 
Locale.getDefault());
-               timeZone = ps.getInstance(CONTEXT_timeZone, TimeZone.class);
-               mediaType = ps.getInstance(CONTEXT_mediaType, MediaType.class);
+               locale = ps.getInstance(CONTEXT_locale, 
Locale.class).orElseGet(()->Locale.getDefault());
+               timeZone = ps.getInstance(CONTEXT_timeZone, 
TimeZone.class).orElse(null);
+               mediaType = ps.getInstance(CONTEXT_mediaType, 
MediaType.class).orElse(null);
        }
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java
index a694ea4..f20ed3f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java
@@ -20,7 +20,6 @@ import java.lang.reflect.*;
 import java.util.*;
 
 import org.apache.juneau.PropertyStoreBuilder.*;
-import org.apache.juneau.assertions.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.cp.*;
 import org.apache.juneau.internal.*;
@@ -474,34 +473,14 @@ public final class PropertyStore {
        /**
         * Returns an instance of the specified class, string, or object 
property.
         *
-        * <p>
-        * If instantiating a class, assumes the class has a no-arg constructor.
-        * Otherwise, throws a runtime exception.
-        *
         * @param key The property name.
         * @param type The class type of the property.
-        * @param def
-        *      The default value if the property doesn't exist.
-        *      <br>Can either be an instance of <c>T</c>, or a 
<code>Class&lt;? <jk>extends</jk> T&gt;</code>, or <jk>null</jk>.
+        * @param beanFactory The bean factory to use for instantiating the 
bean.
         * @return A new property instance.
         */
-       public <T> T getInstance(String key, Class<T> type, Object def) {
-               return getInstance(key, type, def, new BeanFactory());
-       }
-
-       /**
-        * Returns an instance of the specified class, string, or object 
property.
-        *
-        * <p>
-        * If instantiating a class, assumes the class has a no-arg constructor.
-        * Otherwise, throws a runtime exception.
-        *
-        * @param key The property name.
-        * @param type The class type of the property.
-        * @return A new property instance or <jk>null</jk> if the property 
doesn't exist.
-        */
-       public <T> T getInstance(String key, Class<T> type) {
-               return getInstance(key, type, null);
+       public <T> Optional<T> getInstance(String key, Class<T> type, 
BeanFactory beanFactory) {
+               Property p = findProperty(key);
+               return Optional.ofNullable(p == null ? null : 
p.asInstance(type, beanFactory));
        }
 
        /**
@@ -509,29 +488,10 @@ public final class PropertyStore {
         *
         * @param key The property name.
         * @param type The class type of the property.
-        * @param def
-        *      The default value if the property doesn't exist.
-        *      <br>Can either be an instance of <c>T</c>, or a 
<code>Class&lt;? <jk>extends</jk> T&gt;</code>.
-        * @param beanFactory The bean factory to use for instantiating the 
bean.
         * @return A new property instance.
         */
-       public <T> T getInstance(String key, Class<T> type, Object def, 
BeanFactory beanFactory) {
-               Assertions.assertArgNotNull("type", type);
-               Property p = findProperty(key);
-               if (p != null)
-                       return p.asInstance(type, beanFactory);
-               if (def == null)
-                       return null;
-               if (def instanceof Class) {
-                       try {
-                               return beanFactory.createBean((Class<T>)def);
-                       } catch (ExecutableException e) {
-                               throw new ConfigException(e, "Could not 
instantiate property ''{0}'' as type ''{1}'' with default value ''{2}''", key, 
type, def);
-                       }
-               }
-               if (type.isInstance(def))
-                       return (T)def;
-               throw new ConfigException("Could not instantiate property 
''{0}'' as type ''{1}'' with default value ''{2}''", key, type, def);
+       public <T> Optional<T> getInstance(String key, Class<T> type) {
+               return getInstance(key, type, null);
        }
 
        /**
@@ -967,12 +927,17 @@ public final class PropertyStore {
        // Utility methods
        
//-------------------------------------------------------------------------------------------------------------------
 
+       static BeanFactory DEFAULT_BEAN_FACTORY = BeanFactory.create().build();
+       
        static <T> T instantiate(BeanFactory beanFactory, Class<T> c, Object 
value) {
                if (ClassInfo.of(c).isParentOf(value.getClass()))
                        return (T)value;
                try {
-                       if 
(ClassInfo.of(value.getClass()).isChildOf(Class.class))
+                       if 
(ClassInfo.of(value.getClass()).isChildOf(Class.class)) {
+                               if (beanFactory == null)
+                                       beanFactory = DEFAULT_BEAN_FACTORY;
                                return beanFactory.createBean((Class<T>)value);
+                       }
                } catch (ExecutableException e) {
                        throw new ConfigException(e, "Could not create bean of 
type ''{0}''.", value);
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanFactory.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanFactory.java
index 5499d7b..68e18a9 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanFactory.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanFactory.java
@@ -261,6 +261,22 @@ public class BeanFactory {
        }
 
        /**
+        * Same as {@link #createBean(Class)} but returns the bean creation 
wrapped in a supplier.
+        * 
+        * @param c The bean type to create.
+        * @return A supplier for the newly-created bean.
+        */
+       public <T> Supplier<T> createBeanSupplier(Class<T> c) {
+               return () -> {
+                       try {
+                               return createBean(c);
+                       } catch (ExecutableException e) {
+                               throw new RuntimeException(e);
+                       }
+               };
+       }
+
+       /**
         * Create a method finder for finding bean creation methods.
         *
         * <h5 class='section'>Example:</h5>
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
index ff56aa8..aad4f1e 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
@@ -775,7 +775,7 @@ public class HtmlDocSerializer extends 
HtmlStrippedDocSerializer {
                nowrap = ps.getBoolean(HTMLDOC_nowrap).orElse(false);
                navlinks = ps.getArray(HTMLDOC_navlinks, 
String.class).orElse(new String[0]);
                noResultsMessage = 
ps.getString(HTMLDOC_noResultsMessage).orElse("<p>no results</p>");
-               template = ps.getInstance(HTMLDOC_template, 
HtmlDocTemplate.class, BasicHtmlDocTemplate.class);
+               template = ps.getInstance(HTMLDOC_template, 
HtmlDocTemplate.class).orElseGet(BasicHtmlDocTemplate::new);
 
                widgets = new HtmlWidgetMap();
                widgets.append(ps.getInstanceArray(HTMLDOC_widgets, 
HtmlWidget.class));
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
index 3dda385..b37469c 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
@@ -321,7 +321,7 @@ public class JsonSchemaGenerator extends 
BeanTraverseContext implements JsonSche
                useBeanDefs = 
ps.getBoolean(JSONSCHEMA_useBeanDefs).orElse(false);
                allowNestedExamples = 
ps.getBoolean(JSONSCHEMA_allowNestedExamples).orElse(false);
                allowNestedDescriptions = 
ps.getBoolean(JSONSCHEMA_allowNestedDescriptions).orElse(false);
-               beanDefMapper = ps.getInstance(JSONSCHEMA_beanDefMapper, 
BeanDefMapper.class, BasicBeanDefMapper.class);
+               beanDefMapper = ps.getInstance(JSONSCHEMA_beanDefMapper, 
BeanDefMapper.class).orElseGet(BasicBeanDefMapper::new);
                addExamplesTo = 
TypeCategory.parse(ps.getString(JSONSCHEMA_addExamplesTo).orElse(null));
                addDescriptionsTo = 
TypeCategory.parse(ps.getString(JSONSCHEMA_addDescriptionsTo).orElse(null));
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java
index 55e4458..8c7d4ab 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java
@@ -254,9 +254,9 @@ public class XmlParser extends ReaderParser implements 
XmlMetaProvider, XmlCommo
                super(ps, consumes);
                validating = ps.getBoolean(XML_validating).orElse(false);
                preserveRootElement = 
ps.getBoolean(XML_preserveRootElement).orElse(false);
-               reporter = ps.getInstance(XML_reporter, XMLReporter.class);
-               resolver = ps.getInstance(XML_resolver, XMLResolver.class);
-               eventAllocator = ps.getInstance(XML_eventAllocator, 
XMLEventAllocator.class);
+               reporter = ps.getInstance(XML_reporter, 
XMLReporter.class).orElse(null);
+               resolver = ps.getInstance(XML_resolver, 
XMLResolver.class).orElse(null);
+               eventAllocator = ps.getInstance(XML_eventAllocator, 
XMLEventAllocator.class).orElse(null);
        }
 
        @Override /* Context */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
index c1bd134..3d7d563 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
@@ -516,7 +516,7 @@ public class XmlSerializer extends WriterSerializer 
implements XmlMetaProvider,
                autoDetectNamespaces = ! 
ps.getBoolean(XML_disableAutoDetectNamespaces).orElse(false);
                enableNamespaces = 
ps.getBoolean(XML_enableNamespaces).orElse(false);
                addNamespaceUrlsToRoot = 
ps.getBoolean(XML_addNamespaceUrisToRoot).orElse(false);
-               defaultNamespace = ps.getInstance(XML_defaultNamespace, 
Namespace.class, DEFAULT_JUNEAU_NAMESPACE);
+               defaultNamespace = ps.getInstance(XML_defaultNamespace, 
Namespace.class).orElse(DEFAULT_JUNEAU_NAMESPACE);
                addBeanTypes = ps.getFirstBoolean(XML_addBeanTypes, 
SERIALIZER_addBeanTypes).orElse(false);
                namespaces = ps.getInstanceArray(XML_namespaces, 
Namespace.class);
        }
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
index fc11a4e..ff3ddc3 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
@@ -2038,20 +2038,20 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable, Re
        @SuppressWarnings("unchecked")
        protected RestClient(PropertyStore ps) {
                super(ps);
-               this.httpClient = ps.getInstance(RESTCLIENT_httpClient, 
CloseableHttpClient.class);
-               this.connectionManager = 
ps.getInstance(RESTCLIENT_connectionManager, HttpClientConnectionManager.class);
+               this.httpClient = ps.getInstance(RESTCLIENT_httpClient, 
CloseableHttpClient.class).orElse(null);
+               this.connectionManager = 
ps.getInstance(RESTCLIENT_connectionManager, 
HttpClientConnectionManager.class).orElse(null);
                this.keepHttpClientOpen = 
ps.getBoolean(RESTCLIENT_keepHttpClientOpen).orElse(false);
-               this.errorCodes = ps.getInstance(RESTCLIENT_errorCodes, 
Predicate.class, ERROR_CODES_DEFAULT);
+               this.errorCodes = ps.getInstance(RESTCLIENT_errorCodes, 
Predicate.class).orElse(ERROR_CODES_DEFAULT);
                this.executorServiceShutdownOnClose = 
ps.getBoolean(RESTCLIENT_executorServiceShutdownOnClose).orElse(false);
                this.rootUri = 
StringUtils.nullIfEmpty(ps.getString(RESTCLIENT_rootUri).orElse("").replaceAll("\\/$",
 ""));
                this.leakDetection = 
ps.getBoolean(RESTCLIENT_leakDetection).orElse(isDebug());
                this.ignoreErrors = 
ps.getBoolean(RESTCLIENT_ignoreErrors).orElse(false);
-               this.logger = ps.getInstance(RESTCLIENT_logger, Logger.class, 
Logger.getLogger(RestClient.class.getName()));
-               this.logRequests = ps.getInstance(RESTCLIENT_logRequests, 
DetailLevel.class, isDebug() ? DetailLevel.FULL : DetailLevel.NONE);
-               this.logRequestsLevel = 
ps.getInstance(RESTCLIENT_logRequestsLevel, Level.class, isDebug() ? 
Level.WARNING : Level.OFF);
+               this.logger = ps.getInstance(RESTCLIENT_logger, 
Logger.class).orElseGet(()->Logger.getLogger(RestClient.class.getName()));
+               this.logRequests = ps.getInstance(RESTCLIENT_logRequests, 
DetailLevel.class).orElse(isDebug() ? DetailLevel.FULL : DetailLevel.NONE);
+               this.logRequestsLevel = 
ps.getInstance(RESTCLIENT_logRequestsLevel, Level.class).orElse(isDebug() ? 
Level.WARNING : Level.OFF);
                this.logToConsole = 
ps.getBoolean(RESTCLIENT_logToConsole).orElse(isDebug());
-               this.console = ps.getInstance(RESTCLIENT_console, 
PrintStream.class, System.err);
-               this.logRequestsPredicate = 
ps.getInstance(RESTCLIENT_logRequestsPredicate, BiPredicate.class, 
LOG_REQUESTS_PREDICATE_DEFAULT);
+               this.console = ps.getInstance(RESTCLIENT_console, 
PrintStream.class).orElse(System.err);
+               this.logRequestsPredicate = 
ps.getInstance(RESTCLIENT_logRequestsPredicate, 
BiPredicate.class).orElse(LOG_REQUESTS_PREDICATE_DEFAULT);
 
                SerializerGroupBuilder sgb = SerializerGroup.create();
                for (Object o : ps.getArray(RESTCLIENT_serializers, 
Object.class).orElse(new Object[0])) {
@@ -2083,14 +2083,14 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable, Re
                }
                this.parsers = pgb.build();
 
-               BeanFactory beanFactory = new BeanFactory()
+               BeanFactory bf = new BeanFactory()
                        .addBean(PropertyStore.class, ps)
                        .addBean(RestClient.class, this);
 
                this.urlEncodingSerializer = new 
SerializerBuilder(ps).build(UrlEncodingSerializer.class);
-               this.partSerializer = ps.getInstance(RESTCLIENT_partSerializer, 
HttpPartSerializer.class, OpenApiSerializer.class, beanFactory);
-               this.partParser = ps.getInstance(RESTCLIENT_partParser, 
HttpPartParser.class, OpenApiParser.class, beanFactory);
-               this.executorService = 
ps.getInstance(RESTCLIENT_executorService, ExecutorService.class, null);
+               this.partSerializer = ps.getInstance(RESTCLIENT_partSerializer, 
HttpPartSerializer.class, 
bf).orElseGet(bf.createBeanSupplier(OpenApiSerializer.class));
+               this.partParser = ps.getInstance(RESTCLIENT_partParser, 
HttpPartParser.class, bf).orElseGet(bf.createBeanSupplier(OpenApiParser.class));
+               this.executorService = 
ps.getInstance(RESTCLIENT_executorService, ExecutorService.class).orElse(null);
 
                HttpPartSerializerSession partSerializerSession = 
partSerializer.createPartSession(null);
 
@@ -2121,7 +2121,7 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable, Re
                                formData.add(BasicNameValuePair.cast(o));
                }
 
-               this.callHandler = ps.getInstance(RESTCLIENT_callHandler, 
RestCallHandler.class, BasicRestCallHandler.class, beanFactory);
+               this.callHandler = ps.getInstance(RESTCLIENT_callHandler, 
RestCallHandler.class, 
bf).orElseGet(bf.createBeanSupplier(BasicRestCallHandler.class));
 
                this.interceptors = 
ps.getInstanceArray(RESTCLIENT_interceptors, RestCallInterceptor.class);
 
diff --git 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
index bb18e91..81d877c 100644
--- 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
+++ 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
@@ -256,7 +256,7 @@ public class MockRestClient extends RestClient implements 
HttpClientConnection {
        public MockRestClient(PropertyStore ps) {
                super(preInit(ps));
                ps = getPropertyStore();
-               this.restBeanCtx = ps.getInstance(MOCKRESTCLIENT_restBeanCtx, 
RestContext.class);
+               this.restBeanCtx = ps.getInstance(MOCKRESTCLIENT_restBeanCtx, 
RestContext.class).get();
                this.restObject = restBeanCtx.getResource();
                this.contextPath = 
ps.getString(MOCKRESTCLIENT_contextPath).orElse("");
                this.servletPath = 
ps.getString(MOCKRESTCLIENT_servletPath).orElse("");
@@ -270,7 +270,7 @@ public class MockRestClient extends RestClient implements 
HttpClientConnection {
        private static PropertyStore preInit(PropertyStore ps) {
                try {
                        PropertyStoreBuilder psb = ps.builder();
-                       Object restBean = 
ps.getInstance(MOCKRESTCLIENT_restBean, Object.class, null);
+                       Object restBean = 
ps.getInstance(MOCKRESTCLIENT_restBean, Object.class).orElse(null);
                        String contextPath = ps.get(MOCKRESTCLIENT_contextPath, 
String.class).orElse(null);
                        String servletPath = ps.get(MOCKRESTCLIENT_servletPath, 
String.class).orElse(null);
                        String rootUrl = ps.get(RESTCLIENT_rootUri, 
String.class).orElse("http://localhost";);
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index 83ef20a..fdc1c56 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -4411,7 +4411,7 @@ public class RestContext extends BeanContext {
                        x = (HttpPartSerializer)resource;
 
                if (x == null)
-                       x = properties.getInstance(REST_partSerializer, 
HttpPartSerializer.class, null, beanFactory);
+                       x = properties.getInstance(REST_partSerializer, 
HttpPartSerializer.class, beanFactory).orElse(null);
 
                if (x == null)
                        x = 
beanFactory.getBean(HttpPartSerializer.class).orElse(null);
@@ -4476,7 +4476,7 @@ public class RestContext extends BeanContext {
                        x = (HttpPartParser)resource;
 
                if (x == null)
-                       x = properties.getInstance(REST_partParser, 
HttpPartParser.class, null, beanFactory);
+                       x = properties.getInstance(REST_partParser, 
HttpPartParser.class, beanFactory).orElse(null);
 
                if (x == null)
                        x = 
beanFactory.getBean(HttpPartParser.class).orElse(null);
@@ -5306,9 +5306,14 @@ public class RestContext extends BeanContext {
                        .withDefault(x)
                        .run();
 
-               Enablement defaultDebug = properties.getInstance(REST_debug, 
Enablement.class, properties.getInstance(REST_debugDefault, Enablement.class, 
null));
+               Enablement defaultDebug = properties.getInstance(REST_debug, 
Enablement.class).orElse(null);
+
+               if (defaultDebug == null)
+                       defaultDebug = 
properties.getInstance(REST_debugDefault, Enablement.class).orElse(null);
+
                if (defaultDebug == null)
                        defaultDebug = isDebug() ? Enablement.ALWAYS : 
Enablement.NEVER;
+
                x.defaultEnable(defaultDebug);
 
                for (Map.Entry<String,String> e : 
splitMap(properties.getString(REST_debugOn).orElse(""), true).entrySet()) {
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContext.java
index 0126d2d..e0634b4 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContext.java
@@ -1229,7 +1229,7 @@ public class RestOperationContext extends BeanContext 
implements Comparable<Rest
                        x = (HttpPartSerializer)resource;
 
                if (x == null)
-                       x = ps.getInstance(REST_partSerializer, 
HttpPartSerializer.class, null, beanFactory);
+                       x = ps.getInstance(REST_partSerializer, 
HttpPartSerializer.class, beanFactory).orElse(null);
 
                if (x == null)
                        x = 
beanFactory.getBean(HttpPartSerializer.class).orElse(null);
@@ -1287,7 +1287,7 @@ public class RestOperationContext extends BeanContext 
implements Comparable<Rest
                        x = (HttpPartParser)resource;
 
                if (x == null)
-                       x = ps.getInstance(REST_partParser, 
HttpPartParser.class, null, beanFactory);
+                       x = ps.getInstance(REST_partParser, 
HttpPartParser.class, beanFactory).orElse(null);
 
                if (x == null)
                        x = 
beanFactory.getBean(HttpPartParser.class).orElse(null);

Reply via email to