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 a4ea172  Context API refactoring.
a4ea172 is described below

commit a4ea172cd8b12daafb42d61add3caad2a86512de
Author: JamesBognar <james.bog...@salesforce.com>
AuthorDate: Sat Sep 25 16:47:27 2021 -0400

    Context API refactoring.
---
 .../main/java/org/apache/juneau/BeanContext.java   | 519 ++-------------------
 .../java/org/apache/juneau/BeanContextBuilder.java | 360 +++++++++++---
 .../org/apache/juneau/BeanContextableBuilder.java  |  36 +-
 .../java/org/apache/juneau/BeanFilterBuilder.java  |   6 +-
 .../main/java/org/apache/juneau/BeanSession.java   |  30 +-
 .../java/org/apache/juneau/annotation/Bean.java    |  20 +-
 .../org/apache/juneau/annotation/BeanConfig.java   | 114 ++---
 .../juneau/annotation/BeanConfigAnnotation.java    |  32 +-
 .../java/org/apache/juneau/annotation/Beanp.java   |   2 +-
 .../org/apache/juneau/parser/ParserListener.java   |   2 +-
 .../org/apache/juneau/parser/ParserSession.java    |   2 +-
 .../main/java/org/apache/juneau/utils/HashKey.java |  44 +-
 12 files changed, 454 insertions(+), 713 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 b7a250e..5fb65f2 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
@@ -76,7 +76,7 @@ import org.apache.juneau.transform.*;
  * handled.  These are denoted as the static <jsf>BEAN_*</jsf> fields on this 
class.
  *
  * <p class='w800'>
- * Some settings (e.g. {@link #BEAN_beansRequireDefaultConstructor}) are used 
to differentiate between bean
+ * Some settings (e.g. {@link 
BeanContextBuilder#beansRequireDefaultConstructor()}) are used to differentiate 
between bean
  * and non-bean classes.
  * Attempting to create a bean map around one of these objects will throw a 
{@link BeanRuntimeException}.
  * The purpose for this behavior is so that the serializers can identify these 
non-bean classes and convert them to
@@ -87,7 +87,7 @@ import org.apache.juneau.transform.*;
  * detected on beans.
  *
  * <p class='w800'>
- * Some settings (e.g. {@link #BEAN_beanMapPutReturnsOldValue}) change the 
runtime behavior of bean maps.
+ * Some settings (e.g. {@link BeanContextBuilder#beanMapPutReturnsOldValue()}) 
change the runtime behavior of bean maps.
  *
  * <p class='w800'>
  * Settings are specified using the {@link BeanContextBuilder#set(String, 
Object)} method and related convenience
@@ -156,145 +156,6 @@ public class BeanContext extends Context {
        static final String PREFIX = "BeanContext";
 
        /**
-        * Configuration property:  Beans don't require at least one property.
-        *
-        * <p>
-        * When enabled, then a Java class doesn't need to contain at least 1 
property to be considered a bean.
-        * Otherwise, the bean will be serialized as a string using the {@link 
Object#toString()} method.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.BeanContext#BEAN_disableBeansRequireSomeProperties 
BEAN_disableBeansRequireSomeProperties}
-        *      <li><b>Name:</b>  
<js>"BeanContext.disableBeansRequireSomeProperties.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  
<c>BeanContext.disableBeansRequireSomeProperties</c>
-        *      <li><b>Environment variable:</b>  
<c>BEANCONTEXT_DIABLEBEANSREQUIRESOMEPROPERTIES</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>true</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#disableBeansRequireSomeProperties()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#disableBeansRequireSomeProperties()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String BEAN_disableBeansRequireSomeProperties = 
PREFIX + ".disableBeansRequireSomeProperties.b";
-
-       /**
-        * Configuration property:  BeanMap.put() returns old property value.
-        *
-        * <p>
-        * When enabled, then the {@link BeanMap#put(String,Object) 
BeanMap.put()} method will return old property
-        * values.  Otherwise, it returns <jk>null</jk>.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.BeanContext#BEAN_beanMapPutReturnsOldValue 
BEAN_beanMapPutReturnsOldValue}
-        *      <li><b>Name:</b>  
<js>"BeanContext.beanMapPutReturnsOldValue.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  
<c>BeanContext.beanMapPutReturnsOldValue</c>
-        *      <li><b>Environment variable:</b>  
<c>BEANCONTEXT_BEANMAPPUTRETURNSOLDVALUE</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#beanMapPutReturnsOldValue()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#beanMapPutReturnsOldValue()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String BEAN_beanMapPutReturnsOldValue = PREFIX + 
".beanMapPutReturnsOldValue.b";
-
-       /**
-        * Configuration property:  Beans require no-arg constructors.
-        *
-        * <p>
-        * When enabled, a Java class must implement a default no-arg 
constructor to be considered a bean.
-        * Otherwise, the bean will be serialized as a string using the {@link 
Object#toString()} method.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.BeanContext#BEAN_beansRequireDefaultConstructor 
BEAN_beansRequireDefaultConstructor}
-        *      <li><b>Name:</b>  
<js>"BeanContext.beansRequireDefaultConstructor.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  
<c>BeanContext.beansRequireDefaultConstructor</c>
-        *      <li><b>Environment variable:</b>  
<c>BEANCONTEXT_BEANSREQUIREDEFAULTCONSTRUCTOR</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#beansRequireDefaultConstructor()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#beansRequireDefaultConstructor()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String BEAN_beansRequireDefaultConstructor = PREFIX 
+ ".beansRequireDefaultConstructor.b";
-
-       /**
-        * Configuration property:  Beans require Serializable interface.
-        *
-        * <p>
-        * When enabled, a Java class must implement the {@link Serializable} 
interface to be considered a bean.
-        * Otherwise, the bean will be serialized as a string using the {@link 
Object#toString()} method.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.BeanContext#BEAN_beansRequireSerializable 
BEAN_beansRequireSerializable}
-        *      <li><b>Name:</b>  
<js>"BeanContext.beansRequireSerializable.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  
<c>BeanContext.beansRequireSerializable</c>
-        *      <li><b>Environment variable:</b>  
<c>BEANCONTEXT_BEANSREQUIRESERIALIZABLE</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#beansRequireSerializable()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#beansRequireSerializable()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String BEAN_beansRequireSerializable = PREFIX + 
".beansRequireSerializable.b";
-
-       /**
-        * Configuration property:  Beans require setters for getters.
-        *
-        * <p>
-        * When enabled, ignore read-only properties (properties with getters 
but not setters).
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.BeanContext#BEAN_beansRequireSettersForGetters 
BEAN_beansRequireSettersForGetters}
-        *      <li><b>Name:</b>  
<js>"BeanContext.beansRequireSettersForGetters.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  
<c>BeanContext.beansRequireSettersForGetters</c>
-        *      <li><b>Environment variable:</b>  
<c>BEANCONTEXT_BEANSREQUIRESETTERSFORGETTERS</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#beansRequireSettersForGetters()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#beansRequireSettersForGetters()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String BEAN_beansRequireSettersForGetters = PREFIX 
+ ".beansRequireSettersForGetters.b";
-
-       /**
         * Configuration property:  Bean type property name.
         *
         * <p>
@@ -324,230 +185,6 @@ public class BeanContext extends Context {
        public static final String BEAN_typePropertyName = PREFIX + 
".typePropertyName.s";
 
        /**
-        * Configuration property:  Don't ignore transient fields.
-        *
-        * <p>
-        * When enabled, methods and fields marked as <jk>transient</jk> will 
not be ignored as bean properties.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.BeanContext#BEAN_disableIgnoreTransientFields 
BEAN_disableIgnoreTransientFields}
-        *      <li><b>Name:</b>  
<js>"BeanContext.disableIgnoreTransientFields.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  
<c>BeanContext.disableIgnoreTransientFields</c>
-        *      <li><b>Environment variable:</b>  
<c>BEANCONTEXT_DISABLEIGNORETRANSIENTFIELDS</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#disableIgnoreTransientFields()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#disableIgnoreTransientFields()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String BEAN_disableIgnoreTransientFields = PREFIX + 
".disableIgnoreTransientFields.b";
-
-       /**
-        * Configuration property:  Don't ignore unknown properties with null 
values.
-        *
-        * <p>
-        * When enabled, trying to set a <jk>null</jk> value on a non-existent 
bean property will throw a {@link BeanRuntimeException}.
-        * Otherwise it will be silently ignored.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.BeanContext#BEAN_disableIgnoreUnknownNullBeanProperties 
BEAN_disableIgnoreUnknownNullBeanProperties}
-        *      <li><b>Name:</b>  
<js>"BeanContext.disableIgnoreUnknownNullBeanProperties.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  
<c>BeanContext.disableIgnoreUnknownNullBeanProperties</c>
-        *      <li><b>Environment variable:</b>  
<c>BEANCONTEXT_DISABLEIGNOREUNKNOWNNULLBEANPROPERTIES</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#disableIgnoreUnknownNullBeanProperties()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#disableIgnoreUnknownNullBeanProperties()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String BEAN_disableIgnoreUnknownNullBeanProperties 
= PREFIX + ".disableIgnoreUnknownNullBeanProperties.b";
-
-       /**
-        * Configuration property:  Don't silently ignore missing setters.
-        *
-        * <p>
-        * When enabled, trying to set a value on a bean property without a 
setter will throw a {@link BeanRuntimeException}.
-        * Otherwise, it will be silently ignored.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.BeanContext#BEAN_disableIgnoreMissingSetters 
BEAN_disableIgnoreMissingSetters}
-        *      <li><b>Name:</b>  
<js>"BeanContext.disableIgnoreMissingSetters.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  
<c>BeanContext.disableIgnoreMissingSetters</c>
-        *      <li><b>Environment variable:</b>  
<c>BEANCONTEXT_DISABLEIGNOREMISSINGSETTERS</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#disableIgnoreMissingSetters()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#disableIgnoreMissingSetters()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String BEAN_disableIgnoreMissingSetters = PREFIX + 
".disableIgnoreMissingSetters.b";
-
-       /**
-        * Configuration property:  Don't use interface proxies.
-        *
-        * <p>
-        * When <jk>false</jk>, interfaces will be instantiated as proxy 
classes through the use of an
-        * {@link InvocationHandler} if there is no other way of instantiating 
them.
-        * Otherwise, throws a {@link BeanRuntimeException}.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.BeanContext#BEAN_disableInterfaceProxies 
BEAN_disableInterfaceProxies}
-        *      <li><b>Name:</b>  
<js>"BeanContext.disableInterfaceProxies.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  
<c>BeanContext.disableInterfaceProxies</c>
-        *      <li><b>Environment variable:</b>  
<c>BEANCONTEXT_DISABLEINTERFACEPROXIES</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#disableInterfaceProxies()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#disableInterfaceProxies()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String BEAN_disableInterfaceProxies = PREFIX + 
".disableInterfaceProxies.b";
-
-       /**
-        * Configuration property:  Find fluent setters.
-        *
-        * <p>
-        * When enabled, fluent setters are detected on beans during parsing.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.BeanContext#BEAN_findFluentSetters BEAN_findFluentSetters}
-        *      <li><b>Name:</b>  <js>"BeanContext.findFluentSetters.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  
<c>BeanContext.findFluentSetters</c>
-        *      <li><b>Environment variable:</b>  
<c>BEANCONTEXT_FINDFLUENTSETTERS</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.Bean#findFluentSetters()}
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#findFluentSetters()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#findFluentSetters()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String BEAN_findFluentSetters = PREFIX + 
".findFluentSetters.b";
-
-       /**
-        * Configuration property:  Ignore invocation errors on getters.
-        *
-        * <p>
-        * When enabled, errors thrown when calling bean getter methods will 
silently be ignored.
-        * Otherwise, a {@code BeanRuntimeException} is thrown.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.BeanContext#BEAN_ignoreInvocationExceptionsOnGetters 
BEAN_ignoreInvocationExceptionsOnGetters}
-        *      <li><b>Name:</b>  
<js>"BeanContext.ignoreInvocationExceptionsOnGetters.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  
<c>BeanContext.ignoreInvocationExceptionsOnGetters</c>
-        *      <li><b>Environment variable:</b>  
<c>BEANCONTEXT_IGNOREINVOCATIONEXCEPTIONONGETTERS</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#ignoreInvocationExceptionsOnGetters()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#ignoreInvocationExceptionsOnGetters()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String BEAN_ignoreInvocationExceptionsOnGetters = 
PREFIX + ".ignoreInvocationExceptionsOnGetters.b";
-
-       /**
-        * Configuration property:  Ignore invocation errors on setters.
-        *
-        * <p>
-        * When enabled, errors thrown when calling bean setter methods will 
silently be ignored.
-        * Otherwise, a {@code BeanRuntimeException} is thrown.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.BeanContext#BEAN_ignoreInvocationExceptionsOnSetters 
BEAN_ignoreInvocationExceptionsOnSetters}
-        *      <li><b>Name:</b>  
<js>"BeanContext.ignoreInvocationExceptionsOnSetters.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  
<c>BeanContext.ignoreInvocationExceptionsOnSetters</c>
-        *      <li><b>Environment variable:</b>  
<c>BEANCONTEXT_IGNOREINVOCATIONEXCEPTIONSONSETTERS</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#ignoreInvocationExceptionsOnSetters()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#ignoreInvocationExceptionsOnSetters()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String BEAN_ignoreInvocationExceptionsOnSetters = 
PREFIX + ".ignoreInvocationExceptionsOnSetters.b";
-
-       /**
-        * Configuration property:  Ignore unknown properties.
-        *
-        * <p>
-        * When enabled, trying to set a value on a non-existent bean property 
will silently be ignored.
-        * Otherwise, a {@code BeanRuntimeException} is thrown.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.BeanContext#BEAN_ignoreUnknownBeanProperties 
BEAN_ignoreUnknownBeanProperties}
-        *      <li><b>Name:</b>  
<js>"BeanContext.ignoreUnknownBeanProperties.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  
<c>BeanContext.ignoreUnknownBeanProperties</c>
-        *      <li><b>Environment variable:</b>  
<c>BEANCONTEXT_IGNOREUNKNOWNBEANPROPERTIES</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#ignoreUnknownBeanProperties()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#ignoreUnknownBeanProperties()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String BEAN_ignoreUnknownBeanProperties = PREFIX + 
".ignoreUnknownBeanProperties.b";
-
-       /**
         * Configuration property:  Locale.
         *
         * <p>
@@ -704,37 +341,6 @@ public class BeanContext extends Context {
        public static final String BEAN_propertyNamer = PREFIX + 
".propertyNamer.c";
 
        /**
-        * Configuration property:  Sort bean properties.
-        *
-        * <p>
-        * When enabled, all bean properties will be serialized and access in 
alphabetical order.
-        * Otherwise, the natural order of the bean properties is used which is 
dependent on the JVM vendor.
-        * On IBM JVMs, the bean properties are ordered based on their ordering 
in the Java file.
-        * On Oracle JVMs, the bean properties are not ordered (which follows 
the official JVM specs).
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.BeanContext#BEAN_sortProperties BEAN_sortProperties}
-        *      <li><b>Name:</b>  <js>"BeanContext.sortProperties.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  <c>BeanContext.sortProperties</c>
-        *      <li><b>Environment variable:</b>  
<c>BEANCONTEXT_SORTPROPERTIES</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.Bean#sort()}
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#sortProperties()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#sortProperties()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String BEAN_sortProperties = PREFIX + 
".sortProperties.b";
-
-       /**
         * Configuration property:  Java object swaps.
         *
         * <p>
@@ -792,59 +398,6 @@ public class BeanContext extends Context {
         */
        public static final String BEAN_timeZone = PREFIX + ".timeZone.s";
 
-       /**
-        * Configuration property:  Use enum names.
-        *
-        * <p>
-        * When enabled, enums are always serialized by name, not using {@link 
Object#toString()}..
-        *
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.BeanContext#BEAN_useEnumNames BEAN_useEnumNames}
-        *      <li><b>Name:</b>  <js>"BeanContext.useEnumNames.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  <c>BeanContext.useEnumNames</c>
-        *      <li><b>Environment variable:</b>  
<c>BEANCONTEXT_USEENUMNAMES</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#useEnumNames()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#useEnumNames()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String BEAN_useEnumNames = PREFIX + 
".useEnumNames.b";
-
-       /**
-        * Configuration property:  Use Java Introspector.
-        *
-        * <p>
-        * Using the built-in Java bean introspector will not pick up fields or 
non-standard getters/setters.
-        * <br>Most {@link Bean @Bean} annotations will be ignored..
-        *
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.BeanContext#BEAN_useJavaBeanIntrospector 
BEAN_useJavaBeanIntrospector}
-        *      <li><b>Name:</b>  
<js>"BeanContext.useJavaBeanIntrospector.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  
<c>BeanContext.useJavaBeanIntrospector</c>
-        *      <li><b>Environment variable:</b>  
<c>BEANCONTEXT_USEJAVABEANINTROSPECTOR</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#useJavaBeanIntrospector()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#useJavaBeanIntrospector()}
-        *              </ul>
-        * </ul>
-        */
-       public static final String BEAN_useJavaBeanIntrospector = PREFIX + 
".useJavaBeanIntrospector.b";
-
        /*
         * The default package pattern exclusion list.
         * Any beans in packages in this list will not be considered beans.
@@ -884,7 +437,7 @@ public class BeanContext extends Context {
        /** Default reusable unmodifiable session.  Can be used to avoid 
overhead of creating a session (for creating BeanMaps for example).*/
        public  static final BeanSession DEFAULT_SESSION = new 
BeanSession(DEFAULT, DEFAULT.createDefaultBeanSessionArgs().unmodifiable());
 
-       private final boolean
+       final boolean
                beansRequireDefaultConstructor,
                beansRequireSerializable,
                beansRequireSettersForGetters,
@@ -941,22 +494,22 @@ public class BeanContext extends Context {
 
                cp = cp.subset(new String[]{"Context","BeanContext"});
 
-               beansRequireDefaultConstructor = 
cp.getBoolean(BEAN_beansRequireDefaultConstructor).orElse(false);
-               beansRequireSerializable = 
cp.getBoolean(BEAN_beansRequireSerializable).orElse(false);
-               beansRequireSettersForGetters = 
cp.getBoolean(BEAN_beansRequireSettersForGetters).orElse(false);
-               beansRequireSomeProperties = ! 
cp.getBoolean(BEAN_disableBeansRequireSomeProperties).orElse(false);
-               beanMapPutReturnsOldValue = 
cp.getBoolean(BEAN_beanMapPutReturnsOldValue).orElse(false);
-               useEnumNames = cp.getBoolean(BEAN_useEnumNames).orElse(false);
-               useInterfaceProxies = ! 
cp.getBoolean(BEAN_disableInterfaceProxies).orElse(false);
-               ignoreUnknownBeanProperties = 
cp.getBoolean(BEAN_ignoreUnknownBeanProperties).orElse(false);
-               ignoreUnknownNullBeanProperties = ! 
cp.getBoolean(BEAN_disableIgnoreUnknownNullBeanProperties).orElse(false);
-               ignoreMissingSetters = ! 
cp.getBoolean(BEAN_disableIgnoreMissingSetters).orElse(false);
-               ignoreTransientFields = ! 
cp.getBoolean(BEAN_disableIgnoreTransientFields).orElse(false);
-               ignoreInvocationExceptionsOnGetters = 
cp.getBoolean(BEAN_ignoreInvocationExceptionsOnGetters).orElse(false);
-               ignoreInvocationExceptionsOnSetters = 
cp.getBoolean(BEAN_ignoreInvocationExceptionsOnSetters).orElse(false);
-               useJavaBeanIntrospector = 
cp.getBoolean(BEAN_useJavaBeanIntrospector).orElse(false);
-               sortProperties = 
cp.getBoolean(BEAN_sortProperties).orElse(false);
-               findFluentSetters = 
cp.getBoolean(BEAN_findFluentSetters).orElse(false);
+               beansRequireDefaultConstructor = 
builder.beansRequireDefaultConstructor;
+               beansRequireSerializable = builder.beansRequireSerializable;
+               beansRequireSettersForGetters = 
builder.beansRequireSettersForGetters;
+               beansRequireSomeProperties = ! 
builder.disableBeansRequireSomeProperties;
+               beanMapPutReturnsOldValue = builder.beanMapPutReturnsOldValue;
+               useEnumNames = builder.useEnumNames;
+               useInterfaceProxies = ! builder.disableInterfaceProxies;
+               ignoreUnknownBeanProperties = 
builder.ignoreUnknownBeanProperties;
+               ignoreUnknownNullBeanProperties = ! 
builder.disableIgnoreUnknownNullBeanProperties;
+               ignoreMissingSetters = ! builder.disableIgnoreMissingSetters;
+               ignoreTransientFields = ! builder.disableIgnoreTransientFields;
+               ignoreInvocationExceptionsOnGetters = 
builder.ignoreInvocationExceptionsOnGetters;
+               ignoreInvocationExceptionsOnSetters = 
builder.ignoreInvocationExceptionsOnSetters;
+               useJavaBeanIntrospector = builder.useJavaBeanIntrospector;
+               sortProperties = builder.sortProperties;
+               findFluentSetters = builder.findFluentSetters;
                typePropertyName = 
cp.getString(BEAN_typePropertyName).orElse("_type");
 
                beanConstructorVisibility = builder.beanConstructorVisibility;
@@ -1655,7 +1208,7 @@ public class BeanContext extends Context {
        /**
         * BeanMap.put() returns old property value.
         *
-        * @see #BEAN_beanMapPutReturnsOldValue
+        * @see BeanContextBuilder#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>.
@@ -1678,7 +1231,7 @@ public class BeanContext extends Context {
        /**
         * Beans require no-arg constructors.
         *
-        * @see #BEAN_beansRequireDefaultConstructor
+        * @see BeanContextBuilder#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.
@@ -1690,7 +1243,7 @@ public class BeanContext extends Context {
        /**
         * Beans require Serializable interface.
         *
-        * @see #BEAN_beansRequireSerializable
+        * @see BeanContextBuilder#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.
@@ -1702,7 +1255,7 @@ public class BeanContext extends Context {
        /**
         * Beans require setters for getters.
         *
-        * @see #BEAN_beansRequireSettersForGetters
+        * @see BeanContextBuilder#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.
@@ -1714,7 +1267,7 @@ public class BeanContext extends Context {
        /**
         * Beans require at least one property.
         *
-        * @see #BEAN_disableBeansRequireSomeProperties
+        * @see BeanContextBuilder#disableBeansRequireSomeProperties()
         * @return
         *      <jk>true</jk> if a Java class doesn't need to 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.
@@ -1740,7 +1293,7 @@ public class BeanContext extends Context {
         * <h5 class='section'>Description:</h5>
         * <p>
         *
-        * @see #BEAN_findFluentSetters
+        * @see BeanContextBuilder#findFluentSetters()
         * @return
         *      <jk>true</jk> if fluent setters are detected on beans.
         */
@@ -1751,7 +1304,7 @@ public class BeanContext extends Context {
        /**
         * Ignore invocation errors on getters.
         *
-        * @see #BEAN_ignoreInvocationExceptionsOnGetters
+        * @see BeanContextBuilder#ignoreInvocationExceptionsOnGetters()
         * @return
         *      <jk>true</jk> if errors thrown when calling bean getter methods 
are silently ignored.
         */
@@ -1762,7 +1315,7 @@ public class BeanContext extends Context {
        /**
         * Ignore invocation errors on setters.
         *
-        * @see #BEAN_ignoreInvocationExceptionsOnSetters
+        * @see BeanContextBuilder#ignoreInvocationExceptionsOnSetters()
         * @return
         *      <jk>true</jk> if errors thrown when calling bean setter methods 
are silently ignored.
         */
@@ -1773,7 +1326,7 @@ public class BeanContext extends Context {
        /**
         * Silently ignore missing setters.
         *
-        * @see #BEAN_disableIgnoreMissingSetters
+        * @see BeanContextBuilder#disableIgnoreMissingSetters()
         * @return
         *      <jk>true</jk> if trying to set a value on a bean property 
without a setter should throw a {@link BeanRuntimeException}.
         */
@@ -1782,9 +1335,9 @@ public class BeanContext extends Context {
        }
 
        /**
-        * Iignore transient fields.
+        * Ignore transient fields.
         *
-        * @see #BEAN_disableIgnoreTransientFields
+        * @see BeanContextBuilder#disableIgnoreTransientFields()
         * @return
         *      <jk>true</jk> if fields and methods marked as transient should 
not be ignored.
         */
@@ -1795,7 +1348,7 @@ public class BeanContext extends Context {
        /**
         * Ignore unknown properties.
         *
-        * @see #BEAN_ignoreUnknownBeanProperties
+        * @see BeanContextBuilder#ignoreUnknownBeanProperties()
         * @return
         *      <jk>true</jk> if trying to set a value on a non-existent bean 
property is silently ignored.
         *      <br>Otherwise, a {@code RuntimeException} is thrown.
@@ -1807,7 +1360,7 @@ public class BeanContext extends Context {
        /**
         * Ignore unknown properties with null values.
         *
-        * @see #BEAN_disableIgnoreUnknownNullBeanProperties
+        * @see BeanContextBuilder#disableIgnoreUnknownNullBeanProperties()
         * @return
         *      <jk>true</jk> if trying to set a <jk>null</jk> value on a 
non-existent bean property should throw a {@link BeanRuntimeException}.
         */
@@ -1873,7 +1426,7 @@ public class BeanContext extends Context {
        /**
         * Sort bean properties.
         *
-        * @see #BEAN_sortProperties
+        * @see BeanContextBuilder#sortProperties()
         * @return
         *      <jk>true</jk> if all bean properties will be serialized and 
access in alphabetical order.
         */
@@ -1884,7 +1437,7 @@ public class BeanContext extends Context {
        /**
         * Use enum names.
         *
-        * @see #BEAN_useEnumNames
+        * @see BeanContextBuilder#useEnumNames()
         * @return
         *      <jk>true</jk> if enums are always serialized by name, not using 
{@link Object#toString()}.
         */
@@ -1895,7 +1448,7 @@ public class BeanContext extends Context {
        /**
         * Use interface proxies.
         *
-        * @see #BEAN_disableInterfaceProxies
+        * @see BeanContextBuilder#disableInterfaceProxies()
         * @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.
@@ -1907,7 +1460,7 @@ public class BeanContext extends Context {
        /**
         * Use Java Introspector.
         *
-        * @see #BEAN_useJavaBeanIntrospector
+        * @see BeanContextBuilder#useJavaBeanIntrospector()
         * @return
         *      <jk>true</jk> if the built-in Java bean introspector should be 
used for bean introspection.
         */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
index 3cb6a17..a673681 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
@@ -67,6 +67,10 @@ public class BeanContextBuilder extends ContextBuilder {
 
        Visibility beanClassVisibility, beanConstructorVisibility, 
beanMethodVisibility, beanFieldVisibility;
        List<Class<?>> beanDictionary;
+       boolean disableBeansRequireSomeProperties, beanMapPutReturnsOldValue, 
beansRequireDefaultConstructor, beansRequireSerializable,
+               beansRequireSettersForGetters, disableIgnoreTransientFields, 
disableIgnoreUnknownNullBeanProperties, disableIgnoreMissingSetters,
+               disableInterfaceProxies, findFluentSetters, 
ignoreInvocationExceptionsOnGetters, ignoreInvocationExceptionsOnSetters,
+               ignoreUnknownBeanProperties, sortProperties, useEnumNames, 
useJavaBeanIntrospector;
 
        /**
         * Constructor.
@@ -75,11 +79,27 @@ public class BeanContextBuilder extends ContextBuilder {
         */
        protected BeanContextBuilder() {
                super();
-               beanClassVisibility = env("RestContext.beanClassVisibility", 
PUBLIC);
-               beanConstructorVisibility = 
env("RestContext.beanConstructorVisibility", PUBLIC);
-               beanMethodVisibility = env("RestContext.beanMethodVisibility", 
PUBLIC);
-               beanFieldVisibility = env("RestContext.beanFieldVisibility", 
PUBLIC);
+               beanClassVisibility = env("BeanContext.beanClassVisibility", 
PUBLIC);
+               beanConstructorVisibility = 
env("BeanContext.beanConstructorVisibility", PUBLIC);
+               beanMethodVisibility = env("BeanContext.beanMethodVisibility", 
PUBLIC);
+               beanFieldVisibility = env("BeanContext.beanFieldVisibility", 
PUBLIC);
                beanDictionary = null;
+               disableBeansRequireSomeProperties = 
env("BeanContext.disableBeansRequireSomeProperties", false);
+               beanMapPutReturnsOldValue = 
env("BeanContext.beanMapPutReturnsOldValue", false);
+               beansRequireDefaultConstructor = 
env("BeanContext.beansRequireDefaultConstructor", false);
+               beansRequireSerializable = 
env("BeanContext.beansRequireSerializable", false);
+               beansRequireSettersForGetters = 
env("BeanContext.beansRequireSettersForGetters", false);
+               disableIgnoreTransientFields = 
env("BeanContext.disableIgnoreTransientFields", false);
+               disableIgnoreUnknownNullBeanProperties = 
env("BeanContext.disableIgnoreUnknownNullBeanProperties", false);
+               disableIgnoreMissingSetters = 
env("BeanContext.disableIgnoreMissingSetters", false);
+               disableInterfaceProxies = 
env("BeanContext.disableInterfaceProxies", false);
+               findFluentSetters = env("BeanContext.findFluentSetters", false);
+               ignoreInvocationExceptionsOnGetters = 
env("BeanContext.ignoreInvocationExceptionsOnGetters", false);
+               ignoreInvocationExceptionsOnSetters = 
env("BeanContext.ignoreInvocationExceptionsOnSetters", false);
+               ignoreUnknownBeanProperties = 
env("BeanContext.ignoreUnknownBeanProperties", false);
+               sortProperties = env("BeanContext.sortProperties", false);
+               useEnumNames = env("BeanContext.useEnumNames", false);
+               useJavaBeanIntrospector = 
env("BeanContext.useJavaBeanIntrospector", false);
        }
 
        /**
@@ -94,6 +114,22 @@ public class BeanContextBuilder extends ContextBuilder {
                beanMethodVisibility = copyFrom.beanMethodVisibility;
                beanFieldVisibility = copyFrom.beanFieldVisibility;
                beanDictionary = copyFrom.beanDictionary.isEmpty() ? null : new 
ArrayList<>(copyFrom.beanDictionary);
+               disableBeansRequireSomeProperties = ! 
copyFrom.beansRequireSomeProperties;
+               beanMapPutReturnsOldValue = copyFrom.beanMapPutReturnsOldValue;
+               beansRequireDefaultConstructor = 
copyFrom.beansRequireDefaultConstructor;
+               beansRequireSerializable = copyFrom.beansRequireSerializable;
+               beansRequireSettersForGetters = 
copyFrom.beansRequireSettersForGetters;
+               disableIgnoreTransientFields = ! copyFrom.ignoreTransientFields;
+               disableIgnoreUnknownNullBeanProperties = ! 
copyFrom.ignoreUnknownNullBeanProperties;
+               disableIgnoreMissingSetters = ! copyFrom.ignoreMissingSetters;
+               disableInterfaceProxies = ! copyFrom.useInterfaceProxies;
+               findFluentSetters = copyFrom.findFluentSetters;
+               ignoreInvocationExceptionsOnGetters = 
copyFrom.ignoreInvocationExceptionsOnGetters;
+               ignoreInvocationExceptionsOnSetters = 
copyFrom.ignoreInvocationExceptionsOnSetters;
+               ignoreUnknownBeanProperties = 
copyFrom.ignoreUnknownBeanProperties;
+               sortProperties = copyFrom.sortProperties;
+               useEnumNames = copyFrom.useEnumNames;
+               useJavaBeanIntrospector = copyFrom.useJavaBeanIntrospector;
        }
 
        /**
@@ -108,6 +144,22 @@ public class BeanContextBuilder extends ContextBuilder {
                beanMethodVisibility = copyFrom.beanMethodVisibility;
                beanFieldVisibility = copyFrom.beanFieldVisibility;
                beanDictionary = copyFrom.beanDictionary == null ? null : new 
ArrayList<>(copyFrom.beanDictionary);
+               disableBeansRequireSomeProperties = 
copyFrom.disableBeansRequireSomeProperties;
+               beanMapPutReturnsOldValue = copyFrom.beanMapPutReturnsOldValue;
+               beansRequireDefaultConstructor = 
copyFrom.beansRequireDefaultConstructor;
+               beansRequireSerializable = copyFrom.beansRequireSerializable;
+               beansRequireSettersForGetters = 
copyFrom.beansRequireSettersForGetters;
+               disableIgnoreTransientFields = 
copyFrom.disableIgnoreTransientFields;
+               disableIgnoreUnknownNullBeanProperties = 
copyFrom.disableIgnoreUnknownNullBeanProperties;
+               disableIgnoreMissingSetters = 
copyFrom.disableIgnoreMissingSetters;
+               disableInterfaceProxies = copyFrom.disableInterfaceProxies;
+               findFluentSetters = copyFrom.findFluentSetters;
+               ignoreInvocationExceptionsOnGetters = 
copyFrom.ignoreInvocationExceptionsOnGetters;
+               ignoreInvocationExceptionsOnSetters = 
copyFrom.ignoreInvocationExceptionsOnSetters;
+               ignoreUnknownBeanProperties = 
copyFrom.ignoreUnknownBeanProperties;
+               sortProperties = copyFrom.sortProperties;
+               useEnumNames = copyFrom.useEnumNames;
+               useJavaBeanIntrospector = copyFrom.useJavaBeanIntrospector;
        }
 
        @Override /* ContextBuilder */
@@ -119,17 +171,32 @@ public class BeanContextBuilder extends ContextBuilder {
        public BeanContext build() {
                ContextProperties cp = getContextProperties();
                cp = cp.subset(new String[]{"Context","BeanContext"});
-               HashKey key = HashKey
-                       .create()
-                       .add(
-                               cp, 
-                               beanClassVisibility, 
-                               beanConstructorVisibility, 
-                               beanMethodVisibility, 
-                               beanFieldVisibility, 
-                               beanDictionary
+               HashKey key = HashKey.of(
+                       cp,
+                       beanClassVisibility,
+                       beanConstructorVisibility,
+                       beanMethodVisibility,
+                       beanFieldVisibility,
+                       beanDictionary,
+                       integer(
+                               disableBeansRequireSomeProperties,
+                               beanMapPutReturnsOldValue,
+                               beansRequireDefaultConstructor,
+                               beansRequireSerializable,
+                               beansRequireSettersForGetters,
+                               disableIgnoreTransientFields,
+                               disableIgnoreUnknownNullBeanProperties,
+                               disableIgnoreMissingSetters,
+                               disableInterfaceProxies,
+                               findFluentSetters,
+                               ignoreInvocationExceptionsOnGetters,
+                               ignoreInvocationExceptionsOnSetters,
+                               ignoreUnknownBeanProperties,
+                               sortProperties,
+                               useEnumNames,
+                               useJavaBeanIntrospector
                        )
-                       .build();
+               );
                BeanContext bc = CACHE.get(key);
                if (bc == null) {
                        bc = new BeanContext(this);
@@ -138,6 +205,13 @@ public class BeanContextBuilder extends ContextBuilder {
                return bc;
        }
 
+       private int integer(boolean...values) {
+               int n = 0;
+               for (boolean b : values)
+                       n = (n << 1) | (b ? 1 : 0);
+               return n;
+       }
+
        
//-----------------------------------------------------------------------------------------------------------------
        // Properties
        
//-----------------------------------------------------------------------------------------------------------------
@@ -375,14 +449,25 @@ public class BeanContextBuilder extends ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#beanMapPutReturnsOldValue()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_beanMapPutReturnsOldValue}
         * </ul>
         *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public BeanContextBuilder beanMapPutReturnsOldValue() {
-               return set(BEAN_beanMapPutReturnsOldValue);
+               return beanMapPutReturnsOldValue(true);
+       }
+
+       /**
+        * Same as {@link #beanMapPutReturnsOldValue()} but allows you to 
explicitly specify the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public BeanContextBuilder beanMapPutReturnsOldValue(boolean value) {
+               beanMapPutReturnsOldValue = value;
+               return this;
        }
 
        /**
@@ -476,14 +561,25 @@ public class BeanContextBuilder extends ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#beansRequireDefaultConstructor()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_beansRequireDefaultConstructor}
         * </ul>
         *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public BeanContextBuilder beansRequireDefaultConstructor() {
-               return set(BEAN_beansRequireDefaultConstructor);
+               return beansRequireDefaultConstructor(true);
+       }
+
+       /**
+        * Same as {@link #beansRequireDefaultConstructor()} but allows you to 
explicitly specify the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public BeanContextBuilder beansRequireDefaultConstructor(boolean value) 
{
+               beansRequireDefaultConstructor = value;
+               return this;
        }
 
        /**
@@ -524,14 +620,25 @@ public class BeanContextBuilder extends ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#beansRequireSerializable()}
-        *      <li class='jf'>{@link BeanContext#BEAN_beansRequireSerializable}
         * </ul>
         *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public BeanContextBuilder beansRequireSerializable() {
-               return set(BEAN_beansRequireSerializable);
+               return beansRequireSerializable(true);
+       }
+
+       /**
+        * Same as {@link #beansRequireSerializable()} but allows you to 
explicitly specify the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public BeanContextBuilder beansRequireSerializable(boolean value) {
+               beansRequireSerializable = value;
+               return this;
        }
 
        /**
@@ -568,16 +675,23 @@ public class BeanContextBuilder extends ContextBuilder {
         *      <li>The {@link BeanIgnore @BeanIgnore} annotation can also be 
used on getters to ignore them as bean properties.
         * </ul>
         *
-        * <ul class='seealso'>
-        *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#beansRequireSettersForGetters()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_beansRequireSettersForGetters}
-        * </ul>
-        *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public BeanContextBuilder beansRequireSettersForGetters() {
-               return set(BEAN_beansRequireSettersForGetters);
+               return beansRequireSettersForGetters(true);
+       }
+
+       /**
+        * Same as {@link #beansRequireSettersForGetters()} but allows you to 
explicitly specify the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public BeanContextBuilder beansRequireSettersForGetters(boolean value) {
+               beansRequireSettersForGetters = value;
+               return this;
        }
 
        /**
@@ -613,14 +727,25 @@ public class BeanContextBuilder extends ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#disableBeansRequireSomeProperties()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_disableBeansRequireSomeProperties}
         * </ul>
         *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public BeanContextBuilder disableBeansRequireSomeProperties() {
-               return set(BEAN_disableBeansRequireSomeProperties);
+               return disableBeansRequireSomeProperties(true);
+       }
+
+       /**
+        * Same as {@link #disableBeansRequireSomeProperties()} but allows you 
to explicitly specify the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public BeanContextBuilder disableBeansRequireSomeProperties(boolean 
value) {
+               disableBeansRequireSomeProperties = value;
+               return this;
        }
 
        /**
@@ -1614,14 +1739,25 @@ public class BeanContextBuilder extends ContextBuilder {
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.Bean#findFluentSetters()}
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#findFluentSetters()}
-        *      <li class='jf'>{@link BeanContext#BEAN_findFluentSetters}
         * </ul>
         *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public BeanContextBuilder findFluentSetters() {
-               return set(BEAN_findFluentSetters);
+               return findFluentSetters(true);
+       }
+
+       /**
+        * Same as {@link #findFluentSetters()} but allows you to explicitly 
specify the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public BeanContextBuilder findFluentSetters(boolean value) {
+               findFluentSetters = value;
+               return this;
        }
 
        /**
@@ -1653,7 +1789,7 @@ public class BeanContextBuilder extends ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link Bean#findFluentSetters()}
-        *      <li class='jf'>{@link BeanContext#BEAN_findFluentSetters}
+        *      <li class='jm'>{@link #findFluentSetters()}
         * </ul>
         *
         * @param on The class that this applies to.
@@ -1692,14 +1828,25 @@ public class BeanContextBuilder extends ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#ignoreInvocationExceptionsOnGetters()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_ignoreInvocationExceptionsOnGetters}
         * </ul>
         *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public BeanContextBuilder ignoreInvocationExceptionsOnGetters() {
-               return set(BEAN_ignoreInvocationExceptionsOnGetters);
+               return ignoreInvocationExceptionsOnGetters(true);
+       }
+
+       /**
+        * Same as {@link #ignoreInvocationExceptionsOnGetters()} but allows 
you to explicitly specify the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public BeanContextBuilder ignoreInvocationExceptionsOnGetters(boolean 
value) {
+               ignoreInvocationExceptionsOnGetters = value;
+               return this;
        }
 
        /**
@@ -1730,14 +1877,25 @@ public class BeanContextBuilder extends ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#ignoreInvocationExceptionsOnSetters()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_ignoreInvocationExceptionsOnSetters}
         * </ul>
         *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public BeanContextBuilder ignoreInvocationExceptionsOnSetters() {
-               return set(BEAN_ignoreInvocationExceptionsOnSetters);
+               return ignoreInvocationExceptionsOnSetters(true);
+       }
+
+       /**
+        * Same as {@link #ignoreInvocationExceptionsOnSetters()} but allows 
you to explicitly specify the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public BeanContextBuilder ignoreInvocationExceptionsOnSetters(boolean 
value) {
+               ignoreInvocationExceptionsOnSetters = value;
+               return this;
        }
 
        /**
@@ -1772,14 +1930,25 @@ public class BeanContextBuilder extends ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#disableIgnoreMissingSetters()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_disableIgnoreMissingSetters}
         * </ul>
         *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public BeanContextBuilder disableIgnoreMissingSetters() {
-               return set(BEAN_disableIgnoreMissingSetters);
+               return disableIgnoreMissingSetters(true);
+       }
+
+       /**
+        * Same as {@link #disableIgnoreMissingSetters()} but allows you to 
explicitly specify the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public BeanContextBuilder disableIgnoreMissingSetters(boolean value) {
+               disableIgnoreMissingSetters = value;
+               return this;
        }
 
        /**
@@ -1811,14 +1980,25 @@ public class BeanContextBuilder extends ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#disableIgnoreTransientFields()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_disableIgnoreTransientFields}
         * </ul>
         *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public BeanContextBuilder disableIgnoreTransientFields() {
-               return set(BEAN_disableIgnoreTransientFields);
+               return disableIgnoreTransientFields(true);
+       }
+
+       /**
+        * Same as {@link #disableIgnoreTransientFields()} but allows you to 
explicitly specify the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public BeanContextBuilder disableIgnoreTransientFields(boolean value) {
+               disableIgnoreTransientFields = value;
+               return this;
        }
 
        /**
@@ -1847,14 +2027,25 @@ public class BeanContextBuilder extends ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#ignoreUnknownBeanProperties()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_ignoreUnknownBeanProperties}
         * </ul>
         *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public BeanContextBuilder ignoreUnknownBeanProperties() {
-               return set(BEAN_ignoreUnknownBeanProperties);
+               return ignoreUnknownBeanProperties(true);
+       }
+
+       /**
+        * Same as {@link #ignoreUnknownBeanProperties()} but allows you to 
explicitly specify the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public BeanContextBuilder ignoreUnknownBeanProperties(boolean value) {
+               ignoreUnknownBeanProperties = value;
+               return this;
        }
 
        /**
@@ -1883,14 +2074,25 @@ public class BeanContextBuilder extends ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#disableIgnoreUnknownNullBeanProperties()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_disableIgnoreUnknownNullBeanProperties}
         * </ul>
         *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public BeanContextBuilder disableIgnoreUnknownNullBeanProperties() {
-               return set(BEAN_disableIgnoreUnknownNullBeanProperties);
+               return disableIgnoreUnknownNullBeanProperties(true);
+       }
+
+       /**
+        * Same as {@link #disableIgnoreUnknownNullBeanProperties()} but allows 
you to explicitly specify the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public BeanContextBuilder 
disableIgnoreUnknownNullBeanProperties(boolean value) {
+               disableIgnoreUnknownNullBeanProperties = value;
+               return this;
        }
 
        /**
@@ -2428,15 +2630,24 @@ public class BeanContextBuilder extends ContextBuilder {
         *      <li>The {@link Bean#sort() @Bean.sort()} annotation can also be 
used to sort properties on just a single class.
         * </ul>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link BeanContext#BEAN_sortProperties}
-        * </ul>
-        *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public BeanContextBuilder sortProperties() {
-               return set(BEAN_sortProperties);
+               sortProperties = true;
+               return sortProperties(true);
+       }
+
+       /**
+        * Same as {@link #sortProperties()} but allows you to explicitly 
specify the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public BeanContextBuilder sortProperties(boolean value) {
+               sortProperties = value;
+               return this;
        }
 
        /**
@@ -2466,7 +2677,7 @@ public class BeanContextBuilder extends ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link Bean#sort() Bean(sort)}
-        *      <li class='jf'>{@link BeanContext#BEAN_sortProperties}
+        *      <li class='jm'>{@link #sortProperties()}
         * </ul>
         *
         * @param on The bean classes to sort properties on.
@@ -2847,15 +3058,23 @@ public class BeanContextBuilder extends ContextBuilder {
         *      }
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link BeanContext#BEAN_useEnumNames}
-        * </ul>
-        *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public BeanContextBuilder useEnumNames() {
-               return set(BEAN_useEnumNames);
+               return useEnumNames(true);
+       }
+
+       /**
+        * Same as {@link #useEnumNames()} but allows you to explicitly specify 
the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public BeanContextBuilder useEnumNames(boolean value) {
+               useEnumNames = value;
+               return this;
        }
 
        /**
@@ -2868,14 +3087,25 @@ public class BeanContextBuilder extends ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#disableInterfaceProxies()}
-        *      <li class='jf'>{@link BeanContext#BEAN_disableInterfaceProxies}
         * </ul>
         *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public BeanContextBuilder disableInterfaceProxies() {
-               return set(BEAN_disableInterfaceProxies);
+               return disableInterfaceProxies(true);
+       }
+
+       /**
+        * Same as {@link #disableInterfaceProxies()} but allows you to 
explicitly specify the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public BeanContextBuilder disableInterfaceProxies(boolean value) {
+               disableInterfaceProxies = value;
+               return this;
        }
 
        /**
@@ -2894,15 +3124,23 @@ public class BeanContextBuilder extends ContextBuilder {
         *              .build();
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link BeanContext#BEAN_useJavaBeanIntrospector}
-        * </ul>
-        *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public BeanContextBuilder useJavaBeanIntrospector() {
-               return set(BEAN_useJavaBeanIntrospector);
+               return useJavaBeanIntrospector(true);
+       }
+
+       /**
+        * Same as {@link #useJavaBeanIntrospector()} but allows you to 
explicitly specify the value.
+        *
+        * @param value The value for this setting.
+        * @return This object.
+        */
+       @FluentSetter
+       public BeanContextBuilder useJavaBeanIntrospector(boolean value) {
+               useJavaBeanIntrospector = value;
+               return this;
        }
 
        // <FluentSetters>
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextableBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextableBuilder.java
index 154cf55..e6c2842 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextableBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextableBuilder.java
@@ -369,7 +369,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#beanMapPutReturnsOldValue()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_beanMapPutReturnsOldValue}
+        *      <li class='jm'>{@link 
BeanContextBuilder#beanMapPutReturnsOldValue()}
         * </ul>
         *
         * @return This object (for method chaining).
@@ -471,7 +471,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#beansRequireDefaultConstructor()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_beansRequireDefaultConstructor}
+        *      <li class='jm'>{@link 
BeanContextBuilder#beansRequireDefaultConstructor()}
         * </ul>
         *
         * @return This object (for method chaining).
@@ -520,7 +520,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#beansRequireSerializable()}
-        *      <li class='jf'>{@link BeanContext#BEAN_beansRequireSerializable}
+        *      <li class='jm'>{@link 
BeanContextBuilder#beansRequireSerializable()}
         * </ul>
         *
         * @return This object (for method chaining).
@@ -567,7 +567,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#beansRequireSettersForGetters()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_beansRequireSettersForGetters}
+        *      <li class='jm'>{@link 
BeanContextBuilder#beansRequireSettersForGetters()}
         * </ul>
         *
         * @return This object (for method chaining).
@@ -611,7 +611,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#disableBeansRequireSomeProperties()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_disableBeansRequireSomeProperties}
+        *      <li class='jm'>{@link 
BeanContextBuilder#disableBeansRequireSomeProperties()}
         * </ul>
         *
         * @return This object (for method chaining).
@@ -1597,7 +1597,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.Bean#findFluentSetters()}
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#findFluentSetters()}
-        *      <li class='jf'>{@link BeanContext#BEAN_findFluentSetters}
+        *      <li class='jm'>{@link BeanContextBuilder#findFluentSetters()}
         * </ul>
         *
         * @return This object (for method chaining).
@@ -1637,7 +1637,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link Bean#findFluentSetters()}
-        *      <li class='jf'>{@link BeanContext#BEAN_findFluentSetters}
+        *      <li class='jm'>{@link BeanContextBuilder#findFluentSetters()}
         * </ul>
         *
         * @param on The class that this applies to.
@@ -1677,7 +1677,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#ignoreInvocationExceptionsOnGetters()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_ignoreInvocationExceptionsOnGetters}
+        *      <li class='jm'>{@link 
BeanContextBuilder#ignoreInvocationExceptionsOnGetters()}
         * </ul>
         *
         * @return This object (for method chaining).
@@ -1716,7 +1716,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#ignoreInvocationExceptionsOnSetters()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_ignoreInvocationExceptionsOnSetters}
+        *      <li class='jm'>{@link 
BeanContextBuilder#ignoreInvocationExceptionsOnSetters()}
         * </ul>
         *
         * @return This object (for method chaining).
@@ -1759,7 +1759,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#disableIgnoreMissingSetters()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_disableIgnoreMissingSetters}
+        *      <li class='jm'>{@link 
BeanContextBuilder#disableIgnoreMissingSetters()}
         * </ul>
         *
         * @return This object (for method chaining).
@@ -1799,7 +1799,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#disableIgnoreTransientFields()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_disableIgnoreTransientFields}
+        *      <li class='jm'>{@link 
BeanContextBuilder#disableIgnoreTransientFields()}
         * </ul>
         *
         * @return This object (for method chaining).
@@ -1836,7 +1836,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#ignoreUnknownBeanProperties()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_ignoreUnknownBeanProperties}
+        *      <li class='jm'>{@link 
BeanContextBuilder#ignoreUnknownBeanProperties()}
         * </ul>
         *
         * @return This object (for method chaining).
@@ -1873,7 +1873,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#disableIgnoreUnknownNullBeanProperties()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_disableIgnoreUnknownNullBeanProperties}
+        *      <li class='jm'>{@link 
BeanContextBuilder#disableIgnoreUnknownNullBeanProperties()}
         * </ul>
         *
         * @return This object (for method chaining).
@@ -2414,7 +2414,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link BeanContext#BEAN_sortProperties}
+        *      <li class='jm'>{@link BeanContextBuilder#sortProperties()}
         * </ul>
         *
         * @return This object (for method chaining).
@@ -2452,7 +2452,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link Bean#sort() Bean(sort)}
-        *      <li class='jf'>{@link BeanContext#BEAN_sortProperties}
+        *      <li class='jm'>{@link BeanContextBuilder#sortProperties()}
         * </ul>
         *
         * @param on The bean classes to sort properties on.
@@ -2839,7 +2839,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         * </p>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link BeanContext#BEAN_useEnumNames}
+        *      <li class='jm'>{@link BeanContextBuilder#useEnumNames()}
         * </ul>
         *
         * @return This object (for method chaining).
@@ -2860,7 +2860,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#disableInterfaceProxies()}
-        *      <li class='jf'>{@link BeanContext#BEAN_disableInterfaceProxies}
+        *      <li class='jm'>{@link 
BeanContextBuilder#disableInterfaceProxies()}
         * </ul>
         *
         * @return This object (for method chaining).
@@ -2888,7 +2888,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         * </p>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link BeanContext#BEAN_useJavaBeanIntrospector}
+        *      <li class='jmf'>{@link 
BeanContextBuilder#useJavaBeanIntrospector()}
         * </ul>
         *
         * @return This object (for method chaining).
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilterBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilterBuilder.java
index 36e5e6f..ff9c198 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilterBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilterBuilder.java
@@ -294,7 +294,7 @@ public class BeanFilterBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link Bean#sort()}
-        *      <li class='jf'>{@link BeanContext#BEAN_sortProperties}
+        *      <li class='jf'>{@link BeanContextBuilder#sortProperties()}
         * </ul>
         *
         * @param value
@@ -315,7 +315,7 @@ public class BeanFilterBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link Bean#sort()}
-        *      <li class='jf'>{@link BeanContext#BEAN_sortProperties}
+        *      <li class='jf'>{@link BeanContextBuilder#sortProperties()}
         * </ul>
         *
         * @return This object (for method chaining).
@@ -352,7 +352,7 @@ public class BeanFilterBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link Bean#findFluentSetters()}
-        *      <li class='jf'>{@link BeanContext#BEAN_findFluentSetters}
+        *      <li class='jm'>{@link BeanContextBuilder#findFluentSetters()}
         * </ul>
         *
         * @return This object (for method chaining).
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 e29386f..a25f948 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
@@ -1294,7 +1294,7 @@ public class BeanSession extends Session {
        /**
         * Configuration property:  BeanMap.put() returns old property value.
         *
-        * @see BeanContext#BEAN_beanMapPutReturnsOldValue
+        * @see BeanContextBuilder#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>.
@@ -1317,7 +1317,7 @@ public class BeanSession extends Session {
        /**
         * Configuration property:  Beans require no-arg constructors.
         *
-        * @see BeanContext#BEAN_beansRequireDefaultConstructor
+        * @see BeanContextBuilder#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.
@@ -1329,7 +1329,7 @@ public class BeanSession extends Session {
        /**
         * Configuration property:  Beans require Serializable interface.
         *
-        * @see BeanContext#BEAN_beansRequireSerializable
+        * @see BeanContextBuilder#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.
@@ -1341,7 +1341,7 @@ public class BeanSession extends Session {
        /**
         * Configuration property:  Beans require setters for getters.
         *
-        * @see BeanContext#BEAN_beansRequireSettersForGetters
+        * @see BeanContextBuilder#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.
@@ -1353,7 +1353,7 @@ public class BeanSession extends Session {
        /**
         * Configuration property:  Beans require at least one property.
         *
-        * @see BeanContext#BEAN_disableBeansRequireSomeProperties
+        * @see BeanContextBuilder#disableBeansRequireSomeProperties()
         * @return
         *      <jk>true</jk> if a Java class doesn't need to 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.
@@ -1379,7 +1379,7 @@ public class BeanSession extends Session {
         * <h5 class='section'>Description:</h5>
         * <p>
         *
-        * @see BeanContext#BEAN_findFluentSetters
+        * @see BeanContextBuilder#findFluentSetters()
         * @return
         *      <jk>true</jk> if fluent setters are detected on beans.
         */
@@ -1390,7 +1390,7 @@ public class BeanSession extends Session {
        /**
         * Configuration property:  Ignore invocation errors on getters.
         *
-        * @see BeanContext#BEAN_ignoreInvocationExceptionsOnGetters
+        * @see BeanContextBuilder#ignoreInvocationExceptionsOnGetters()
         * @return
         *      <jk>true</jk> if errors thrown when calling bean getter methods 
are silently ignored.
         */
@@ -1401,7 +1401,7 @@ public class BeanSession extends Session {
        /**
         * Configuration property:  Ignore invocation errors on setters.
         *
-        * @see BeanContext#BEAN_ignoreInvocationExceptionsOnSetters
+        * @see BeanContextBuilder#ignoreInvocationExceptionsOnSetters()
         * @return
         *      <jk>true</jk> if errors thrown when calling bean setter methods 
are silently ignored.
         */
@@ -1412,7 +1412,7 @@ public class BeanSession extends Session {
        /**
         * Configuration property:  Silently ignore missing setters.
         *
-        * @see BeanContext#BEAN_disableIgnoreMissingSetters
+        * @see BeanContextBuilder#disableIgnoreMissingSetters()
         * @return
         *      <jk>true</jk> if trying to set a value on a bean property 
without a setter should throw a {@link BeanRuntimeException}.
         */
@@ -1423,7 +1423,7 @@ public class BeanSession extends Session {
        /**
         * Configuration property:  Ignore unknown properties.
         *
-        * @see BeanContext#BEAN_ignoreUnknownBeanProperties
+        * @see BeanContextBuilder#ignoreUnknownBeanProperties()
         * @return
         *      <jk>true</jk> if trying to set a value on a non-existent bean 
property is silently ignored.
         *      <br>Otherwise, a {@code RuntimeException} is thrown.
@@ -1435,7 +1435,7 @@ public class BeanSession extends Session {
        /**
         * Configuration property:  Ignore unknown properties with null values.
         *
-        * @see BeanContext#BEAN_disableIgnoreUnknownNullBeanProperties
+        * @see BeanContextBuilder#disableIgnoreUnknownNullBeanProperties()
         * @return
         *      <jk>true</jk> if trying to set a <jk>null</jk> value on a 
non-existent bean property should not throw a {@link BeanRuntimeException}.
         */
@@ -1490,7 +1490,7 @@ public class BeanSession extends Session {
        /**
         * Configuration property:  Sort bean properties.
         *
-        * @see BeanContext#BEAN_sortProperties
+        * @see BeanContextBuilder#sortProperties()
         * @return
         *      <jk>true</jk> if all bean properties will be serialized and 
access in alphabetical order.
         */
@@ -1548,7 +1548,7 @@ public class BeanSession extends Session {
        /**
         * Configuration property:  Use enum names.
         *
-        * @see BeanContext#BEAN_useEnumNames
+        * @see BeanContextBuilder#useEnumNames()
         * @return
         *      <jk>true</jk> if enums are always serialized by name, not using 
{@link Object#toString()}.
         */
@@ -1559,7 +1559,7 @@ public class BeanSession extends Session {
        /**
         * Configuration property:  Use interface proxies.
         *
-        * @see BeanContext#BEAN_disableInterfaceProxies
+        * @see BeanContextBuilder#disableInterfaceProxies()
         * @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.
@@ -1571,7 +1571,7 @@ public class BeanSession extends Session {
        /**
         * Configuration property:  Use Java Introspector.
         *
-        * @see BeanContext#BEAN_useJavaBeanIntrospector
+        * @see BeanContextBuilder#useJavaBeanIntrospector()
         * @return
         *      <jk>true</jk> if the built-in Java bean introspector should be 
used for bean introspection.
         */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java
index 1241cbf..7a0309a 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java
@@ -52,10 +52,10 @@ public @interface Bean {
         * The list of classes that make up the bean dictionary for all 
properties in this class and all subclasses.
         *
         * <ul class='seealso'>
-        *      <li class='ja'>{@link 
org.apache.juneau.annotation.Beanp#dictionary()}
-        *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#dictionary()}
-        *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#dictionary_replace()}
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#beanDictionary(Class...)}
+        *      <li class='ja'>{@link Beanp#dictionary()}
+        *      <li class='ja'>{@link BeanConfig#dictionary()}
+        *      <li class='ja'>{@link BeanConfig#dictionary_replace()}
+        *      <li class='jm'>{@link 
BeanContextBuilder#beanDictionary(Class...)}
         * </ul>
         */
        Class<?>[] dictionary() default {};
@@ -149,9 +149,8 @@ public @interface Bean {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#findFluentSetters()}
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#findFluentSetters()}
-        *      <li class='jf'>{@link BeanContext#BEAN_findFluentSetters}
+        *      <li class='ja'>{@link BeanConfig#findFluentSetters()}
+        *      <li class='jm'>{@link BeanContextBuilder#findFluentSetters()}
         * </ul>
         */
        boolean findFluentSetters() default false;
@@ -373,7 +372,7 @@ public @interface Bean {
         * </p>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link BeanContext#BEAN_sortProperties}
+        *      <li class='jm'>{@link BeanContextBuilder#sortProperties()}
         * </ul>
         */
        boolean sort() default false;
@@ -446,9 +445,8 @@ public @interface Bean {
         * </p>
         *
         * <ul class='seealso'>
-        *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#typePropertyName()}
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#typePropertyName(String)}
-        *      <li class='jf'>{@link BeanContext#BEAN_typePropertyName}
+        *      <li class='ja'>{@link BeanConfig#typePropertyName()}
+        *      <li class='jm'>{@link 
BeanContextBuilder#typePropertyName(String)}
         * </ul>
         */
        String typePropertyName() default "";
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java
index 841b0e8..914589f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java
@@ -76,7 +76,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#beanClassVisibility(Visibility)}
+        *      <li class='jm'>{@link 
BeanContextBuilder#beanClassVisibility(Visibility)}
         * </ul>
         */
        String beanClassVisibility() default "";
@@ -106,7 +106,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#beanConstructorVisibility(Visibility)}
+        *      <li class='jm'>{@link 
BeanContextBuilder#beanConstructorVisibility(Visibility)}
         * </ul>
         */
        String beanConstructorVisibility() default "";
@@ -136,7 +136,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#beanFieldVisibility(Visibility)}
+        *      <li class='jm'>{@link 
BeanContextBuilder#beanFieldVisibility(Visibility)}
         * </ul>
         */
        String beanFieldVisibility() default "";
@@ -161,8 +161,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#beanMapPutReturnsOldValue()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_beanMapPutReturnsOldValue}
+        *      <li class='jm'>{@link 
BeanContextBuilder#beanMapPutReturnsOldValue()}
         * </ul>
         */
        String beanMapPutReturnsOldValue() default "";
@@ -192,7 +191,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#beanMethodVisibility(Visibility)}
+        *      <li class='jm'>{@link 
BeanContextBuilder#beanMethodVisibility(Visibility)}
         * </ul>
         */
        String beanMethodVisibility() default "";
@@ -218,8 +217,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#beansRequireDefaultConstructor()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_beansRequireDefaultConstructor}
+        *      <li class='jm'>{@link 
BeanContextBuilder#beansRequireDefaultConstructor()}
         * </ul>
         */
        String beansRequireDefaultConstructor() default "";
@@ -245,8 +243,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#beansRequireSerializable()}
-        *      <li class='jf'>{@link BeanContext#BEAN_beansRequireSerializable}
+        *      <li class='jm'>{@link 
BeanContextBuilder#beansRequireSerializable()}
         * </ul>
         */
        String beansRequireSerializable() default "";
@@ -270,8 +267,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#beansRequireSettersForGetters()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_beansRequireSettersForGetters}
+        *      <li class='jm'>{@link 
BeanContextBuilder#beansRequireSettersForGetters()}
         * </ul>
         */
        String beansRequireSettersForGetters() default "";
@@ -295,8 +291,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#disableBeansRequireSomeProperties()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_disableBeansRequireSomeProperties}
+        *      <li class='jm'>{@link 
BeanContextBuilder#disableBeansRequireSomeProperties()}
         * </ul>
         */
        String disableBeansRequireSomeProperties() default "";
@@ -316,9 +311,8 @@ public @interface BeanConfig {
         * </ul>
 
         * <ul class='seealso'>
-        *      <li class='ja'>{@link 
org.apache.juneau.annotation.Bean#typePropertyName()}
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#typePropertyName(String)}
-        *      <li class='jf'>{@link BeanContext#BEAN_typePropertyName}
+        *      <li class='ja'>{@link Bean#typePropertyName()}
+        *      <li class='jm'>{@link 
BeanContextBuilder#typePropertyName(String)}
         * </ul>
         */
        String typePropertyName() default "";
@@ -356,8 +350,8 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link org.apache.juneau.ContextBuilder#debug()}
-        *      <li class='jm'>{@link 
org.apache.juneau.SessionArgs#debug(Boolean)}
+        *      <li class='jm'>{@link ContextBuilder#debug()}
+        *      <li class='jm'>{@link SessionArgs#debug(Boolean)}
         *      <li class='jf'>{@link Context#CONTEXT_debug}
         * </ul>
         */
@@ -380,10 +374,10 @@ public @interface BeanConfig {
         * This setting tells the parsers which classes to look for when 
resolving <js>"_type"</js> attributes.
         *
         * <ul class='seealso'>
-        *      <li class='ja'>{@link 
org.apache.juneau.annotation.Bean#dictionary()}
-        *      <li class='ja'>{@link 
org.apache.juneau.annotation.Beanp#dictionary()}
-        *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#dictionary_replace()}
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#beanDictionary(Class...)}
+        *      <li class='ja'>{@link Bean#dictionary()}
+        *      <li class='ja'>{@link Beanp#dictionary()}
+        *      <li class='ja'>{@link BeanConfig#dictionary_replace()}
+        *      <li class='jm'>{@link 
BeanContextBuilder#beanDictionary(Class...)}
         *      <li class='link'>{@doc BeanDictionaries}
         * </ul>
         */
@@ -396,10 +390,10 @@ public @interface BeanConfig {
         * Same as {@link #dictionary()} but replaces any existing value.
         *
         * <ul class='seealso'>
-        *      <li class='ja'>{@link 
org.apache.juneau.annotation.Bean#dictionary()}
-        *      <li class='ja'>{@link 
org.apache.juneau.annotation.Beanp#dictionary()}
-        *      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#dictionary()}
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#beanDictionary(Class...)}
+        *      <li class='ja'>{@link Bean#dictionary()}
+        *      <li class='ja'>{@link Beanp#dictionary()}
+        *      <li class='ja'>{@link BeanConfig#dictionary()}
+        *      <li class='jm'>{@link 
BeanContextBuilder#beanDictionary(Class...)}
         * </ul>
         */
        Class<?>[] dictionary_replace() default {};
@@ -431,9 +425,8 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='ja'>{@link 
org.apache.juneau.annotation.Bean#findFluentSetters()}
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#findFluentSetters()}
-        *      <li class='jf'>{@link BeanContext#BEAN_findFluentSetters}
+        *      <li class='ja'>{@link Bean#findFluentSetters()}
+        *      <li class='jm'>{@link BeanContextBuilder#findFluentSetters()}
         * </ul>
         */
        String findFluentSetters() default "";
@@ -457,8 +450,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#ignoreInvocationExceptionsOnGetters()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_ignoreInvocationExceptionsOnGetters}
+        *      <li class='jm'>{@link 
BeanContextBuilder#ignoreInvocationExceptionsOnGetters()}
         * </ul>
         */
        String ignoreInvocationExceptionsOnGetters() default "";
@@ -482,8 +474,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#ignoreInvocationExceptionsOnSetters()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_ignoreInvocationExceptionsOnSetters}
+        *      <li class='jm'>{@link 
BeanContextBuilder#ignoreInvocationExceptionsOnSetters()}
         * </ul>
         */
        String ignoreInvocationExceptionsOnSetters() default "";
@@ -507,8 +498,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#disableIgnoreMissingSetters()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_disableIgnoreMissingSetters}
+        *      <li class='jm'>{@link 
BeanContextBuilder#disableIgnoreMissingSetters()}
         * </ul>
         */
        String disableIgnoreMissingSetters() default "";
@@ -531,8 +521,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#disableIgnoreTransientFields()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_disableIgnoreTransientFields}
+        *      <li class='jm'>{@link 
BeanContextBuilder#disableIgnoreTransientFields()}
         * </ul>
         */
        String disableIgnoreTransientFields() default "";
@@ -556,8 +545,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#ignoreUnknownBeanProperties()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_ignoreUnknownBeanProperties}
+        *      <li class='jm'>{@link 
BeanContextBuilder#ignoreUnknownBeanProperties()}
         * </ul>
         */
        String ignoreUnknownBeanProperties() default "";
@@ -581,8 +569,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#disableIgnoreUnknownNullBeanProperties()}
-        *      <li class='jf'>{@link 
BeanContext#BEAN_disableIgnoreUnknownNullBeanProperties}
+        *      <li class='jm'>{@link 
BeanContextBuilder#disableIgnoreUnknownNullBeanProperties()}
         * </ul>
         */
        String disableIgnoreUnknownNullBeanProperties() default "";
@@ -635,9 +622,8 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#locale(Locale)}
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanSessionArgs#locale(Locale)}
-        *      <li class='jf'>{@link BeanContext#BEAN_locale}
+        *      <li class='jm'>{@link BeanSessionArgs#locale(Locale)}
+        *      <li class='jm'>{@link BeanContextBuilder#locale(Locale)}
         * </ul>
         */
        String locale() default "";
@@ -654,9 +640,8 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#mediaType(MediaType)}
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanSessionArgs#mediaType(MediaType)}
-        *      <li class='jf'>{@link BeanContext#BEAN_mediaType}
+        *      <li class='jm'>{@link BeanSessionArgs#mediaType(MediaType)}
+        *      <li class='jm'>{@link BeanContextBuilder#mediaType(MediaType)}
         * </ul>
         */
        String mediaType() default "";
@@ -674,10 +659,9 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='ja'>{@link org.apache.juneau.annotation.BeanIgnore}
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#notBeanClasses(Object...)}
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#notBeanClasses_replace(Object...)}
-        *      <li class='jf'>{@link BeanContext#BEAN_notBeanClasses}
+        *      <li class='ja'>{@link BeanIgnore}
+        *      <li class='jm'>{@link 
BeanContextBuilder#notBeanClasses(Object...)}
+        *      <li class='jm'>{@link 
BeanContextBuilder#notBeanClasses_replace(Object...)}
         * </ul>
         */
        Class<?>[] notBeanClasses() default {};
@@ -689,7 +673,7 @@ public @interface BeanConfig {
         * Same as {@link #notBeanClasses()} but replaces any existing value.
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link BeanContext#BEAN_notBeanClasses}
+        *      <li class='jm'>{@link 
BeanContextBuilder#notBeanClasses(Object...)}
         * </ul>
         */
        Class<?>[] notBeanClasses_replace() default {};
@@ -724,7 +708,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link BeanContext#BEAN_notBeanPackages}
+        *      <li class='jm'>{@link 
BeanContextBuilder#notBeanPackages(Object...)}
         * </ul>
         */
        String[] notBeanPackages() default {};
@@ -736,7 +720,7 @@ public @interface BeanConfig {
         * Same as {@link #notBeanPackages()} but replaces any existing value.
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link BeanContext#BEAN_notBeanPackages}
+        *      <li class='jm'>{@link 
BeanContextBuilder#notBeanPackages(Object...)}
         * </ul>
         */
        String[] notBeanPackages_replace() default {};
@@ -756,7 +740,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link BeanContext#BEAN_propertyNamer}
+        *      <li class='jm'>{@link BeanContextBuilder#propertyNamer(Class)}
         * </ul>
         */
        Class<? extends PropertyNamer> propertyNamer() default 
PropertyNamer.Null.class;
@@ -787,7 +771,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link BeanContext#BEAN_sortProperties}
+        *      <li class='jm'>{@link BeanContextBuilder#sortProperties()}
         * </ul>
         */
        String sortProperties() default "";
@@ -808,7 +792,7 @@ public @interface BeanConfig {
         * {@link PojoSwap#forMediaTypes()} or {@link Swap#mediaTypes() 
@Swap(mediaTypes)} are used to come up with the best match.
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link BeanContext#BEAN_swaps}
+        *      <li class='jm'>{@link BeanContextBuilder#swaps}
         *      <li class='link'>{@doc PojoSwaps}
         *      <li class='link'>{@doc PerMediaTypePojoSwaps}
         *      <li class='link'>{@doc OneWayPojoSwaps}
@@ -826,7 +810,7 @@ public @interface BeanConfig {
         * Same as {@link #swaps()} but replaces any existing value.
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link BeanContext#BEAN_swaps}
+        *      <li class='jm'>{@link BeanContextBuilder#swaps(Object...)}
         * </ul>
         */
        Class<?>[] swaps_replace() default {};
@@ -843,9 +827,8 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#timeZone(TimeZone)}
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanSessionArgs#timeZone(TimeZone)}
-        *      <li class='jf'>{@link BeanContext#BEAN_timeZone}
+        *      <li class='jm'>{@link BeanSessionArgs#timeZone(TimeZone)}
+        *      <li class='jm'>{@link BeanContextBuilder#timeZone(TimeZone)}
         * </ul>
         */
        String timeZone() default "";
@@ -868,7 +851,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link BeanContext#BEAN_useEnumNames}
+        *      <li class='jm'>{@link BeanContextBuilder#useEnumNames()}
         * </ul>
         */
        String useEnumNames() default "";
@@ -893,8 +876,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#disableInterfaceProxies()}
-        *      <li class='jf'>{@link BeanContext#BEAN_disableInterfaceProxies}
+        *      <li class='jm'>{@link 
BeanContextBuilder#disableInterfaceProxies()}
         * </ul>
         */
        String disableInterfaceProxies() default "";
@@ -918,7 +900,7 @@ public @interface BeanConfig {
         * </ul>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link BeanContext#BEAN_useJavaBeanIntrospector}
+        *      <li class='jm'>{@link 
BeanContextBuilder#useJavaBeanIntrospector()}
         * </ul>
         */
        String useJavaBeanIntrospector() default "";
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
index 80ba3db..b88c358 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
@@ -51,20 +51,20 @@ public class BeanConfigAnnotation {
                        visibility(a.beanMethodVisibility(), 
"beanMethodVisibility").ifPresent(x -> b.beanMethodVisibility(x));
                        classes(a.dictionary()).ifPresent(x -> 
b.beanDictionary(x));
                        classes(a.dictionary_replace()).ifPresent(x -> { 
b.beanDictionary().clear(); b.beanDictionary(x);});
-                       bool(a.beanMapPutReturnsOldValue()).ifPresent(x -> 
b.set(BEAN_beanMapPutReturnsOldValue, x));
-                       bool(a.beansRequireDefaultConstructor()).ifPresent(x -> 
b.set(BEAN_beansRequireDefaultConstructor, x));
-                       bool(a.beansRequireSerializable()).ifPresent(x -> 
b.set(BEAN_beansRequireSerializable, x));
-                       bool(a.beansRequireSettersForGetters()).ifPresent(x -> 
b.set(BEAN_beansRequireSettersForGetters, x));
-                       bool(a.disableBeansRequireSomeProperties()).ifPresent(x 
-> b.set(BEAN_disableBeansRequireSomeProperties, x));
+                       bool(a.beanMapPutReturnsOldValue()).ifPresent(x -> 
b.beanMapPutReturnsOldValue(x));
+                       bool(a.beansRequireDefaultConstructor()).ifPresent(x -> 
b.beansRequireDefaultConstructor(x));
+                       bool(a.beansRequireSerializable()).ifPresent(x -> 
b.beansRequireSerializable(x));
+                       bool(a.beansRequireSettersForGetters()).ifPresent(x -> 
b.beansRequireSettersForGetters(x));
+                       bool(a.disableBeansRequireSomeProperties()).ifPresent(x 
-> b.disableBeansRequireSomeProperties(x));
                        string(a.typePropertyName()).ifPresent(x -> 
b.set(BEAN_typePropertyName, x));
                        bool(a.debug()).ifPresent(x -> b.set(CONTEXT_debug, x));
-                       bool(a.findFluentSetters()).ifPresent(x -> 
b.set(BEAN_findFluentSetters, x));
-                       
bool(a.ignoreInvocationExceptionsOnGetters()).ifPresent(x -> 
b.set(BEAN_ignoreInvocationExceptionsOnGetters, x));
-                       
bool(a.ignoreInvocationExceptionsOnSetters()).ifPresent(x -> 
b.set(BEAN_ignoreInvocationExceptionsOnSetters, x));
-                       bool(a.disableIgnoreMissingSetters()).ifPresent(x -> 
b.set(BEAN_disableIgnoreMissingSetters, x));
-                       bool(a.disableIgnoreTransientFields()).ifPresent(x -> 
b.set(BEAN_disableIgnoreTransientFields, x));
-                       bool(a.ignoreUnknownBeanProperties()).ifPresent(x -> 
b.set(BEAN_ignoreUnknownBeanProperties, x));
-                       
bool(a.disableIgnoreUnknownNullBeanProperties()).ifPresent(x -> 
b.set(BEAN_disableIgnoreUnknownNullBeanProperties, x));
+                       bool(a.findFluentSetters()).ifPresent(x -> 
b.findFluentSetters(x));
+                       
bool(a.ignoreInvocationExceptionsOnGetters()).ifPresent(x -> 
b.ignoreInvocationExceptionsOnGetters(x));
+                       
bool(a.ignoreInvocationExceptionsOnSetters()).ifPresent(x -> 
b.ignoreInvocationExceptionsOnSetters(x));
+                       bool(a.disableIgnoreMissingSetters()).ifPresent(x -> 
b.disableIgnoreMissingSetters(x));
+                       bool(a.disableIgnoreTransientFields()).ifPresent(x -> 
b.disableIgnoreTransientFields(x));
+                       bool(a.ignoreUnknownBeanProperties()).ifPresent(x -> 
b.ignoreUnknownBeanProperties(x));
+                       
bool(a.disableIgnoreUnknownNullBeanProperties()).ifPresent(x -> 
b.disableIgnoreUnknownNullBeanProperties(x));
                        asList(a.interfaces()).stream().map(x -> 
BeanAnnotation.create(x).interfaceClass(x).build()).forEach(x -> 
b.annotations(x));
                        
string(a.locale()).map(Locale::forLanguageTag).ifPresent(x -> 
b.set(BEAN_locale, x));
                        string(a.mediaType()).map(MediaType::of).ifPresent(x -> 
b.set(BEAN_mediaType, x));
@@ -73,13 +73,13 @@ public class BeanConfigAnnotation {
                        b.addTo(BEAN_notBeanPackages, 
stringList(a.notBeanPackages()));
                        b.setIfNotEmpty(BEAN_notBeanPackages, 
stringList(a.notBeanPackages_replace()));
                        type(a.propertyNamer()).ifPresent(x -> 
b.set(BEAN_propertyNamer, x));
-                       bool(a.sortProperties()).ifPresent(x -> 
b.set(BEAN_sortProperties, x));
+                       bool(a.sortProperties()).ifPresent(x -> 
b.sortProperties(x));
                        b.prependTo(BEAN_swaps, a.swaps());
                        b.setIfNotEmpty(BEAN_swaps, a.swaps_replace());
                        
string(a.timeZone()).map(TimeZone::getTimeZone).ifPresent(x -> 
b.set(BEAN_timeZone, x));
-                       bool(a.useEnumNames()).ifPresent(x -> 
b.set(BEAN_useEnumNames, x));
-                       bool(a.disableInterfaceProxies()).ifPresent(x -> 
b.set(BEAN_disableInterfaceProxies, x));
-                       bool(a.useJavaBeanIntrospector()).ifPresent(x -> 
b.set(BEAN_useJavaBeanIntrospector, x));
+                       bool(a.useEnumNames()).ifPresent(x -> 
b.useEnumNames(x));
+                       bool(a.disableInterfaceProxies()).ifPresent(x -> 
b.disableInterfaceProxies(x));
+                       bool(a.useJavaBeanIntrospector()).ifPresent(x -> 
b.useJavaBeanIntrospector(x));
                }
        }
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Beanp.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Beanp.java
index 9ccd524..e871e51 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Beanp.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Beanp.java
@@ -201,7 +201,7 @@ public @interface Beanp {
         *
         * <div class='info'>
         *      Note that if you're not interested in these additional 
properties, you can also use the
-        *      {@link BeanContext#BEAN_ignoreUnknownBeanProperties} setting to 
ignore values that don't fit into existing
+        *      {@link BeanContextBuilder#ignoreUnknownBeanProperties()} 
setting to ignore values that don't fit into existing
         *      properties.
         * </div>
         * <div class='info'>
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserListener.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserListener.java
index a04f1d2..becc0db 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserListener.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserListener.java
@@ -30,7 +30,7 @@ public class ParserListener {
         * Gets called when an unknown bean property is detected in a document.
         *
         * <p>
-        * This method only gets called if {@link 
BeanContext#BEAN_ignoreUnknownBeanProperties} setting is <jk>true</jk>.
+        * This method only gets called if {@link 
BeanContextBuilder#ignoreUnknownBeanProperties()} setting is <jk>true</jk>.
         * Otherwise, the parser will throw a {@link ParseException}.
         *
         * @param <T> The class type of the bean.
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 25ffcc0..6867bc3 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
@@ -312,7 +312,7 @@ public abstract class ParserSession extends BeanSession {
         * @param beanMap The bean that doesn't have the expected property.
         * @param value The parsed value.
         * @throws ParseException
-        *      Automatically thrown if {@link 
BeanContext#BEAN_ignoreUnknownBeanProperties} setting on this parser is
+        *      Automatically thrown if {@link 
BeanContextBuilder#ignoreUnknownBeanProperties()} setting on this parser is
         *      <jk>false</jk>
         * @param <T> The class type of the bean map that doesn't have the 
expected property.
         */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/HashKey.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/HashKey.java
index f43d367..49e678b 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/HashKey.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/HashKey.java
@@ -26,41 +26,11 @@ public class HashKey {
        /**
         * Static creator.
         *
-        * @return A new builder.
+        * @param array The contents of the key.
+        * @return A new bean.
         */
-       public static Builder create() {
-               return new Builder();
-       }
-
-       
//-----------------------------------------------------------------------------------------------------------------
-       // Builder
-       
//-----------------------------------------------------------------------------------------------------------------
-
-       /**
-        * The builder class for this object.
-        */
-       public static class Builder {
-               List<Object> list = new ArrayList<>();
-
-               /**
-                * Adds a list of objects to this builder.
-                *
-                * @param values The values to add to this list.
-                * @return This object.
-                */
-               public Builder add(Object...values) {
-                       Collections.addAll(list, values);
-                       return this;
-               }
-
-               /**
-                * Creates the key.
-                *
-                * @return The key.
-                */
-               public HashKey build() {
-                       return new HashKey(this);
-               }
+       public static HashKey of(Object...array) {
+               return new HashKey(array);
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
@@ -70,9 +40,9 @@ public class HashKey {
        private final int hashCode;
        private final Object[] array;
 
-       HashKey(Builder builder) {
-               hashCode = builder.list.hashCode();
-               array = builder.list.toArray(new Object[builder.list.size()]);
+       HashKey(Object[] array) {
+               this.array = array;
+               this.hashCode = Arrays.hashCode(array);
        }
 
        @Override

Reply via email to