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

[juneau] branch master updated: Make BeanContext instance fields private.

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 3b1f46d  Make BeanContext instance fields private.
3b1f46d is described below

commit 3b1f46de3272882f018a9de5b20ac67f2c8d6206
Author: JamesBognar <ja...@apache.org>
AuthorDate: Sun Jul 8 11:51:43 2018 -0400

    Make BeanContext instance fields private.
---
 .../main/java/org/apache/juneau/BeanContext.java   | 384 ++++++++++++++++++---
 .../src/main/java/org/apache/juneau/BeanMap.java   |   4 +-
 .../src/main/java/org/apache/juneau/BeanMeta.java  |  22 +-
 .../java/org/apache/juneau/BeanPropertyMeta.java   |  12 +-
 .../main/java/org/apache/juneau/BeanRegistry.java  |   2 +-
 .../main/java/org/apache/juneau/BeanSession.java   |  20 +-
 .../src/main/java/org/apache/juneau/ClassMeta.java |   8 +-
 .../java/org/apache/juneau/rest/RestContext.java   |   3 +-
 8 files changed, 378 insertions(+), 77 deletions(-)

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 9deee21..682230e 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
@@ -464,7 +464,6 @@ public class BeanContext extends Context {
 	 * </ul>
 	 *
 	 * <h5 class='section'>Description:</h5>
-	 *
 	 * <p>
 	 * If <jk>true</jk>, then the {@link BeanMap#put(String,Object) BeanMap.put()} method will return old property
 	 * values.
@@ -1263,6 +1262,10 @@ public class BeanContext extends Context {
 	 * 		</ul>
 	 * </ul>
 	 *
+	 * <h5 class='section'>Description:</h5>
+	 * <p>
+	 * Specifies the default locale for serializer and parser sessions.
+	 *
 	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Create a serializer that uses the specified locale if it's not passed in through session args.</jc>
@@ -1304,7 +1307,7 @@ public class BeanContext extends Context {
 	 *
 	 * <h5 class='section'>Description:</h5>
 	 * <p>
-	 * Specifies a default media type value for serializer and parser sessions.
+	 * Specifies the default media type value for serializer and parser sessions.
 	 *
 	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
@@ -1680,7 +1683,7 @@ public class BeanContext extends Context {
 	public static final String BEAN_sortProperties = PREFIX + "sortProperties.b";
 
 	/**
-	 * Configuration property:  TimeZone.
+	 * Configuration property:  Time zone.
 	 *
 	 * <h5 class='section'>Property:</h5>
 	 * <ul>
@@ -1695,6 +1698,10 @@ public class BeanContext extends Context {
 	 * 		</ul>
 	 * </ul>
 	 *
+	 * <h5 class='section'>Description:</h5>
+	 * <p>
+	 * Specifies the default timezone for serializer and parser sessions.
+	 *
 	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<jc>// Create a serializer that uses GMT if the timezone is not specified in the session args.</jc>
@@ -1892,7 +1899,7 @@ public class BeanContext extends Context {
 	/** Default config.  All default settings except sort bean properties. */
 	public static final BeanContext DEFAULT_SORTED = BeanContext.create().sortProperties().build();
 
-	final boolean
+	private final boolean
 		beansRequireDefaultConstructor,
 		beansRequireSerializable,
 		beansRequireSettersForGetters,
@@ -1910,33 +1917,33 @@ public class BeanContext extends Context {
 		fluentSetters,
 		debug;
 
-	final Visibility
+	private final Visibility
 		beanConstructorVisibility,
 		beanClassVisibility,
 		beanMethodVisibility,
 		beanFieldVisibility;
 
-	final Class<?>[] notBeanClasses, beanDictionaryClasses;
-	final String[] notBeanPackageNames, notBeanPackagePrefixes;
-	final BeanFilter[] beanFilters;
-	final PojoSwap<?,?>[] pojoSwaps;
-	final Map<String,?> examples;
-	final BeanRegistry beanRegistry;
-	final Map<String,Class<?>> implClasses;
-	final Locale locale;
-	final TimeZone timeZone;
-	final MediaType mediaType;
-	final Map<String,String[]> includeProperties, excludeProperties;
-	final PropertyNamer propertyNamer;
+	private final Class<?>[] notBeanClasses;
+	private final List<Class<?>> beanDictionaryClasses;
+	private final String[] notBeanPackageNames, notBeanPackagePrefixes;
+	private final BeanFilter[] beanFilters;
+	private final PojoSwap<?,?>[] pojoSwaps;
+	private final Map<String,?> examples;
+	private final BeanRegistry beanRegistry;
+	private final Map<String,Class<?>> implClasses;
+	private final Locale locale;
+	private final TimeZone timeZone;
+	private final MediaType mediaType;
+	private final Map<String,String[]> includeProperties, excludeProperties;
+	private final PropertyNamer propertyNamer;
+	private final String beanTypePropertyName;
+	private final int beanHashCode;
 
 	final Map<Class,ClassMeta> cmCache;
-	final ClassMeta<Object> cmObject;  // Reusable ClassMeta that represents general Objects.
-	final ClassMeta<String> cmString;  // Reusable ClassMeta that represents general Strings.
-	final ClassMeta<Class> cmClass;  // Reusable ClassMeta that represents general Classes.
+	private final ClassMeta<Object> cmObject;  // Reusable ClassMeta that represents general Objects.
+	private final ClassMeta<String> cmString;  // Reusable ClassMeta that represents general Strings.
+	private final ClassMeta<Class> cmClass;  // Reusable ClassMeta that represents general Classes.
 
-	final String beanTypePropertyName;
-
-	final int beanHashCode;
 
 	/**
 	 * Constructor.
@@ -2045,7 +2052,7 @@ public class BeanContext extends Context {
 		cmObject = cmCache.get(Object.class);
 		cmClass = cmCache.get(Class.class);
 
-		beanDictionaryClasses = getClassArrayProperty(BEAN_beanDictionary);
+		beanDictionaryClasses = unmodifiableList(Arrays.asList(getClassArrayProperty(BEAN_beanDictionary)));
 		beanRegistry = new BeanRegistry(this, null);
 	}
 
@@ -2624,24 +2631,6 @@ public class BeanContext extends Context {
 	}
 
 	/**
-	 * Returns the type property name as defined by {@link #BEAN_beanTypePropertyName}.
-	 *
-	 * @return The type property name.  Never <jk>null</jk>.
-	 */
-	protected final String getBeanTypePropertyName() {
-		return beanTypePropertyName;
-	}
-
-	/**
-	 * Returns the bean registry defined in this bean context defined by {@link #BEAN_beanDictionary}.
-	 *
-	 * @return The bean registry defined in this bean context.  Never <jk>null</jk>.
-	 */
-	protected final BeanRegistry getBeanRegistry() {
-		return beanRegistry;
-	}
-
-	/**
 	 * Gets the no-arg constructor for the specified class.
 	 *
 	 * @param <T> The class to check.
@@ -2843,6 +2832,317 @@ public class BeanContext extends Context {
 		return cmClass;
 	}
 
+	/**
+	 * Returns the lookup table for resolving bean types by name.
+	 *
+	 * @return The lookup table for resolving bean types by name.
+	 */
+	public final BeanRegistry getBeanRegistry() {
+		return beanRegistry;
+	}
+
+	//-----------------------------------------------------------------------------------------------------------------
+	// Properties
+	//-----------------------------------------------------------------------------------------------------------------
+
+	/**
+	 * Configuration property:  Beans require no-arg constructors.
+	 *
+	 * @see #BEAN_beansRequireDefaultConstructor
+	 * @return
+	 * 	<jk>true</jk> if a Java class must implement a default no-arg constructor to be considered a bean.
+	 * 	<br>Otherwise, the bean will be serialized as a string using the {@link Object#toString()} method.
+	 */
+	public final boolean isBeansRequireDefaultConstructor() {
+		return beansRequireDefaultConstructor;
+	}
+
+	/**
+	 * Configuration property:  Beans require Serializable interface.
+	 *
+	 * @see #BEAN_beansRequireSerializable
+	 * @return
+	 * 	<jk>true</jk> if a Java class must implement the {@link Serializable} interface to be considered a bean.
+	 * 	<br>Otherwise, the bean will be serialized as a string using the {@link Object#toString()} method.
+	 */
+	public final boolean isBeansRequireSerializable() {
+		return beansRequireSerializable;
+	}
+
+	/**
+	 * Configuration property:  Beans require setters for getters.
+	 *
+	 * @see #BEAN_beansRequireSettersForGetters
+	 * @return
+	 * 	<jk>true</jk> if only getters that have equivalent setters will be considered as properties on a bean.
+	 * 	<br>Otherwise, they are ignored.
+	 */
+	public final boolean isBeansRequireSettersForGetters() {
+		return beansRequireSettersForGetters;
+	}
+
+	/**
+	 * Configuration property:  Beans require at least one property.
+	 *
+	 * @see #BEAN_beansRequireSomeProperties
+	 * @return
+	 * 	<jk>true</jk> if a Java class must contain at least 1 property to be considered a bean.
+	 * 	<br>Otherwise, the bean is serialized as a string using the {@link Object#toString()} method.
+	 */
+	public final boolean isBeansRequireSomeProperties() {
+		return beansRequireSomeProperties;
+	}
+
+	/**
+	 * Configuration property:  BeanMap.put() returns old property value.
+	 *
+	 * @see #BEAN_beanMapPutReturnsOldValue
+	 * @return
+	 * 	<jk>true</jk> if the {@link BeanMap#put(String,Object) BeanMap.put()} method will return old property values.
+	 * 	<br>Otherwise, it returns <jk>null</jk>.
+	 */
+	public final boolean isBeanMapPutReturnsOldValue() {
+		return beanMapPutReturnsOldValue;
+	}
+
+	/**
+	 * Configuration property:  Use interface proxies.
+	 *
+	 * @see #BEAN_useInterfaceProxies
+	 * @return
+	 * 	<jk>true</jk> if interfaces will be instantiated as proxy classes through the use of an
+	 * 	{@link InvocationHandler} if there is no other way of instantiating them.
+	 */
+	public final boolean isUseInterfaceProxies() {
+		return useInterfaceProxies;
+	}
+
+	/**
+	 * Configuration property:  Ignore unknown properties.
+	 *
+	 * @see #BEAN_ignoreUnknownBeanProperties
+	 * @return
+	 * 	<jk>true</jk> if trying to set a value on a non-existent bean property is silently ignored.
+	 */
+	public final boolean isIgnoreUnknownBeanProperties() {
+		return ignoreUnknownBeanProperties;
+	}
+
+	/**
+	 * Configuration property:  Ignore unknown properties with null values.
+	 *
+	 * @see #BEAN_ignoreUnknownNullBeanProperties
+	 * @return
+	 * 	<jk>true</jk> if trying to set a <jk>null</jk> value on a non-existent bean property is silently ignored.
+	 */
+	public final boolean isIgnoreUnknownNullBeanProperties() {
+		return ignoreUnknownNullBeanProperties;
+	}
+
+	/**
+	 * Configuration property:  Ignore properties without setters.
+	 *
+	 * <br>Otherwise, a {@code RuntimeException} is thrown.
+	 *
+	 * @see #BEAN_ignorePropertiesWithoutSetters
+	 * @return
+	 * 	<jk>true</jk> if trying to set a value on a bean property without a setter is silently ignored.
+	 */
+	public final boolean isIgnorePropertiesWithoutSetters() {
+		return ignorePropertiesWithoutSetters;
+	}
+
+	/**
+	 * Configuration property:  Ignore invocation errors on getters.
+	 *
+	 * @see #BEAN_ignoreInvocationExceptionsOnGetters
+	 * @return
+	 * 	<jk>true</jk> if errors thrown when calling bean getter methods are silently ignored.
+	 */
+	public final boolean isIgnoreInvocationExceptionsOnGetters() {
+		return ignoreInvocationExceptionsOnGetters;
+	}
+
+	/**
+	 * Configuration property:  Ignore invocation errors on setters.
+	 *
+	 * @see #BEAN_ignoreInvocationExceptionsOnSetters
+	 * @return
+	 * 	<jk>true</jk> if errors thrown when calling bean setter methods are silently ignored.
+	 */
+	public final boolean isIgnoreInvocationExceptionsOnSetters() {
+		return ignoreInvocationExceptionsOnSetters;
+	}
+
+	/**
+	 * Configuration property:  Use Java Introspector.
+	 *
+	 * @see #BEAN_useJavaBeanIntrospector
+	 * @return
+	 * 	<jk>true</jk> if the built-in Java bean introspector should be used for bean introspection.
+	 */
+	public final boolean isUseJavaBeanIntrospector() {
+		return useJavaBeanIntrospector;
+	}
+
+	/**
+	 * Configuration property:  Use enum names.
+	 *
+	 * @see #BEAN_useEnumNames
+	 * @return
+	 * 	<jk>true</jk> if enums are always serialized by name, not using {@link Object#toString()}.
+	 */
+	public final boolean isUseEnumNames() {
+		return useEnumNames;
+	}
+
+	/**
+	 * Configuration property:  Sort bean properties.
+	 *
+	 * @see #BEAN_sortProperties
+	 * @return
+	 * 	<jk>true</jk> if all bean properties will be serialized and access in alphabetical order.
+	 */
+	public final boolean isSortProperties() {
+		return sortProperties;
+	}
+
+	/**
+	 * Configuration property:  Find fluent setters.
+	 *
+	 * <h5 class='section'>Description:</h5>
+	 * <p>
+	 *
+	 * @see #BEAN_fluentSetters
+	 * @return
+	 * 	<jk>true</jk> if fluent setters are detected on beans.
+	 */
+	public final boolean isFluentSetters() {
+		return fluentSetters;
+	}
+
+	/**
+	 * Configuration property:  Debug mode.
+	 *
+	 * @see #BEAN_debug
+	 * @return
+	 * 	<jk>true</jk> if debug mode is enabled.
+	 */
+	public boolean isDebug() {
+		return debug;
+	}
+
+	/**
+	 * Configuration property:  Minimum bean constructor visibility.
+	 *
+	 * @see #BEAN_beanConstructorVisibility
+	 * @return
+	 * 	Only look for constructors with this specified minimum visibility.
+	 */
+	public final Visibility getBeanConstructorVisibility() {
+		return beanConstructorVisibility;
+	}
+
+	/**
+	 * Configuration property:  Minimum bean class visibility.
+	 *
+	 * @see #BEAN_beanClassVisibility
+	 * @return
+	 * 	Classes are not considered beans unless they meet the minimum visibility requirements.
+	 */
+	public final Visibility getBeanClassVisibility() {
+		return beanClassVisibility;
+	}
+
+	/**
+	 * Configuration property:  Minimum bean method visibility.
+	 *
+	 * @see #BEAN_beanMethodVisibility
+	 * @return
+	 * 	Only look for bean methods with this specified minimum visibility.
+	 */
+	public final Visibility getBeanMethodVisibility() {
+		return beanMethodVisibility;
+	}
+
+	/**
+	 * Configuration property:  Minimum bean field visibility.
+	 *
+	 *
+	 * @see #BEAN_beanFieldVisibility
+	 * @return
+	 * 	Only look for bean fields with this specified minimum visibility.
+	 */
+	public final Visibility getBeanFieldVisibility() {
+		return beanFieldVisibility;
+	}
+
+	/**
+	 * Configuration property:  Bean dictionary.
+	 *
+	 * @see #BEAN_beanDictionary
+	 * @return
+	 * 	The list of classes that make up the bean dictionary in this bean context.
+	 */
+	public final List<Class<?>> getBeanDictionaryClasses() {
+		return beanDictionaryClasses;
+	}
+
+	/**
+	 * Configuration property:  Locale.
+	 *
+	 * @see #BEAN_locale
+	 * @return
+	 * 	The default locale for serializer and parser sessions.
+	 */
+	public final Locale getLocale() {
+		return locale;
+	}
+
+	/**
+	 * Configuration property:  Time zone.
+	 *
+	 * @see #BEAN_timeZone
+	 * @return
+	 * 	The default timezone for serializer and parser sessions.
+	 */
+	public final TimeZone getTimeZone() {
+		return timeZone;
+	}
+
+	/**
+	 * Configuration property:  Media type.
+	 *
+	 * @see #BEAN_mediaType
+	 * @return
+	 * 	The default media type value for serializer and parser sessions.
+	 */
+	public final MediaType getMediaType() {
+		return mediaType;
+	}
+
+	/**
+	 * Configuration property:  Bean property namer.
+	 *
+	 * @see #BEAN_propertyNamer
+	 * @return
+	 * 	The interface used to calculate bean property names.
+	 */
+	public final PropertyNamer getPropertyNamer() {
+		return propertyNamer;
+	}
+
+	/**
+	 * Configuration property:  Bean type property name.
+	 *
+	 * @see #BEAN_beanTypePropertyName
+	 * @return
+	 * The name of the bean property used to store the dictionary name of a bean type so that the parser knows the data type to reconstruct.
+	 */
+	public final String getBeanTypePropertyName() {
+		return beanTypePropertyName;
+	}
+
 	@Override /* Context */
 	public ObjectMap asMap() {
 		return super.asMap()
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
index 23abe78..93cff4a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
@@ -220,7 +220,7 @@ public class BeanMap<T> extends AbstractMap<String,Object> implements Delegate<T
 	public Object put(String property, Object value) {
 		BeanPropertyMeta p = meta.properties.get(property);
 		if (p == null) {
-			if (meta.ctx.ignoreUnknownBeanProperties)
+			if (meta.ctx.isIgnoreUnknownBeanProperties())
 				return null;
 
 			if (property.equals(beanTypePropertyName))
@@ -248,7 +248,7 @@ public class BeanMap<T> extends AbstractMap<String,Object> implements Delegate<T
 	public void add(String property, Object value) {
 		BeanPropertyMeta p = meta.properties.get(property);
 		if (p == null) {
-			if (meta.ctx.ignoreUnknownBeanProperties)
+			if (meta.ctx.isIgnoreUnknownBeanProperties())
 				return;
 			throw new BeanRuntimeException(meta.c, "Bean property ''{0}'' not found.", property);
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
index 907c6a8..5cefbb3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
@@ -168,10 +168,10 @@ public class BeanMeta<T> {
 
 			try {
 				Visibility
-					conVis = ctx.beanConstructorVisibility,
-					cVis = ctx.beanClassVisibility,
-					mVis = ctx.beanMethodVisibility,
-					fVis = ctx.beanFieldVisibility;
+					conVis = ctx.getBeanConstructorVisibility(),
+					cVis = ctx.getBeanClassVisibility(),
+					mVis = ctx.getBeanMethodVisibility(),
+					fVis = ctx.getBeanFieldVisibility();
 
 				List<Class<?>> bdClasses = new ArrayList<>();
 				if (beanFilter != null && beanFilter.getBeanDictionary() != null)
@@ -189,7 +189,7 @@ public class BeanMeta<T> {
 				if (typePropertyName == null)
 					typePropertyName = ctx.getBeanTypePropertyName();
 
-				fluentSetters = (ctx.fluentSetters || (beanFilter != null && beanFilter.isFluentSetters()));
+				fluentSetters = (ctx.isFluentSetters() || (beanFilter != null && beanFilter.isFluentSetters()));
 
 				// If @Bean.interfaceClass is specified on the parent class, then we want
 				// to use the properties defined on that class, not the subclass.
@@ -212,7 +212,7 @@ public class BeanMeta<T> {
 					return "Class is annotated with @BeanIgnore";
 
 				// Make sure it's serializable.
-				if (beanFilter == null && ctx.beansRequireSerializable && ! isParentClass(Serializable.class, c))
+				if (beanFilter == null && ctx.isBeansRequireSerializable() && ! isParentClass(Serializable.class, c))
 					return "Class is not serializable";
 
 				// Look for @BeanConstructor constructor.
@@ -235,7 +235,7 @@ public class BeanMeta<T> {
 				if (constructor == null)
 					constructor = (Constructor<T>)findNoArgConstructor(c, conVis);
 
-				if (constructor == null && beanFilter == null && ctx.beansRequireDefaultConstructor)
+				if (constructor == null && beanFilter == null && ctx.isBeansRequireDefaultConstructor())
 					return "Class does not have the required no-arg constructor";
 
 				setAccessible(constructor, false);
@@ -265,14 +265,14 @@ public class BeanMeta<T> {
 					fixedBeanProps.addAll(Arrays.asList(includeProperties));
 
 				if (propertyNamer == null)
-					propertyNamer = ctx.propertyNamer;
+					propertyNamer = ctx.getPropertyNamer();
 
 				// First populate the properties with those specified in the bean annotation to
 				// ensure that ordering first.
 				for (String name : fixedBeanProps)
 					normalProps.put(name, BeanPropertyMeta.builder(beanMeta, name));
 
-				if (ctx.useJavaBeanIntrospector) {
+				if (ctx.isUseJavaBeanIntrospector()) {
 					BeanInfo bi = null;
 					if (! c2.isInterface())
 						bi = Introspector.getBeanInfo(c2, stopClass);
@@ -378,10 +378,10 @@ public class BeanMeta<T> {
 				}
 
 				// Make sure at least one property was found.
-				if (beanFilter == null && ctx.beansRequireSomeProperties && normalProps.size() == 0)
+				if (beanFilter == null && ctx.isBeansRequireSomeProperties() && normalProps.size() == 0)
 					return "No properties detected on bean class";
 
-				sortProperties = (ctx.sortProperties || (beanFilter != null && beanFilter.isSortProperties())) && fixedBeanProps.isEmpty();
+				sortProperties = (ctx.isSortProperties() || (beanFilter != null && beanFilter.isSortProperties())) && fixedBeanProps.isEmpty();
 
 				properties = sortProperties ? new TreeMap<String,BeanPropertyMeta>() : new LinkedHashMap<String,BeanPropertyMeta>();
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
index 03140b9..b6c7770 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
@@ -167,7 +167,7 @@ public final class BeanPropertyMeta {
 			if (field == null && getter == null && setter == null)
 				return false;
 
-			if (field == null && setter == null && f.beansRequireSettersForGetters && ! isConstructorArg)
+			if (field == null && setter == null && f.isBeansRequireSettersForGetters() && ! isConstructorArg)
 				return false;
 
 			canRead |= (field != null || getter != null);
@@ -523,7 +523,7 @@ public final class BeanPropertyMeta {
 			return toSerializedForm(m.getBeanSession(), getRaw(m, pName));
 
 		} catch (Throwable e) {
-			if (beanContext.ignoreInvocationExceptionsOnGetters) {
+			if (beanContext.isIgnoreInvocationExceptionsOnGetters()) {
 				if (rawTypeMeta.isPrimitive())
 					return rawTypeMeta.getPrimitiveDefault();
 				return null;
@@ -549,7 +549,7 @@ public final class BeanPropertyMeta {
 			return invokeGetter(bean, pName);
 
 		} catch (Throwable e) {
-			if (beanContext.ignoreInvocationExceptionsOnGetters) {
+			if (beanContext.isIgnoreInvocationExceptionsOnGetters()) {
 				if (rawTypeMeta.isPrimitive())
 					return rawTypeMeta.getPrimitiveDefault();
 				return null;
@@ -623,7 +623,7 @@ public final class BeanPropertyMeta {
 			boolean isCollection = rawTypeMeta.isCollection();
 
 			if ((! isDyna) && field == null && setter == null && ! (isMap || isCollection)) {
-				if ((value == null && beanContext.ignoreUnknownNullBeanProperties) || beanContext.ignorePropertiesWithoutSetters)
+				if ((value == null && beanContext.isIgnoreUnknownNullBeanProperties()) || beanContext.isIgnorePropertiesWithoutSetters())
 					return null;
 				throw new BeanRuntimeException(beanMeta.c, "Setter or public field not defined on property ''{0}''", name);
 			}
@@ -632,7 +632,7 @@ public final class BeanPropertyMeta {
 
 			try {
 
-				Object r = beanContext.beanMapPutReturnsOldValue || isMap || isCollection ? get(m, pName) : null;
+				Object r = beanContext.isBeanMapPutReturnsOldValue() || isMap || isCollection ? get(m, pName) : null;
 				Class<?> propertyClass = rawTypeMeta.getInnerClass();
 
 				if (value == null && (isMap || isCollection)) {
@@ -765,7 +765,7 @@ public final class BeanPropertyMeta {
 				throw e;
 			} catch (Exception e) {
 				e.printStackTrace();
-				if (beanContext.ignoreInvocationExceptionsOnSetters) {
+				if (beanContext.isIgnoreInvocationExceptionsOnSetters()) {
 						if (rawTypeMeta.isPrimitive())
 							return rawTypeMeta.getPrimitiveDefault();
 					return null;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
index fb85a53..ce8fca4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
@@ -50,7 +50,7 @@ public class BeanRegistry {
 		this.beanContext = beanContext;
 		this.map = new ConcurrentHashMap<>();
 		this.reverseMap = new ConcurrentHashMap<>();
-		for (Class<?> c : beanContext.beanDictionaryClasses)
+		for (Class<?> c : beanContext.getBeanDictionaryClasses())
 			addClass(c);
 		if (parent != null)
 			for (Map.Entry<String,ClassMeta<?>> e : parent.map.entrySet())
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 ed3f8f3..7ce14ea 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
@@ -58,10 +58,10 @@ public class BeanSession extends Session {
 	protected BeanSession(BeanContext ctx, BeanSessionArgs args) {
 		super(args);
 		this.ctx = ctx;
-		locale = getProperty(BEAN_locale, Locale.class, args.locale, ctx.locale, Locale.getDefault());
-		timeZone = getProperty(BEAN_timeZone, TimeZone.class, args.timeZone, ctx.timeZone);
-		debug = getProperty(BEAN_debug, boolean.class, ctx.debug);
-		mediaType = getProperty(BEAN_mediaType, MediaType.class, args.mediaType, ctx.mediaType);
+		locale = getProperty(BEAN_locale, Locale.class, args.locale, ctx.getLocale(), Locale.getDefault());
+		timeZone = getProperty(BEAN_timeZone, TimeZone.class, args.timeZone, ctx.getTimeZone());
+		debug = getProperty(BEAN_debug, boolean.class, ctx.isDebug());
+		mediaType = getProperty(BEAN_mediaType, MediaType.class, args.mediaType, ctx.getMediaType());
 	}
 
 	@Override /* Session */
@@ -129,7 +129,7 @@ public class BeanSession extends Session {
 	 * @return The value of the <property>ignoreUnknownBeanProperties</property> property on this bean.
 	 */
 	public final boolean isIgnoreUnknownBeanProperties() {
-		return ctx.ignoreUnknownBeanProperties;
+		return ctx.isIgnoreUnknownBeanProperties();
 	}
 
 	/**
@@ -1079,7 +1079,7 @@ public class BeanSession extends Session {
 	 */
 	public final String getBeanTypePropertyName(ClassMeta cm) {
 		String s = cm == null ? null : cm.getBeanTypePropertyName();
-		return s == null ? ctx.beanTypePropertyName : s;
+		return s == null ? ctx.getBeanTypePropertyName() : s;
 	}
 
 	/**
@@ -1088,7 +1088,7 @@ public class BeanSession extends Session {
 	 * @return The bean registry defined in this bean context.  Never <jk>null</jk>.
 	 */
 	public final BeanRegistry getBeanRegistry() {
-		return ctx.beanRegistry;
+		return ctx.getBeanRegistry();
 	}
 
 	/**
@@ -1196,7 +1196,7 @@ public class BeanSession extends Session {
 	 * @return The {@link ClassMeta} object associated with the <code>Object</code> class.
 	 */
 	public final ClassMeta<Object> object() {
-		return ctx.cmObject;
+		return ctx.object();
 	}
 
 	/**
@@ -1212,7 +1212,7 @@ public class BeanSession extends Session {
 	 * @return The {@link ClassMeta} object associated with the <code>String</code> class.
 	 */
 	public final ClassMeta<String> string() {
-		return ctx.cmString;
+		return ctx.string();
 	}
 
 	/**
@@ -1228,7 +1228,7 @@ public class BeanSession extends Session {
 	 * @return The {@link ClassMeta} object associated with the <code>String</code> class.
 	 */
 	public final ClassMeta<Class> _class() {
-		return ctx.cmClass;
+		return ctx._class();
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
index c5cf4a9..61eae25 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
@@ -635,7 +635,7 @@ public final class ClassMeta<T> implements Type {
 				this.pojoSwaps.addAll(Arrays.asList(pojoSwaps));
 
 			if (beanContext != null)
-				this.builderSwap = BuilderSwap.findSwapFromPojoClass(c, beanContext.beanConstructorVisibility, beanContext.beanMethodVisibility);
+				this.builderSwap = BuilderSwap.findSwapFromPojoClass(c, beanContext.getBeanConstructorVisibility(), beanContext.getBeanMethodVisibility());
 
 			findPojoSwaps(this.pojoSwaps);
 
@@ -698,7 +698,7 @@ public final class ClassMeta<T> implements Type {
 			if (beanMeta != null)
 				dictionaryName = beanMeta.getDictionaryName();
 
-			if (beanMeta != null && beanContext != null && beanContext.useInterfaceProxies && innerClass.isInterface())
+			if (beanMeta != null && beanContext != null && beanContext.isUseInterfaceProxies() && innerClass.isInterface())
 				invocationHandler = new BeanProxyInvocationHandler<T>(beanMeta);
 
 			Bean b = c.getAnnotation(Bean.class);
@@ -1781,7 +1781,7 @@ public final class ClassMeta<T> implements Type {
 	public String toString(Object t) {
 		if (t == null)
 			return null;
-		if (isEnum() && beanContext.useEnumNames)
+		if (isEnum() && beanContext.isUseEnumNames())
 			return ((Enum<?>)t).name();
 		return t.toString();
 	}
@@ -1813,7 +1813,7 @@ public final class ClassMeta<T> implements Type {
 	@SuppressWarnings({ "unchecked", "rawtypes" })
 	public T newInstanceFromString(Object outer, String arg) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException {
 
-		if (isEnum() && beanContext.useEnumNames)
+		if (isEnum() && beanContext.isUseEnumNames())
 			return (T)Enum.valueOf((Class<? extends Enum>)this.innerClass, arg);
 
 		Method m = fromStringMethod;
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 dd36625..488e190 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
@@ -2903,7 +2903,7 @@ public final class RestContext extends BeanContext {
 			allowedMethodParams = Collections.unmodifiableSet(new LinkedHashSet<>(Arrays.asList(StringUtils.split(getStringProperty(REST_allowedMethodParams, "HEAD,OPTIONS")))));
 			renderResponseStackTraces = getBooleanProperty(REST_renderResponseStackTraces, false);
 			useStackTraceHashes = getBooleanProperty(REST_useStackTraceHashes, true);
-			debug = getBooleanProperty(REST_debug, false);
+			debug = getBooleanProperty(REST_debug, super.isDebug());
 			defaultCharset = getStringProperty(REST_defaultCharset, "utf-8");
 			maxInput = getLongProperty(REST_maxInput, 100_000_000l);
 			clientVersionHeader = getStringProperty(REST_clientVersionHeader, "X-Client-Version");
@@ -3939,6 +3939,7 @@ public final class RestContext extends BeanContext {
 	 *
 	 * @return <jk>true</jk> if setting is enabled.
 	 */
+	@Override
 	public boolean isDebug() {
 		return debug;
 	}