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

[2/2] juneau git commit: Sort properties in context classes.

Sort properties in context classes.

Project: http://git-wip-us.apache.org/repos/asf/juneau/repo
Commit: http://git-wip-us.apache.org/repos/asf/juneau/commit/4eaa0728
Tree: http://git-wip-us.apache.org/repos/asf/juneau/tree/4eaa0728
Diff: http://git-wip-us.apache.org/repos/asf/juneau/diff/4eaa0728

Branch: refs/heads/master
Commit: 4eaa072813a45ffb2004bf4e670a1803e82cc2a5
Parents: 7b59610
Author: JamesBognar <ja...@apache.org>
Authored: Sat Jan 6 21:37:25 2018 -0500
Committer: JamesBognar <ja...@apache.org>
Committed: Sat Jan 6 21:37:25 2018 -0500

----------------------------------------------------------------------
 .../org/apache/juneau/jena/RdfSerializer.java   |  50 +-
 .../java/org/apache/juneau/BeanContext.java     | 714 +++++++++----------
 .../apache/juneau/html/HtmlDocSerializer.java   | 287 ++++----
 .../org/apache/juneau/html/HtmlSerializer.java  |  80 +--
 .../org/apache/juneau/json/JsonSerializer.java  |  34 +-
 .../java/org/apache/juneau/parser/Parser.java   | 112 +--
 .../apache/juneau/serializer/Serializer.java    | 250 +++----
 .../org/apache/juneau/uon/UonSerializer.java    |  38 +-
 .../java/org/apache/juneau/xml/XmlParser.java   |  82 +--
 .../org/apache/juneau/xml/XmlSerializer.java    |  90 +--
 .../juneau/yaml/proto/YamlSerializer.java       |  34 +-
 .../apache/juneau/rest/client/RestClient.java   | 228 +++---
 12 files changed, 997 insertions(+), 1002 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/juneau/blob/4eaa0728/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
index e7c38ae..bae00c5 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
@@ -51,6 +51,31 @@ public class RdfSerializer extends WriterSerializer implements RdfCommon {
 	private static final String PREFIX = "RdfSerializer.";
 
 	/**
+	 * Configuration property:  Add <js>"_type"</js> properties when needed.
+	 * 
+	 *	<h5 class='section'>Property:</h5>
+	 * <ul>
+	 * 	<li><b>Name:</b>  <js>"RdfSerializer.addBeanTypeProperties.b"</js>
+	 * 	<li><b>Data type:</b>  <code>Boolean</code>
+	 * 	<li><b>Default:</b>  <jk>false</jk>
+	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
+	 * </ul>
+	 * 
+	 *	<h5 class='section'>Description:</h5>
+	 * <p>
+	 * If <jk>true</jk>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred 
+	 * through reflection.
+	 * This is used to recreate the correct objects during parsing if the object types cannot be inferred.
+	 * For example, when serializing a {@code Map<String,Object>} field, where the bean class cannot be determined 
+	 * from the value type.
+	 * 
+	 * <p>
+	 * When present, this value overrides the {@link #SERIALIZER_addBeanTypeProperties} setting and is
+	 * provided to customize the behavior of specific serializers in a {@link SerializerGroup}.
+	 */
+	public static final String RDF_addBeanTypeProperties = PREFIX + "addBeanTypeProperties.b";
+
+	/**
 	 * Configuration property:  Add XSI data types to non-<code>String</code> literals.
 	 * 
 	 *	<h5 class='section'>Property:</h5>
@@ -124,31 +149,6 @@ public class RdfSerializer extends WriterSerializer implements RdfCommon {
 	 */
 	public static final String RDF_namespaces = PREFIX + "namespaces.ls";
 
-	/**
-	 * Configuration property:  Add <js>"_type"</js> properties when needed.
-	 * 
-	 *	<h5 class='section'>Property:</h5>
-	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"RdfSerializer.addBeanTypeProperties.b"</js>
-	 * 	<li><b>Data type:</b>  <code>Boolean</code>
-	 * 	<li><b>Default:</b>  <jk>false</jk>
-	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
-	 * </ul>
-	 * 
-	 *	<h5 class='section'>Description:</h5>
-	 * <p>
-	 * If <jk>true</jk>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred 
-	 * through reflection.
-	 * This is used to recreate the correct objects during parsing if the object types cannot be inferred.
-	 * For example, when serializing a {@code Map<String,Object>} field, where the bean class cannot be determined 
-	 * from the value type.
-	 * 
-	 * <p>
-	 * When present, this value overrides the {@link #SERIALIZER_addBeanTypeProperties} setting and is
-	 * provided to customize the behavior of specific serializers in a {@link SerializerGroup}.
-	 */
-	public static final String RDF_addBeanTypeProperties = PREFIX + "addBeanTypeProperties.b";
-
 
 	//-------------------------------------------------------------------------------------------------------------------
 	// Predefined instances

http://git-wip-us.apache.org/repos/asf/juneau/blob/4eaa0728/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
----------------------------------------------------------------------
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 f033b5d..9099910 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
@@ -225,82 +225,169 @@ public class BeanContext extends Context {
 	static final String PREFIX = "BeanContext.";
 
 	/**
-	 * Configuration property:  Beans require no-arg constructors.
+	 * Configuration property:  Look for bean classes with the specified minimum visibility.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.beansRequireDefaultConstructor.b"</js>
-	 * 	<li><b>Data type:</b>  <code>Boolean</code>
-	 * 	<li><b>Default:</b>  <jk>false</jk>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.beanClassVisibility.s"</js>
+	 * 	<li><b>Data type:</b>  <code>String</code> ({@link Visibility})
+	 * 	<li><b>Default:</b>  <js>"PUBLIC"</js>
 	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * If <jk>true</jk>, a Java class must implement a default no-arg constructor to be considered a bean.
-	 *
-	 * <p>
-	 * The {@link Bean @Bean} annotation can be used on a class to override this setting when <jk>true</jk>.
+	 * Classes are not considered beans unless they meet the minimum visibility requirements.
+	 * For example, if the visibility is <code>PUBLIC</code> and the bean class is <jk>protected</jk>, then the class
+	 * will not be interpreted as a bean class.
 	 */
-	public static final String BEAN_beansRequireDefaultConstructor = PREFIX + "beansRequireDefaultConstructor.b";
+	public static final String BEAN_beanClassVisibility = PREFIX + "beanClassVisibility.s";
 
 	/**
-	 * Configuration property:  Beans require {@link Serializable} interface.
+	 * Configuration property:  Look for bean constructors with the specified minimum visibility.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.beansRequireSerializable.b"</js>
-	 * 	<li><b>Data type:</b>  <code>Boolean</code>
-	 * 	<li><b>Default:</b>  <jk>false</jk>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.beanConstructorVisibility.s"</js>
+	 * 	<li><b>Data type:</b>  <code>String</code> ({@link Visibility})
+	 * 	<li><b>Default:</b>  <js>"PUBLIC"</js>
 	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
+	 */
+	public static final String BEAN_beanConstructorVisibility = PREFIX + "beanConstructorVisibility.s";
+
+	/**
+	 * Configuration property:  Bean lookup dictionary.
 	 *
+	 *	<h5 class='section'>Property:</h5>
+	 * <ul>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.beanDictionary.lc"</js>
+	 * 	<li><b>Data type:</b>  <code>List&lt;Class&gt;</code>
+	 * 	<li><b>Default:</b>  empty list
+	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
+	 * </ul>
+	 * 
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * If <jk>true</jk>, a Java class must implement the {@link Serializable} interface to be considered a bean.
+	 * The list of classes that make up the bean dictionary in this bean context.
+	 * 
+	 * <p>
+	 * A dictionary is a name/class mapping used to find class types during parsing when they cannot be inferred
+	 * through reflection.
+	 * <br>The names are defined through the {@link Bean#typeName()} annotation defined on the bean class.
+	 * 
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode'>
+	 * 	BeanContext bc = BeanContext.<jsm>create</jsm>().beanDictionary(Bar.<jk>class</jk>, Baz.<jk>class</jk>).build();
+	 * </p>
 	 *
 	 * <p>
-	 * The {@link Bean @Bean} annotation can be used on a class to override this setting when <jk>true</jk>.
+	 * <h5 class='section'>Notes:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li>Properties:
+	 * 		<ul> 	
+	 * 			<li>{@link BeanContext#BEAN_beanDictionary}
+	 * 			<li>{@link BeanContext#BEAN_beanDictionary_add}
+	 * 			<li>{@link BeanContext#BEAN_beanDictionary_remove}
+	 * 		</ul>
+	 * 	<li>Annotations:  
+	 * 		<ul>
+	 * 			<li>{@link Bean#beanDictionary()}
+	 * 			<li>{@link BeanProperty#beanDictionary()}
+	 * 		</ul>
+	 * 	<li>Methods:  
+	 * 		<ul>
+	 * 			<li>{@link BeanContextBuilder#beanDictionary(Object...)}
+	 * 			<li>{@link BeanContextBuilder#beanDictionary(boolean,Object...)}
+	 * 			<li>{@link BeanContextBuilder#beanDictionaryRemove(Object...)}
+	 * 		</ul>
+	 * 	<li>Values can consist of any of the following types:
+	 *			<ul>
+	 * 			<li>Any bean class that specifies a value for {@link Bean#typeName() @Bean.typeName()}.
+	 * 			<li>Any subclass of {@link BeanDictionaryList} containing a collection of bean classes with type name
+	 * 				annotations.
+	 * 			<li>Any subclass of {@link BeanDictionaryMap} containing a mapping of type names to classes without type name
+	 * 				annotations.
+	 * 		</ul>
+	 * 	<li>See <a class='doclink' href='../../../overview-summary.html#juneau-marshall.BeanDictionaries'>Bean Names and Dictionaries</a> 
+	 * 		for more information.
+	 *	</ul>
 	 */
-	public static final String BEAN_beansRequireSerializable = PREFIX + "beansRequireSerializable.b";
+	public static final String BEAN_beanDictionary = PREFIX + "beanDictionary.lc";
 
 	/**
-	 * Configuration property:  Beans require setters for getters.
+	 * Configuration property:  Add to bean lookup dictionary.
+	 */
+	public static final String BEAN_beanDictionary_add = PREFIX + "beanDictionary.lc/add";
+
+	/**
+	 * Configuration property:  Remove from bean lookup dictionary.
+	 */
+	public static final String BEAN_beanDictionary_remove = PREFIX + "beanDictionary.lc/remove";
+
+	/**
+	 * Configuration property:  Look for bean fields with the specified minimum visibility.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.beansRequireSettersForGetters.b"</js>
-	 * 	<li><b>Data type:</b>  <code>Boolean</code>
-	 * 	<li><b>Default:</b>  <jk>false</jk>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.beanFieldVisibility.s"</js>
+	 * 	<li><b>Data type:</b>  <code>String</code> ({@link Visibility})
+	 * 	<li><b>Default:</b>  <js>"PUBLIC"</js>
 	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * If <jk>true</jk>, only getters that have equivalent setters will be considered as properties on a bean.
-	 * Otherwise, they will be ignored.
+	 * Fields are not considered bean properties unless they meet the minimum visibility requirements.
+	 * For example, if the visibility is <code>PUBLIC</code> and the bean field is <jk>protected</jk>, then the field
+	 * will not be interpreted as a bean property.
+	 *
+	 * <p>
+	 * Use {@link Visibility#NONE} to prevent bean fields from being interpreted as bean properties altogether.
 	 */
-	public static final String BEAN_beansRequireSettersForGetters = PREFIX + "beansRequireSettersForGetters.b";
+	public static final String BEAN_beanFieldVisibility = PREFIX + "beanFieldVisibility.s";
 
 	/**
-	 * Configuration property:  Beans require at least one property.
+	 * Configuration property:  Bean filters to apply to beans.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.beansRequireSomeProperties.b"</js>
-	 * 	<li><b>Data type:</b>  <code>Boolean</code>
-	 * 	<li><b>Default:</b>  <jk>true</jk>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.beanFilters.lc"</js>
+	 * 	<li><b>Data type:</b>  <code>List&lt;Class&gt;</code>
+	 * 	<li><b>Default:</b>  empty list
 	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * If <jk>true</jk>, then a Java class must contain at least 1 property to be considered a bean.
+	 * This is a programmatic equivalent to the {@link Bean @Bean} annotation.
+	 * It's useful when you want to use the Bean annotation functionality, but you don't have the ability to alter the
+	 * bean classes.
 	 *
 	 * <p>
-	 * The {@link Bean @Bean} annotation can be used on a class to override this setting when <jk>true</jk>.
+	 * There are two category of classes that can be passed in through this method:
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		Subclasses of {@link BeanFilterBuilder}.
+	 * 		These must have a public no-arg constructor.
+	 * 	<li>
+	 * 		Bean interface classes.
+	 * 		A shortcut for defining a {@link InterfaceBeanFilterBuilder}.
+	 * 		Any subclasses of an interface class will only have properties defined on the interface.
+	 * 		All other bean properties will be ignored.
+	 * </ul>
 	 */
-	public static final String BEAN_beansRequireSomeProperties = PREFIX + "beansRequireSomeProperties.b";
+	public static final String BEAN_beanFilters = PREFIX + "beanFilters.lc";
+
+	/**
+	 * Configuration property:  Add to bean filters.
+	 */
+	public static final String BEAN_beanFilters_add = PREFIX + "beanFilters.lc/add";
+
+	/**
+	 * Configuration property:  Remove from bean filters.
+	 */
+	public static final String BEAN_beanFilters_remove = PREFIX + "beanFilters.lc/remove";
 
 	/**
 	 * Configuration property:  {@link BeanMap#put(String,Object) BeanMap.put()} method will return old property
@@ -325,167 +412,173 @@ public class BeanContext extends Context {
 	public static final String BEAN_beanMapPutReturnsOldValue = PREFIX + "beanMapPutReturnsOldValue.b";
 
 	/**
-	 * Configuration property:  Look for bean constructors with the specified minimum visibility.
-	 *
-	 *	<h5 class='section'>Property:</h5>
-	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.beanConstructorVisibility.s"</js>
-	 * 	<li><b>Data type:</b>  <code>String</code> ({@link Visibility})
-	 * 	<li><b>Default:</b>  <js>"PUBLIC"</js>
-	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
-	 * </ul>
-	 */
-	public static final String BEAN_beanConstructorVisibility = PREFIX + "beanConstructorVisibility.s";
-
-	/**
-	 * Configuration property:  Look for bean classes with the specified minimum visibility.
+	 * Configuration property:  Beans require no-arg constructors.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.beanClassVisibility.s"</js>
-	 * 	<li><b>Data type:</b>  <code>String</code> ({@link Visibility})
-	 * 	<li><b>Default:</b>  <js>"PUBLIC"</js>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.beansRequireDefaultConstructor.b"</js>
+	 * 	<li><b>Data type:</b>  <code>Boolean</code>
+	 * 	<li><b>Default:</b>  <jk>false</jk>
 	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Classes are not considered beans unless they meet the minimum visibility requirements.
-	 * For example, if the visibility is <code>PUBLIC</code> and the bean class is <jk>protected</jk>, then the class
-	 * will not be interpreted as a bean class.
+	 * If <jk>true</jk>, a Java class must implement a default no-arg constructor to be considered a bean.
+	 *
+	 * <p>
+	 * The {@link Bean @Bean} annotation can be used on a class to override this setting when <jk>true</jk>.
 	 */
-	public static final String BEAN_beanClassVisibility = PREFIX + "beanClassVisibility.s";
+	public static final String BEAN_beansRequireDefaultConstructor = PREFIX + "beansRequireDefaultConstructor.b";
 
 	/**
-	 * Configuration property:  Look for bean fields with the specified minimum visibility.
+	 * Configuration property:  Beans require {@link Serializable} interface.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.beanFieldVisibility.s"</js>
-	 * 	<li><b>Data type:</b>  <code>String</code> ({@link Visibility})
-	 * 	<li><b>Default:</b>  <js>"PUBLIC"</js>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.beansRequireSerializable.b"</js>
+	 * 	<li><b>Data type:</b>  <code>Boolean</code>
+	 * 	<li><b>Default:</b>  <jk>false</jk>
 	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Fields are not considered bean properties unless they meet the minimum visibility requirements.
-	 * For example, if the visibility is <code>PUBLIC</code> and the bean field is <jk>protected</jk>, then the field
-	 * will not be interpreted as a bean property.
+	 * If <jk>true</jk>, a Java class must implement the {@link Serializable} interface to be considered a bean.
 	 *
 	 * <p>
-	 * Use {@link Visibility#NONE} to prevent bean fields from being interpreted as bean properties altogether.
+	 * The {@link Bean @Bean} annotation can be used on a class to override this setting when <jk>true</jk>.
 	 */
-	public static final String BEAN_beanFieldVisibility = PREFIX + "beanFieldVisibility.s";
+	public static final String BEAN_beansRequireSerializable = PREFIX + "beansRequireSerializable.b";
 
 	/**
-	 * Configuration property:  Look for bean methods with the specified minimum visibility.
+	 * Configuration property:  Beans require setters for getters.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.methodVisibility.s"</js>
-	 * 	<li><b>Data type:</b>  <code>String</code> ({@link Visibility})
-	 * 	<li><b>Default:</b>  <js>"PUBLIC"</js>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.beansRequireSettersForGetters.b"</js>
+	 * 	<li><b>Data type:</b>  <code>Boolean</code>
+	 * 	<li><b>Default:</b>  <jk>false</jk>
 	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Methods are not considered bean getters/setters unless they meet the minimum visibility requirements.
-	 * For example, if the visibility is <code>PUBLIC</code> and the bean method is <jk>protected</jk>, then the method
-	 * will not be interpreted as a bean getter or setter.
+	 * If <jk>true</jk>, only getters that have equivalent setters will be considered as properties on a bean.
+	 * Otherwise, they will be ignored.
 	 */
-	public static final String BEAN_methodVisibility = PREFIX + "methodVisibility.s";
+	public static final String BEAN_beansRequireSettersForGetters = PREFIX + "beansRequireSettersForGetters.b";
 
 	/**
-	 * Configuration property:  Use Java {@link Introspector} for determining bean properties.
+	 * Configuration property:  Beans require at least one property.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.useJavaBeanIntrospector.b"</js>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.beansRequireSomeProperties.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
-	 * 	<li><b>Default:</b>  <jk>false</jk>
+	 * 	<li><b>Default:</b>  <jk>true</jk>
 	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Using the built-in Java bean introspector will not pick up fields or non-standard getters/setters.
-	 * Most {@link Bean @Bean} annotations will be ignored.
+	 * If <jk>true</jk>, then a Java class must contain at least 1 property to be considered a bean.
+	 *
+	 * <p>
+	 * The {@link Bean @Bean} annotation can be used on a class to override this setting when <jk>true</jk>.
 	 */
-	public static final String BEAN_useJavaBeanIntrospector = PREFIX + "useJavaBeanIntrospector.b";
+	public static final String BEAN_beansRequireSomeProperties = PREFIX + "beansRequireSomeProperties.b";
 
 	/**
-	 * Configuration property:  Use interface proxies.
+	 * Configuration property:  Name to use for the bean type properties used to represent a bean type.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.useInterfaceProxies.b"</js>
-	 * 	<li><b>Data type:</b>  <code>Boolean</code>
-	 * 	<li><b>Default:</b>  <jk>true</jk>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.beanTypePropertyName.s"</js>
+	 * 	<li><b>Data type:</b>  <code>String</code>
+	 * 	<li><b>Default:</b>  <js>"_type"</js>
 	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
-	 *
-	 *	<h5 class='section'>Description:</h5>
-	 * <p>
-	 * If <jk>true</jk>, then interfaces will be instantiated as proxy classes through the use of an
-	 * {@link InvocationHandler} if there is no other way of instantiating them.
 	 */
-	public static final String BEAN_useInterfaceProxies = PREFIX + "useInterfaceProxies.b";
+	public static final String BEAN_beanTypePropertyName = PREFIX + "beanTypePropertyName.s";
 
 	/**
-	 * Configuration property:  Ignore unknown properties.
+	 * Configuration property:  Debug mode.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.ignoreUnknownBeanProperties.b"</js>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.debug.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
 	 * 	<li><b>Default:</b>  <jk>false</jk>
-	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
+	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * If <jk>true</jk>, trying to set a value on a non-existent bean property will silently be ignored.
-	 * Otherwise, a {@code RuntimeException} is thrown.
+	 * Enables the following additional information during serialization:
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		When bean getters throws exceptions, the exception includes the object stack information
+	 * 		in order to determine how that method was invoked.
+	 * 	<li>
+	 * 		Enables {@link Serializer#SERIALIZER_detectRecursions}.
+	 * </ul>
+	 *
+	 * <p>
+	 * Enables the following additional information during parsing:
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		When bean setters throws exceptions, the exception includes the object stack information
+	 * 		in order to determine how that method was invoked.
+	 * </ul>
 	 */
-	public static final String BEAN_ignoreUnknownBeanProperties = PREFIX + "ignoreUnknownBeanProperties.b";
+	public static final String BEAN_debug = PREFIX + "debug.b";
 
 	/**
-	 * Configuration property:  Ignore unknown properties with null values.
+	 * Configuration property:  Default parser to use when converting <code>Strings</code> to POJOs.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.ignoreUnknownNullBeanProperties.b"</js>
-	 * 	<li><b>Data type:</b>  <code>Boolean</code>
-	 * 	<li><b>Default:</b>  <jk>true</jk>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.defaultParser.c"</js>
+	 * 	<li><b>Data type:</b>  <code>Class</code>
+	 * 	<li><b>Default:</b>  {@link JsonSerializer}
 	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * If <jk>true</jk>, trying to set a <jk>null</jk> value on a non-existent bean property will silently be ignored.
-	 * Otherwise, a {@code RuntimeException} is thrown.
+	 * Used in the in the {@link BeanSession#convertToType(Object, Class)} method.
 	 */
-	public static final String BEAN_ignoreUnknownNullBeanProperties = PREFIX + "ignoreUnknownNullBeanProperties.b";
+	public static final String BEAN_defaultParser = PREFIX + "defaultParser.c";
 
 	/**
-	 * Configuration property:  Ignore properties without setters.
+	 * Configuration property:  Exclude specified properties from beans.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.ignorePropertiesWithoutSetters.b"</js>
-	 * 	<li><b>Data type:</b>  <code>Boolean</code>
-	 * 	<li><b>Default:</b>  <jk>true</jk>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.excludeProperties.sms"</js>
+	 * 	<li><b>Data type:</b>  <code>Map&lt;String,String&gt;</code>
+	 * 	<li><b>Default:</b>  <code>{}</code>
 	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * If <jk>true</jk>, trying to set a value on a bean property without a setter will silently be ignored.
-	 * Otherwise, a {@code RuntimeException} is thrown.
+	 * Specifies to exclude the specified list of properties for the specified bean class.
+	 *
+	 * <p>
+	 * The keys are either fully-qualified or simple class names, and the values are comma-delimited lists of property
+	 * names.
+	 * The key <js>"*"</js> means all bean classes.
+	 *
+	 * <p>
+	 * For example, <code>{Bean1:<js>'foo,bar'</js>}</code> means don't serialize the <code>foo</code> and
+	 * <code>bar</code> properties on the specified bean.
+	 *
+	 * <p>
+	 * Setting applies to specified class and all subclasses.
 	 */
-	public static final String BEAN_ignorePropertiesWithoutSetters = PREFIX + "ignorePropertiesWithoutSetters.b";
+	public static final String BEAN_excludeProperties = PREFIX + "excludeProperties.sms";
 
 	/**
 	 * Configuration property:  Ignore invocation errors on getters.
@@ -524,178 +617,58 @@ public class BeanContext extends Context {
 	public static final String BEAN_ignoreInvocationExceptionsOnSetters = PREFIX + "ignoreInvocationExceptionsOnSetters.b";
 
 	/**
-	 * Configuration property:  Sort bean properties in alphabetical order.
+	 * Configuration property:  Ignore properties without setters.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.sortProperties.b"</js>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.ignorePropertiesWithoutSetters.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
-	 * 	<li><b>Default:</b>  <jk>false</jk>
-	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
-	 * </ul>
-	 *
-	 *	<h5 class='section'>Description:</h5>
-	 * <p>
-	 * When <jk>true</jk>, 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).
-	 *
-	 * <p>
-	 * This property is disabled by default so that IBM JVM users don't have to use {@link Bean @Bean} annotations
-	 * to force bean properties to be in a particular order and can just alter the order of the fields/methods
-	 * in the Java file.
-	 */
-	public static final String BEAN_sortProperties = PREFIX + "sortProperties.b";
-
-	/**
-	 * Configuration property:  Packages whose classes should not be considered beans.
-	 *
-	 *	<h5 class='section'>Property:</h5>
-	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.notBeanPackages.ss"</js>
-	 * 	<li><b>Data type:</b>  <code>Set&lt;String&gt;</code>
-	 * 	<li><b>Default:</b>
-	 * 	<ul>
-	 * 		<li><code>java.lang</code>
-	 * 		<li><code>java.lang.annotation</code>
-	 * 		<li><code>java.lang.ref</code>
-	 * 		<li><code>java.lang.reflect</code>
-	 * 		<li><code>java.io</code>
-	 * 		<li><code>java.net</code>
-	 * 		<li><code>java.nio.*</code>
-	 * 		<li><code>java.util.*</code>
-	 * 	</ul>
-	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
-	 * </ul>
-	 *
-	 *	<h5 class='section'>Description:</h5>
-	 * <p>
-	 * When specified, the current list of ignore packages are appended to.
-	 *
-	 * <p>
-	 * Any classes within these packages will be serialized to strings using {@link Object#toString()}.
-	 *
-	 * <p>
-	 * Note that you can specify prefix patterns to include all subpackages.
-	 */
-	public static final String BEAN_notBeanPackages = PREFIX + "notBeanPackages.ss";
-
-	/**
-	 * Configuration property:  Add to packages whose classes should not be considered beans.
-	 */
-	public static final String BEAN_notBeanPackages_add = PREFIX + "notBeanPackages.ss/add";
-
-	/**
-	 * Configuration property:  Remove from packages whose classes should not be considered beans.
-	 */
-	public static final String BEAN_notBeanPackages_remove = PREFIX + "notBeanPackages.ss/remove";
-
-	/**
-	 * Configuration property:  Classes to be excluded from consideration as being beans.
-	 *
-	 *	<h5 class='section'>Property:</h5>
-	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.notBeanClasses.sc"</js>
-	 * 	<li><b>Data type:</b>  <code>Set&lt;Class&gt;</code>
-	 * 	<li><b>Default:</b>  empty set
+	 * 	<li><b>Default:</b>  <jk>true</jk>
 	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Not-bean classes are typically converted to <code>Strings</code> during serialization even if they appear to be
-	 * bean-like.
-	 */
-	public static final String BEAN_notBeanClasses = PREFIX + "notBeanClasses.sc";
-
-	/**
-	 * Configuration property:  Add to classes that should not be considered beans.
-	 */
-	public static final String BEAN_notBeanClasses_add = PREFIX + "notBeanClasses.sc/add";
-
-	/**
-	 * Configuration property:  Remove from classes that should not be considered beans.
+	 * If <jk>true</jk>, trying to set a value on a bean property without a setter will silently be ignored.
+	 * Otherwise, a {@code RuntimeException} is thrown.
 	 */
-	public static final String BEAN_notBeanClasses_remove = PREFIX + "notBeanClasses.sc/remove";
+	public static final String BEAN_ignorePropertiesWithoutSetters = PREFIX + "ignorePropertiesWithoutSetters.b";
 
 	/**
-	 * Configuration property:  Bean filters to apply to beans.
+	 * Configuration property:  Ignore unknown properties.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.beanFilters.lc"</js>
-	 * 	<li><b>Data type:</b>  <code>List&lt;Class&gt;</code>
-	 * 	<li><b>Default:</b>  empty list
+	 * 	<li><b>Name:</b>  <js>"BeanContext.ignoreUnknownBeanProperties.b"</js>
+	 * 	<li><b>Data type:</b>  <code>Boolean</code>
+	 * 	<li><b>Default:</b>  <jk>false</jk>
 	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * This is a programmatic equivalent to the {@link Bean @Bean} annotation.
-	 * It's useful when you want to use the Bean annotation functionality, but you don't have the ability to alter the
-	 * bean classes.
-	 *
-	 * <p>
-	 * There are two category of classes that can be passed in through this method:
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		Subclasses of {@link BeanFilterBuilder}.
-	 * 		These must have a public no-arg constructor.
-	 * 	<li>
-	 * 		Bean interface classes.
-	 * 		A shortcut for defining a {@link InterfaceBeanFilterBuilder}.
-	 * 		Any subclasses of an interface class will only have properties defined on the interface.
-	 * 		All other bean properties will be ignored.
-	 * </ul>
-	 */
-	public static final String BEAN_beanFilters = PREFIX + "beanFilters.lc";
-
-	/**
-	 * Configuration property:  Add to bean filters.
-	 */
-	public static final String BEAN_beanFilters_add = PREFIX + "beanFilters.lc/add";
-
-	/**
-	 * Configuration property:  Remove from bean filters.
+	 * If <jk>true</jk>, trying to set a value on a non-existent bean property will silently be ignored.
+	 * Otherwise, a {@code RuntimeException} is thrown.
 	 */
-	public static final String BEAN_beanFilters_remove = PREFIX + "beanFilters.lc/remove";
+	public static final String BEAN_ignoreUnknownBeanProperties = PREFIX + "ignoreUnknownBeanProperties.b";
 
 	/**
-	 * Configuration property:  POJO swaps to apply to Java objects.
+	 * Configuration property:  Ignore unknown properties with null values.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.pojoSwaps.lc"</js>
-	 * 	<li><b>Data type:</b>  <code>List&lt;Class&gt;</code>
-	 * 	<li><b>Default:</b>  empty list
+	 * 	<li><b>Name:</b>  <js>"BeanContext.ignoreUnknownNullBeanProperties.b"</js>
+	 * 	<li><b>Data type:</b>  <code>Boolean</code>
+	 * 	<li><b>Default:</b>  <jk>true</jk>
 	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
-	 * <p>
-	 * There are two category of classes that can be passed in through this method:
-	 * <ul>
-	 * 	<li>Subclasses of {@link PojoSwap}.
-	 * 	<li>Surrogate classes.  A shortcut for defining a {@link SurrogateSwap}.
-	 * </ul>
-	 *
-	 * <p>
-	 * Multiple POJO swaps can be associated with a single class.
-	 * When multiple swaps are applicable to the same class, the media type pattern defined by
-	 * {@link PojoSwap#forMediaTypes()} or {@link Swap#mediaTypes()} are used to come up with the best match.
-	 */
-	public static final String BEAN_pojoSwaps = PREFIX + "pojoSwaps.lc";
-
-	/**
-	 * Configuration property:  Add to POJO swap classes.
-	 */
-	public static final String BEAN_pojoSwaps_add = PREFIX + "pojoSwaps.lc/add";
-
-	/**
-	 * Configuration property:  Remove from POJO swap classes.
+	 * <p>
+	 * If <jk>true</jk>, trying to set a <jk>null</jk> value on a non-existent bean property will silently be ignored.
+	 * Otherwise, a {@code RuntimeException} is thrown.
 	 */
-	public static final String BEAN_pojoSwaps_remove = PREFIX + "pojoSwaps.lc/remove";
+	public static final String BEAN_ignoreUnknownNullBeanProperties = PREFIX + "ignoreUnknownNullBeanProperties.b";
 
 	/**
 	 * Configuration property:  Implementation classes for interfaces and abstract classes.
@@ -746,149 +719,189 @@ public class BeanContext extends Context {
 	public static final String BEAN_includeProperties = PREFIX + "includeProperties.sms";
 
 	/**
-	 * Configuration property:  Exclude specified properties from beans.
+	 * Configuration property:  Locale.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.excludeProperties.sms"</js>
-	 * 	<li><b>Data type:</b>  <code>Map&lt;String,String&gt;</code>
-	 * 	<li><b>Default:</b>  <code>{}</code>
-	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.locale.s"</js>
+	 * 	<li><b>Data type:</b>  <code>String</code> ({@link Locale})
+	 * 	<li><b>Default:</b>  <jk>null</jk> (defaults to {@link Locale#getDefault()})
+	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Specifies to exclude the specified list of properties for the specified bean class.
-	 *
-	 * <p>
-	 * The keys are either fully-qualified or simple class names, and the values are comma-delimited lists of property
-	 * names.
-	 * The key <js>"*"</js> means all bean classes.
+	 * Used in the in the {@link BeanSession#convertToType(Object, Class)} method.
+	 */
+	public static final String BEAN_locale = PREFIX + "locale.s";
+
+	/**
+	 * Configuration property:  Media type.
 	 *
-	 * <p>
-	 * For example, <code>{Bean1:<js>'foo,bar'</js>}</code> means don't serialize the <code>foo</code> and
-	 * <code>bar</code> properties on the specified bean.
+	 *	<h5 class='section'>Property:</h5>
+	 * <ul>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.mediaType.s"</js>
+	 * 	<li><b>Data type:</b>  <code>String</code> ({@link MediaType})
+	 * 	<li><b>Default:</b>  <jk>null</jk>
+	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
+	 * </ul>
 	 *
+	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Setting applies to specified class and all subclasses.
+	 * Specifies a default media type value for serializer and parser sessions.
 	 */
-	public static final String BEAN_excludeProperties = PREFIX + "excludeProperties.sms";
+	public static final String BEAN_mediaType = PREFIX + "mediaType.s";
 
 	/**
-	 * Configuration property:  Bean lookup dictionary.
+	 * Configuration property:  Look for bean methods with the specified minimum visibility.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.beanDictionary.lc"</js>
-	 * 	<li><b>Data type:</b>  <code>List&lt;Class&gt;</code>
-	 * 	<li><b>Default:</b>  empty list
+	 * 	<li><b>Name:</b>  <js>"BeanContext.methodVisibility.s"</js>
+	 * 	<li><b>Data type:</b>  <code>String</code> ({@link Visibility})
+	 * 	<li><b>Default:</b>  <js>"PUBLIC"</js>
 	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
-	 * 
+	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * The list of classes that make up the bean dictionary in this bean context.
-	 * 
-	 * <p>
-	 * A dictionary is a name/class mapping used to find class types during parsing when they cannot be inferred
-	 * through reflection.
-	 * <br>The names are defined through the {@link Bean#typeName()} annotation defined on the bean class.
-	 * 
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode'>
-	 * 	BeanContext bc = BeanContext.<jsm>create</jsm>().beanDictionary(Bar.<jk>class</jk>, Baz.<jk>class</jk>).build();
-	 * </p>
+	 * Methods are not considered bean getters/setters unless they meet the minimum visibility requirements.
+	 * For example, if the visibility is <code>PUBLIC</code> and the bean method is <jk>protected</jk>, then the method
+	 * will not be interpreted as a bean getter or setter.
+	 */
+	public static final String BEAN_methodVisibility = PREFIX + "methodVisibility.s";
+
+	/**
+	 * Configuration property:  Classes to be excluded from consideration as being beans.
+	 *
+	 *	<h5 class='section'>Property:</h5>
+	 * <ul>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.notBeanClasses.sc"</js>
+	 * 	<li><b>Data type:</b>  <code>Set&lt;Class&gt;</code>
+	 * 	<li><b>Default:</b>  empty set
+	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
+	 * </ul>
 	 *
+	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * <h5 class='section'>Notes:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li>Properties:
-	 * 		<ul> 	
-	 * 			<li>{@link BeanContext#BEAN_beanDictionary}
-	 * 			<li>{@link BeanContext#BEAN_beanDictionary_add}
-	 * 			<li>{@link BeanContext#BEAN_beanDictionary_remove}
-	 * 		</ul>
-	 * 	<li>Annotations:  
-	 * 		<ul>
-	 * 			<li>{@link Bean#beanDictionary()}
-	 * 			<li>{@link BeanProperty#beanDictionary()}
-	 * 		</ul>
-	 * 	<li>Methods:  
-	 * 		<ul>
-	 * 			<li>{@link BeanContextBuilder#beanDictionary(Object...)}
-	 * 			<li>{@link BeanContextBuilder#beanDictionary(boolean,Object...)}
-	 * 			<li>{@link BeanContextBuilder#beanDictionaryRemove(Object...)}
-	 * 		</ul>
-	 * 	<li>Values can consist of any of the following types:
-	 *			<ul>
-	 * 			<li>Any bean class that specifies a value for {@link Bean#typeName() @Bean.typeName()}.
-	 * 			<li>Any subclass of {@link BeanDictionaryList} containing a collection of bean classes with type name
-	 * 				annotations.
-	 * 			<li>Any subclass of {@link BeanDictionaryMap} containing a mapping of type names to classes without type name
-	 * 				annotations.
-	 * 		</ul>
-	 * 	<li>See <a class='doclink' href='../../../overview-summary.html#juneau-marshall.BeanDictionaries'>Bean Names and Dictionaries</a> 
-	 * 		for more information.
-	 *	</ul>
+	 * Not-bean classes are typically converted to <code>Strings</code> during serialization even if they appear to be
+	 * bean-like.
 	 */
-	public static final String BEAN_beanDictionary = PREFIX + "beanDictionary.lc";
+	public static final String BEAN_notBeanClasses = PREFIX + "notBeanClasses.sc";
 
 	/**
-	 * Configuration property:  Add to bean lookup dictionary.
+	 * Configuration property:  Add to classes that should not be considered beans.
 	 */
-	public static final String BEAN_beanDictionary_add = PREFIX + "beanDictionary.lc/add";
+	public static final String BEAN_notBeanClasses_add = PREFIX + "notBeanClasses.sc/add";
 
 	/**
-	 * Configuration property:  Remove from bean lookup dictionary.
+	 * Configuration property:  Remove from classes that should not be considered beans.
 	 */
-	public static final String BEAN_beanDictionary_remove = PREFIX + "beanDictionary.lc/remove";
+	public static final String BEAN_notBeanClasses_remove = PREFIX + "notBeanClasses.sc/remove";
 
 	/**
-	 * Configuration property:  Name to use for the bean type properties used to represent a bean type.
+	 * Configuration property:  Packages whose classes should not be considered beans.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.beanTypePropertyName.s"</js>
-	 * 	<li><b>Data type:</b>  <code>String</code>
-	 * 	<li><b>Default:</b>  <js>"_type"</js>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.notBeanPackages.ss"</js>
+	 * 	<li><b>Data type:</b>  <code>Set&lt;String&gt;</code>
+	 * 	<li><b>Default:</b>
+	 * 	<ul>
+	 * 		<li><code>java.lang</code>
+	 * 		<li><code>java.lang.annotation</code>
+	 * 		<li><code>java.lang.ref</code>
+	 * 		<li><code>java.lang.reflect</code>
+	 * 		<li><code>java.io</code>
+	 * 		<li><code>java.net</code>
+	 * 		<li><code>java.nio.*</code>
+	 * 		<li><code>java.util.*</code>
+	 * 	</ul>
 	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
+	 *
+	 *	<h5 class='section'>Description:</h5>
+	 * <p>
+	 * When specified, the current list of ignore packages are appended to.
+	 *
+	 * <p>
+	 * Any classes within these packages will be serialized to strings using {@link Object#toString()}.
+	 *
+	 * <p>
+	 * Note that you can specify prefix patterns to include all subpackages.
 	 */
-	public static final String BEAN_beanTypePropertyName = PREFIX + "beanTypePropertyName.s";
+	public static final String BEAN_notBeanPackages = PREFIX + "notBeanPackages.ss";
 
 	/**
-	 * Configuration property:  Default parser to use when converting <code>Strings</code> to POJOs.
+	 * Configuration property:  Add to packages whose classes should not be considered beans.
+	 */
+	public static final String BEAN_notBeanPackages_add = PREFIX + "notBeanPackages.ss/add";
+
+	/**
+	 * Configuration property:  Remove from packages whose classes should not be considered beans.
+	 */
+	public static final String BEAN_notBeanPackages_remove = PREFIX + "notBeanPackages.ss/remove";
+
+	/**
+	 * Configuration property:  POJO swaps to apply to Java objects.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.defaultParser.c"</js>
-	 * 	<li><b>Data type:</b>  <code>Class</code>
-	 * 	<li><b>Default:</b>  {@link JsonSerializer}
+	 * 	<li><b>Name:</b>  <js>"BeanContext.pojoSwaps.lc"</js>
+	 * 	<li><b>Data type:</b>  <code>List&lt;Class&gt;</code>
+	 * 	<li><b>Default:</b>  empty list
 	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Used in the in the {@link BeanSession#convertToType(Object, Class)} method.
+	 * There are two category of classes that can be passed in through this method:
+	 * <ul>
+	 * 	<li>Subclasses of {@link PojoSwap}.
+	 * 	<li>Surrogate classes.  A shortcut for defining a {@link SurrogateSwap}.
+	 * </ul>
+	 *
+	 * <p>
+	 * Multiple POJO swaps can be associated with a single class.
+	 * When multiple swaps are applicable to the same class, the media type pattern defined by
+	 * {@link PojoSwap#forMediaTypes()} or {@link Swap#mediaTypes()} are used to come up with the best match.
 	 */
-	public static final String BEAN_defaultParser = PREFIX + "defaultParser.c";
+	public static final String BEAN_pojoSwaps = PREFIX + "pojoSwaps.lc";
 
 	/**
-	 * Configuration property:  Locale.
+	 * Configuration property:  Add to POJO swap classes.
+	 */
+	public static final String BEAN_pojoSwaps_add = PREFIX + "pojoSwaps.lc/add";
+
+	/**
+	 * Configuration property:  Remove from POJO swap classes.
+	 */
+	public static final String BEAN_pojoSwaps_remove = PREFIX + "pojoSwaps.lc/remove";
+
+	/**
+	 * Configuration property:  Sort bean properties in alphabetical order.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.locale.s"</js>
-	 * 	<li><b>Data type:</b>  <code>String</code> ({@link Locale})
-	 * 	<li><b>Default:</b>  <jk>null</jk> (defaults to {@link Locale#getDefault()})
-	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.sortProperties.b"</js>
+	 * 	<li><b>Data type:</b>  <code>Boolean</code>
+	 * 	<li><b>Default:</b>  <jk>false</jk>
+	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Used in the in the {@link BeanSession#convertToType(Object, Class)} method.
+	 * When <jk>true</jk>, 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).
+	 *
+	 * <p>
+	 * This property is disabled by default so that IBM JVM users don't have to use {@link Bean @Bean} annotations
+	 * to force bean properties to be in a particular order and can just alter the order of the fields/methods
+	 * in the Java file.
 	 */
-	public static final String BEAN_locale = PREFIX + "locale.s";
+	public static final String BEAN_sortProperties = PREFIX + "sortProperties.b";
 
 	/**
 	 * Configuration property:  TimeZone.
@@ -908,53 +921,40 @@ public class BeanContext extends Context {
 	public static final String BEAN_timeZone = PREFIX + "timeZone.s";
 
 	/**
-	 * Configuration property:  Media type.
+	 * Configuration property:  Use interface proxies.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.mediaType.s"</js>
-	 * 	<li><b>Data type:</b>  <code>String</code> ({@link MediaType})
-	 * 	<li><b>Default:</b>  <jk>null</jk>
-	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.useInterfaceProxies.b"</js>
+	 * 	<li><b>Data type:</b>  <code>Boolean</code>
+	 * 	<li><b>Default:</b>  <jk>true</jk>
+	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Specifies a default media type value for serializer and parser sessions.
+	 * If <jk>true</jk>, then interfaces will be instantiated as proxy classes through the use of an
+	 * {@link InvocationHandler} if there is no other way of instantiating them.
 	 */
-	public static final String BEAN_mediaType = PREFIX + "mediaType.s";
+	public static final String BEAN_useInterfaceProxies = PREFIX + "useInterfaceProxies.b";
 
 	/**
-	 * Configuration property:  Debug mode.
+	 * Configuration property:  Use Java {@link Introspector} for determining bean properties.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"BeanContext.debug.b"</js>
+	 * 	<li><b>Name:</b>  <js>"BeanContext.useJavaBeanIntrospector.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
 	 * 	<li><b>Default:</b>  <jk>false</jk>
-	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
+	 * 	<li><b>Session-overridable:</b>  <jk>false</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Enables the following additional information during serialization:
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		When bean getters throws exceptions, the exception includes the object stack information
-	 * 		in order to determine how that method was invoked.
-	 * 	<li>
-	 * 		Enables {@link Serializer#SERIALIZER_detectRecursions}.
-	 * </ul>
-	 *
-	 * <p>
-	 * Enables the following additional information during parsing:
-	 * <ul class='spaced-list'>
-	 * 	<li>
-	 * 		When bean setters throws exceptions, the exception includes the object stack information
-	 * 		in order to determine how that method was invoked.
-	 * </ul>
+	 * Using the built-in Java bean introspector will not pick up fields or non-standard getters/setters.
+	 * Most {@link Bean @Bean} annotations will be ignored.
 	 */
-	public static final String BEAN_debug = PREFIX + "debug.b";
+	public static final String BEAN_useJavaBeanIntrospector = PREFIX + "useJavaBeanIntrospector.b";
 
 	/*
 	 * The default package pattern exclusion list.

http://git-wip-us.apache.org/repos/asf/juneau/blob/4eaa0728/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
index 1ad5c9a..abd6e06 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
@@ -77,11 +77,11 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 	private static final String PREFIX = "HtmlDocSerializer.";
 
 	/**
-	 * Configuration property:  Header section contents.
+	 * Configuration property:  Aside section contents.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"HtmlDocSerializer.ls"</js>
+	 * 	<li><b>Name:</b>  <js>"HtmlDocSerializer.aside.ls"</js>
 	 * 	<li><b>Data type:</b>  <code>List&lt;String&gt;</code>
 	 * 	<li><b>Default:</b>  empty list
 	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
@@ -89,28 +89,36 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Allows you to override the contents of the header section on the HTML page.
-	 * The header section normally contains the title and description at the top of the page.
+	 * Allows you to specify the contents of the aside section on the HTML page.
+	 * The aside section floats on the right of the page for providing content supporting the serialized content of
+	 * the page.
+	 *
+	 * <p>
+	 * By default, the aside section is empty.
 	 *
 	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(
 	 * 		htmldoc=<ja>@HtmlDoc</ja>(
-	 * 			header={
-	 * 				<js>"&lt;h1&gt;My own header&lt;/h1&gt;"</js>
+	 * 			aside={
+	 * 				<js>"&lt;ul&gt;"</js>,
+	 * 				<js>"	&lt;li&gt;Item 1"</js>,
+	 * 				<js>"	&lt;li&gt;Item 2"</js>,
+	 * 				<js>"	&lt;li&gt;Item 3"</js>,
+	 * 				<js>"&lt;/ul&gt;"</js>
 	 * 			}
 	 * 		)
 	 * 	)
 	 * </p>
 	 */
-	public static final String HTMLDOC_header = PREFIX + "header.ls";
+	public static final String HTMLDOC_aside = PREFIX + "aside.ls";
 
 	/**
-	 * Configuration property:  Page navigation links.
+	 * Configuration property:  Footer section contents.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"HtmlDocSerializer.navlinks.ls"</js>
+	 * 	<li><b>Name:</b>  <js>"HtmlDocSerializer.footer.ls"</js>
 	 * 	<li><b>Data type:</b>  <code>List&lt;String&gt;</code>
 	 * 	<li><b>Default:</b>  empty list
 	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
@@ -118,71 +126,69 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Adds a list of hyperlinks immediately under the title and description but above the content of the page.
+	 * Allows you to specify the contents of the footer section on the HTML page.
 	 *
 	 * <p>
-	 * This can be used to provide convenient hyperlinks when viewing the REST interface from a browser.
+	 * By default, the footer section is empty.
 	 *
-	 * <p>
-	 * The value is an array of strings with two possible values:
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode'>
+	 * 	<ja>@RestResource</ja>(
+	 * 		htmldoc=<ja>@HtmlDoc</ja>(
+	 * 			footer={
+	 * 				<js>"&lt;b&gt;This interface is great!&lt;/b&gt;"</js>
+	 * 			}
+	 * 		)
+	 * 	)
+	 * </p>
+	 */
+	public static final String HTMLDOC_footer = PREFIX + "footer.ls";
+
+	/**
+	 * Configuration property:  Additional head section content.
+	 *
+	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li>A key-value pair representing a hyperlink label and href:
-	 * 		<br><js>"google: http://google.com"</js>
-	 * 	<li>Arbitrary HTML.
+	 * 	<li><b>Name:</b>  <js>"HtmlDocSerializer.head.ls"</js>
+	 * 	<li><b>Data type:</b>  <code>List&lt;String&gt;</code>
+	 * 	<li><b>Default:</b>  empty list
+	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
 	 * </ul>
 	 *
+	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Relative URLs are considered relative to the servlet path.
-	 * For example, if the servlet path is <js>"http://localhost/myContext/myServlet"</js>, and the
-	 * URL is <js>"foo"</js>, the link becomes <js>"http://localhost/myContext/myServlet/foo"</js>.
-	 * Absolute (<js>"/myOtherContext/foo"</js>) and fully-qualified (<js>"http://localhost2/foo"</js>) URLs
-	 * can also be used in addition to various other protocols specified by {@link UriResolver} such as
-	 * <js>"servlet:/..."</js>.
+	 * Adds the specified HTML content to the head section of the page.
 	 *
 	 * <h5 class='section'>Example:</h5>
-	 * <p>
-	 * The <code>AddressBookResource</code> sample class uses this property...
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(
 	 * 		properties={
-	 * 			<ja>@Property</ja>(name=HtmlDocSerializer.<jsf>HTMLDOC_navlinks</jsf>,
-	 * 				value=<js>"['options: ?method=OPTIONS', 'doc: doc']"</js>)
+	 * 			<ja>@Property</ja>(name=HtmlDocSerializer.<jsf>HTMLDOC_links</jsf>,
+	 * 				value=<js>"['<link rel=\"icon\" href=\"htdocs/mypageicon.ico\">']"</js>)
 	 * 		}
 	 * 	)
-	 * 	<jk>public class</jk> AddressBookResource <jk>extends</jk> RestServletJenaDefault {
 	 * </p>
 	 *
 	 * <p>
-	 * 	...to produce this list of links on the HTML page...
-	 * <img class='bordered' src='doc-files/HTML_LINKS.png'>
-	 *
-	 * <p>
 	 * A shortcut on <ja>@RestResource</ja> is also provided for this setting:
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(
 	 * 		htmldoc=@HtmlDoc(
-	 * 			navlinks={
-	 * 				<js>"options: ?method=OPTIONS"</js>,
-	 * 				<js>"doc: doc"</js>
+	 * 			head={
+	 * 				<js>"<link rel='icon' href='$U{servlet:/htdocs/mypageicon.ico}'>"</js>
 	 * 			}
 	 * 		)
 	 * 	)
-	 * 	<jk>public class</jk> AddressBookResource <jk>extends</jk> RestServletJenaDefault {
 	 * </p>
 	 */
-	public static final String HTMLDOC_navlinks = PREFIX + "navlinks.ls";
-
-	/**
-	 * Configuration property:  Add to the {@link #HTMLDOC_navlinks} property.
-	 */
-	public static final String HTMLDOC_navlinks_add = PREFIX + "navlinks.ls/add";
+	public static final String HTMLDOC_head = PREFIX + "head.ls";
 
 	/**
-	 * Configuration property:  Nav section contents.
+	 * Configuration property:  Header section contents.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"HtmlDocSerializer.nav.ls"</js>
+	 * 	<li><b>Name:</b>  <js>"HtmlDocSerializer.ls"</js>
 	 * 	<li><b>Data type:</b>  <code>List&lt;String&gt;</code>
 	 * 	<li><b>Default:</b>  empty list
 	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
@@ -190,31 +196,28 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Allows you to override the contents of the nav section on the HTML page.
-	 * The nav section normally contains the page links at the top of the page.
+	 * Allows you to override the contents of the header section on the HTML page.
+	 * The header section normally contains the title and description at the top of the page.
 	 *
 	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(
 	 * 		htmldoc=<ja>@HtmlDoc</ja>(
-	 * 			nav={
-	 * 				<js>"&lt;p class='special-navigation'&gt;This is my special navigation content&lt;/p&gt;"</js>
+	 * 			header={
+	 * 				<js>"&lt;h1&gt;My own header&lt;/h1&gt;"</js>
 	 * 			}
 	 * 		)
 	 * 	)
 	 * </p>
-	 *
-	 * <p>
-	 * When this property is specified, the {@link #HTMLDOC_navlinks} property is ignored.
 	 */
-	public static final String HTMLDOC_nav = PREFIX + "nav.ls";
+	public static final String HTMLDOC_header = PREFIX + "header.ls";
 
 	/**
-	 * Configuration property:  Aside section contents.
+	 * Configuration property:  Nav section contents.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"HtmlDocSerializer.aside.ls"</js>
+	 * 	<li><b>Name:</b>  <js>"HtmlDocSerializer.nav.ls"</js>
 	 * 	<li><b>Data type:</b>  <code>List&lt;String&gt;</code>
 	 * 	<li><b>Default:</b>  empty list
 	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
@@ -222,36 +225,31 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Allows you to specify the contents of the aside section on the HTML page.
-	 * The aside section floats on the right of the page for providing content supporting the serialized content of
-	 * the page.
-	 *
-	 * <p>
-	 * By default, the aside section is empty.
+	 * Allows you to override the contents of the nav section on the HTML page.
+	 * The nav section normally contains the page links at the top of the page.
 	 *
 	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(
 	 * 		htmldoc=<ja>@HtmlDoc</ja>(
-	 * 			aside={
-	 * 				<js>"&lt;ul&gt;"</js>,
-	 * 				<js>"	&lt;li&gt;Item 1"</js>,
-	 * 				<js>"	&lt;li&gt;Item 2"</js>,
-	 * 				<js>"	&lt;li&gt;Item 3"</js>,
-	 * 				<js>"&lt;/ul&gt;"</js>
+	 * 			nav={
+	 * 				<js>"&lt;p class='special-navigation'&gt;This is my special navigation content&lt;/p&gt;"</js>
 	 * 			}
 	 * 		)
 	 * 	)
 	 * </p>
+	 *
+	 * <p>
+	 * When this property is specified, the {@link #HTMLDOC_navlinks} property is ignored.
 	 */
-	public static final String HTMLDOC_aside = PREFIX + "aside.ls";
+	public static final String HTMLDOC_nav = PREFIX + "nav.ls";
 
 	/**
-	 * Configuration property:  Footer section contents.
+	 * Configuration property:  Page navigation links.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"HtmlDocSerializer.footer.ls"</js>
+	 * 	<li><b>Name:</b>  <js>"HtmlDocSerializer.navlinks.ls"</js>
 	 * 	<li><b>Data type:</b>  <code>List&lt;String&gt;</code>
 	 * 	<li><b>Default:</b>  empty list
 	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
@@ -259,23 +257,64 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Allows you to specify the contents of the footer section on the HTML page.
+	 * Adds a list of hyperlinks immediately under the title and description but above the content of the page.
 	 *
 	 * <p>
-	 * By default, the footer section is empty.
+	 * This can be used to provide convenient hyperlinks when viewing the REST interface from a browser.
+	 *
+	 * <p>
+	 * The value is an array of strings with two possible values:
+	 * <ul>
+	 * 	<li>A key-value pair representing a hyperlink label and href:
+	 * 		<br><js>"google: http://google.com"</js>
+	 * 	<li>Arbitrary HTML.
+	 * </ul>
+	 *
+	 * <p>
+	 * Relative URLs are considered relative to the servlet path.
+	 * For example, if the servlet path is <js>"http://localhost/myContext/myServlet"</js>, and the
+	 * URL is <js>"foo"</js>, the link becomes <js>"http://localhost/myContext/myServlet/foo"</js>.
+	 * Absolute (<js>"/myOtherContext/foo"</js>) and fully-qualified (<js>"http://localhost2/foo"</js>) URLs
+	 * can also be used in addition to various other protocols specified by {@link UriResolver} such as
+	 * <js>"servlet:/..."</js>.
 	 *
 	 * <h5 class='section'>Example:</h5>
+	 * <p>
+	 * The <code>AddressBookResource</code> sample class uses this property...
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(
-	 * 		htmldoc=<ja>@HtmlDoc</ja>(
-	 * 			footer={
-	 * 				<js>"&lt;b&gt;This interface is great!&lt;/b&gt;"</js>
+	 * 		properties={
+	 * 			<ja>@Property</ja>(name=HtmlDocSerializer.<jsf>HTMLDOC_navlinks</jsf>,
+	 * 				value=<js>"['options: ?method=OPTIONS', 'doc: doc']"</js>)
+	 * 		}
+	 * 	)
+	 * 	<jk>public class</jk> AddressBookResource <jk>extends</jk> RestServletJenaDefault {
+	 * </p>
+	 *
+	 * <p>
+	 * 	...to produce this list of links on the HTML page...
+	 * <img class='bordered' src='doc-files/HTML_LINKS.png'>
+	 *
+	 * <p>
+	 * A shortcut on <ja>@RestResource</ja> is also provided for this setting:
+	 * <p class='bcode'>
+	 * 	<ja>@RestResource</ja>(
+	 * 		htmldoc=@HtmlDoc(
+	 * 			navlinks={
+	 * 				<js>"options: ?method=OPTIONS"</js>,
+	 * 				<js>"doc: doc"</js>
 	 * 			}
 	 * 		)
 	 * 	)
+	 * 	<jk>public class</jk> AddressBookResource <jk>extends</jk> RestServletJenaDefault {
 	 * </p>
 	 */
-	public static final String HTMLDOC_footer = PREFIX + "footer.ls";
+	public static final String HTMLDOC_navlinks = PREFIX + "navlinks.ls";
+
+	/**
+	 * Configuration property:  Add to the {@link #HTMLDOC_navlinks} property.
+	 */
+	public static final String HTMLDOC_navlinks_add = PREFIX + "navlinks.ls/add";
 
 	/**
 	 * Configuration property:  No-results message.
@@ -324,36 +363,11 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 	public static final String HTMLDOC_nowrap = PREFIX + "nowrap.b";
 
 	/**
-	 * Configuration property:  Stylesheet import URLs.
-	 *
-	 *	<h5 class='section'>Property:</h5>
-	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"HtmlDocSerializer.stylesheet.ls"</js>
-	 * 	<li><b>Data type:</b>  <code>List&lt;String&gt;</code>
-	 * 	<li><b>Default:</b>  empty list
-	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
-	 * </ul>
-	 *
-	 *	<h5 class='section'>Description:</h5>
-	 * <p>
-	 * Adds a link to the specified stylesheet URL.
-	 *
-	 * <p>
-	 * Note that this stylesheet is controlled by the <code><ja>@RestResource</ja>.stylesheet()</code> annotation.
-	 */
-	public static final String HTMLDOC_stylesheet = PREFIX + "stylesheet.ls";
-
-	/**
-	 * Configuration property:  Add to the {@link #HTMLDOC_stylesheet} property.
-	 */
-	public static final String HTMLDOC_stylesheet_add = PREFIX + "stylesheet.ls/add";
-
-	/**
-	 * Configuration property:  CSS style code.
+	 * Configuration property:  Javascript code.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"HtmlDocSerializer.style.ls"</js>
+	 * 	<li><b>Name:</b>  <js>"HtmlDocSerializer.script.ls"</js>
 	 * 	<li><b>Data type:</b>  <code>List&lt;String&gt;</code>
 	 * 	<li><b>Default:</b>  empty list
 	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
@@ -361,14 +375,14 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Adds the specified CSS instructions to the HTML page.
+	 * Adds the specified Javascript code to the HTML page.
 	 *
 	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(
 	 * 		properties={
-	 * 			<ja>@Property</ja>(name=HtmlDocSerializer.<jsf>HTMLDOC_style</jsf>,
-	 * 				value=<js>"h3 { color: red; }\nh5 { font-weight: bold; }"</js>)
+	 * 			<ja>@Property</ja>(name=HtmlDocSerializer.<jsf>HTMLDOC_script</jsf>,
+	 * 				value=<js>"alert('hello!');"</js>)
 	 * 		}
 	 * 	)
 	 * </p>
@@ -378,27 +392,26 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(
 	 * 		htmldoc=@HtmlDoc(
-	 * 			style={
-	 * 				<js>"h3 { color: red; }"</js>,
-	 * 				<js>"h5 { font-weight: bold; }"</js>
+	 * 			script={
+	 * 				<js>"alert('hello!');"</js>
 	 * 			}
 	 * 		)
 	 * 	)
 	 * </p>
 	 */
-	public static final String HTMLDOC_style = PREFIX + "style.ls";
+	public static final String HTMLDOC_script = PREFIX + "script.ls";
 
 	/**
-	 * Configuration property:  Add to the {@link #HTMLDOC_style} property.
+	 * Configuration property:  Add to the {@link #HTMLDOC_script} property.
 	 */
-	public static final String HTMLDOC_style_add = PREFIX + "style.ls/add";
+	public static final String HTMLDOC_script_add = PREFIX + "script.ls/add";
 
 	/**
-	 * Configuration property:  Javascript code.
+	 * Configuration property:  CSS style code.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"HtmlDocSerializer.script.ls"</js>
+	 * 	<li><b>Name:</b>  <js>"HtmlDocSerializer.style.ls"</js>
 	 * 	<li><b>Data type:</b>  <code>List&lt;String&gt;</code>
 	 * 	<li><b>Default:</b>  empty list
 	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
@@ -406,14 +419,14 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Adds the specified Javascript code to the HTML page.
+	 * Adds the specified CSS instructions to the HTML page.
 	 *
 	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(
 	 * 		properties={
-	 * 			<ja>@Property</ja>(name=HtmlDocSerializer.<jsf>HTMLDOC_script</jsf>,
-	 * 				value=<js>"alert('hello!');"</js>)
+	 * 			<ja>@Property</ja>(name=HtmlDocSerializer.<jsf>HTMLDOC_style</jsf>,
+	 * 				value=<js>"h3 { color: red; }\nh5 { font-weight: bold; }"</js>)
 	 * 		}
 	 * 	)
 	 * </p>
@@ -423,26 +436,27 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 	 * <p class='bcode'>
 	 * 	<ja>@RestResource</ja>(
 	 * 		htmldoc=@HtmlDoc(
-	 * 			script={
-	 * 				<js>"alert('hello!');"</js>
+	 * 			style={
+	 * 				<js>"h3 { color: red; }"</js>,
+	 * 				<js>"h5 { font-weight: bold; }"</js>
 	 * 			}
 	 * 		)
 	 * 	)
 	 * </p>
 	 */
-	public static final String HTMLDOC_script = PREFIX + "script.ls";
+	public static final String HTMLDOC_style = PREFIX + "style.ls";
 
 	/**
-	 * Configuration property:  Add to the {@link #HTMLDOC_script} property.
+	 * Configuration property:  Add to the {@link #HTMLDOC_style} property.
 	 */
-	public static final String HTMLDOC_script_add = PREFIX + "script.ls/add";
+	public static final String HTMLDOC_style_add = PREFIX + "style.ls/add";
 
 	/**
-	 * Configuration property:  Additional head section content.
+	 * Configuration property:  Stylesheet import URLs.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"HtmlDocSerializer.head.ls"</js>
+	 * 	<li><b>Name:</b>  <js>"HtmlDocSerializer.stylesheet.ls"</js>
 	 * 	<li><b>Data type:</b>  <code>List&lt;String&gt;</code>
 	 * 	<li><b>Default:</b>  empty list
 	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
@@ -450,36 +464,17 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Adds the specified HTML content to the head section of the page.
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode'>
-	 * 	<ja>@RestResource</ja>(
-	 * 		properties={
-	 * 			<ja>@Property</ja>(name=HtmlDocSerializer.<jsf>HTMLDOC_links</jsf>,
-	 * 				value=<js>"['<link rel=\"icon\" href=\"htdocs/mypageicon.ico\">']"</js>)
-	 * 		}
-	 * 	)
-	 * </p>
+	 * Adds a link to the specified stylesheet URL.
 	 *
 	 * <p>
-	 * A shortcut on <ja>@RestResource</ja> is also provided for this setting:
-	 * <p class='bcode'>
-	 * 	<ja>@RestResource</ja>(
-	 * 		htmldoc=@HtmlDoc(
-	 * 			head={
-	 * 				<js>"<link rel='icon' href='$U{servlet:/htdocs/mypageicon.ico}'>"</js>
-	 * 			}
-	 * 		)
-	 * 	)
-	 * </p>
+	 * Note that this stylesheet is controlled by the <code><ja>@RestResource</ja>.stylesheet()</code> annotation.
 	 */
-	public static final String HTMLDOC_head = PREFIX + "head.ls";
+	public static final String HTMLDOC_stylesheet = PREFIX + "stylesheet.ls";
 
 	/**
-	 * Configuration property:  Add to the {@link #HTMLDOC_head} property.
+	 * Configuration property:  Add to the {@link #HTMLDOC_stylesheet} property.
 	 */
-	public static final String HTMLDOC_links_add = PREFIX + "head.ls./add";
+	public static final String HTMLDOC_stylesheet_add = PREFIX + "stylesheet.ls/add";
 
 	/**
 	 * Configuration property:  HTML document template.

http://git-wip-us.apache.org/repos/asf/juneau/blob/4eaa0728/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java
index 52e94ed..73b5a62 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java
@@ -131,50 +131,49 @@ public class HtmlSerializer extends XmlSerializer {
 	private static final String PREFIX = "HtmlSerializer.";
 
 	/**
-	 * Configuration property:  Anchor text source.
+	 * Configuration property:  Add <js>"_type"</js> properties when needed.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"HtmlSerializer.uriAnchorText.s"</js>
-	 * 	<li><b>Data type:</b>  <code>String</code> ({@link AnchorText})
-	 * 	<li><b>Default:</b>  <js>"TO_STRING"</js>
+	 * 	<li><b>Name:</b>  <js>"HtmlSerializer.addBeanTypeProperties.b"</js>
+	 * 	<li><b>Data type:</b>  <code>Boolean</code>
+	 * 	<li><b>Default:</b>  <jk>false</jk>
 	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * When creating anchor tags (e.g. <code><xt>&lt;a</xt> <xa>href</xa>=<xs>'...'</xs>
-	 * <xt>&gt;</xt>text<xt>&lt;/a&gt;</xt></code>) in HTML, this setting defines what to set the inner text to.
+	 * If <jk>true</jk>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred
+	 * through reflection.
+	 * This is used to recreate the correct objects during parsing if the object types cannot be inferred.
+	 * For example, when serializing a {@code Map<String,Object>} field, where the bean class cannot be determined
+	 * from the value type.
 	 *
 	 * <p>
-	 * See the {@link AnchorText} enum for possible values.
+	 * When present, this value overrides the {@link #SERIALIZER_addBeanTypeProperties} setting and is
+	 * provided to customize the behavior of specific serializers in a {@link SerializerGroup}.
 	 */
-	public static final String HTML_uriAnchorText = PREFIX + "uriAnchorText.s";
+	public static final String HTML_addBeanTypeProperties = PREFIX + "addBeanTypeProperties.b";
 
 	/**
-	 * Configuration property:  Look for URLs in {@link String Strings}.
+	 * Configuration property:  Add key/value headers on bean/map tables.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"HtmlSerializer.detectLinksInStrings.b"</js>
+	 * 	<li><b>Name:</b>  <js>"HtmlSerializer.addKeyValueTableHeaders.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
-	 * 	<li><b>Default:</b>  <jk>true</jk>
+	 * 	<li><b>Default:</b>  <jk>false</jk>
 	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
 	 * </ul>
-	 *
-	 *	<h5 class='section'>Description:</h5>
-	 * <p>
-	 * If a string looks like a URL (e.g. starts with <js>"http://"</js> or <js>"https://"</js>, then treat it like a URL
-	 * and make it into a hyperlink based on the rules specified by {@link #HTML_uriAnchorText}.
 	 */
-	public static final String HTML_detectLinksInStrings = PREFIX + "detectLinksInStrings.b";
+	public static final String HTML_addKeyValueTableHeaders = PREFIX + "addKeyValueTableHeaders.b";
 
 	/**
-	 * Configuration property:  Look for link labels in the <js>"label"</js> parameter of the URL.
+	 * Configuration property:  Look for URLs in {@link String Strings}.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"HtmlSerializer.lookForLabelParameters.b"</js>
+	 * 	<li><b>Name:</b>  <js>"HtmlSerializer.detectLinksInStrings.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
 	 * 	<li><b>Default:</b>  <jk>true</jk>
 	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
@@ -182,12 +181,10 @@ public class HtmlSerializer extends XmlSerializer {
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * If the URL has a label parameter (e.g. <js>"?label=foobar"</js>), then use that as the anchor text of the link.
-	 *
-	 * <p>
-	 * The parameter name can be changed via the {@link #HTML_labelParameter} property.
+	 * If a string looks like a URL (e.g. starts with <js>"http://"</js> or <js>"https://"</js>, then treat it like a URL
+	 * and make it into a hyperlink based on the rules specified by {@link #HTML_uriAnchorText}.
 	 */
-	public static final String HTML_lookForLabelParameters = PREFIX + "lookForLabelParameters.b";
+	public static final String HTML_detectLinksInStrings = PREFIX + "detectLinksInStrings.b";
 
 	/**
 	 * Configuration property:  The parameter name to use when using {@link #HTML_lookForLabelParameters}.
@@ -203,42 +200,45 @@ public class HtmlSerializer extends XmlSerializer {
 	public static final String HTML_labelParameter = PREFIX + "labelParameter.s";
 
 	/**
-	 * Configuration property:  Add key/value headers on bean/map tables.
+	 * Configuration property:  Look for link labels in the <js>"label"</js> parameter of the URL.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"HtmlSerializer.addKeyValueTableHeaders.b"</js>
+	 * 	<li><b>Name:</b>  <js>"HtmlSerializer.lookForLabelParameters.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
-	 * 	<li><b>Default:</b>  <jk>false</jk>
+	 * 	<li><b>Default:</b>  <jk>true</jk>
 	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
 	 * </ul>
+	 *
+	 *	<h5 class='section'>Description:</h5>
+	 * <p>
+	 * If the URL has a label parameter (e.g. <js>"?label=foobar"</js>), then use that as the anchor text of the link.
+	 *
+	 * <p>
+	 * The parameter name can be changed via the {@link #HTML_labelParameter} property.
 	 */
-	public static final String HTML_addKeyValueTableHeaders = PREFIX + "addKeyValueTableHeaders.b";
+	public static final String HTML_lookForLabelParameters = PREFIX + "lookForLabelParameters.b";
 
 	/**
-	 * Configuration property:  Add <js>"_type"</js> properties when needed.
+	 * Configuration property:  Anchor text source.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"HtmlSerializer.addBeanTypeProperties.b"</js>
-	 * 	<li><b>Data type:</b>  <code>Boolean</code>
-	 * 	<li><b>Default:</b>  <jk>false</jk>
+	 * 	<li><b>Name:</b>  <js>"HtmlSerializer.uriAnchorText.s"</js>
+	 * 	<li><b>Data type:</b>  <code>String</code> ({@link AnchorText})
+	 * 	<li><b>Default:</b>  <js>"TO_STRING"</js>
 	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * If <jk>true</jk>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred
-	 * through reflection.
-	 * This is used to recreate the correct objects during parsing if the object types cannot be inferred.
-	 * For example, when serializing a {@code Map<String,Object>} field, where the bean class cannot be determined
-	 * from the value type.
+	 * When creating anchor tags (e.g. <code><xt>&lt;a</xt> <xa>href</xa>=<xs>'...'</xs>
+	 * <xt>&gt;</xt>text<xt>&lt;/a&gt;</xt></code>) in HTML, this setting defines what to set the inner text to.
 	 *
 	 * <p>
-	 * When present, this value overrides the {@link #SERIALIZER_addBeanTypeProperties} setting and is
-	 * provided to customize the behavior of specific serializers in a {@link SerializerGroup}.
+	 * See the {@link AnchorText} enum for possible values.
 	 */
-	public static final String HTML_addBeanTypeProperties = PREFIX + "addBeanTypeProperties.b";
+	public static final String HTML_uriAnchorText = PREFIX + "uriAnchorText.s";
 
 
 	//-------------------------------------------------------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/juneau/blob/4eaa0728/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
index 60f8ac5..fb52a0e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
@@ -95,11 +95,11 @@ public class JsonSerializer extends WriterSerializer {
 	private static final String PREFIX = "JsonSerializer.";
 
 	/**
-	 * Configuration property:  Simple JSON mode.
+	 * Configuration property:  Add <js>"_type"</js> properties when needed.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"JsonSerializer.simpleMode.b"</js>
+	 * 	<li><b>Name:</b>  <js>"JsonSerializer.addBeanTypeProperties.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
 	 * 	<li><b>Default:</b>  <jk>false</jk>
 	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
@@ -107,10 +107,17 @@ public class JsonSerializer extends WriterSerializer {
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * If <jk>true</jk>, JSON attribute names will only be quoted when necessary.
-	 * Otherwise, they are always quoted.
+	 * If <jk>true</jk>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred
+	 * through reflection.
+	 * This is used to recreate the correct objects during parsing if the object types cannot be inferred.
+	 * For example, when serializing a {@code Map<String,Object>} field, where the bean class cannot be determined from
+	 * the value type.
+	 *
+	 * <p>
+	 * When present, this value overrides the {@link #SERIALIZER_addBeanTypeProperties} setting and is
+	 * provided to customize the behavior of specific serializers in a {@link SerializerGroup}.
 	 */
-	public static final String JSON_simpleMode = PREFIX + "simpleMode.b";
+	public static final String JSON_addBeanTypeProperties = PREFIX + "addBeanTypeProperties.b";
 
 	/**
 	 * Configuration property:  Prefix solidus <js>'/'</js> characters with escapes.
@@ -133,11 +140,11 @@ public class JsonSerializer extends WriterSerializer {
 	public static final String JSON_escapeSolidus = PREFIX + "escapeSolidus.b";
 
 	/**
-	 * Configuration property:  Add <js>"_type"</js> properties when needed.
+	 * Configuration property:  Simple JSON mode.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"JsonSerializer.addBeanTypeProperties.b"</js>
+	 * 	<li><b>Name:</b>  <js>"JsonSerializer.simpleMode.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
 	 * 	<li><b>Default:</b>  <jk>false</jk>
 	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
@@ -145,17 +152,10 @@ public class JsonSerializer extends WriterSerializer {
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * If <jk>true</jk>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred
-	 * through reflection.
-	 * This is used to recreate the correct objects during parsing if the object types cannot be inferred.
-	 * For example, when serializing a {@code Map<String,Object>} field, where the bean class cannot be determined from
-	 * the value type.
-	 *
-	 * <p>
-	 * When present, this value overrides the {@link #SERIALIZER_addBeanTypeProperties} setting and is
-	 * provided to customize the behavior of specific serializers in a {@link SerializerGroup}.
+	 * If <jk>true</jk>, JSON attribute names will only be quoted when necessary.
+	 * Otherwise, they are always quoted.
 	 */
-	public static final String JSON_addBeanTypeProperties = PREFIX + "addBeanTypeProperties.b";
+	public static final String JSON_simpleMode = PREFIX + "simpleMode.b";
 
 
 	//-------------------------------------------------------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/juneau/blob/4eaa0728/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
index 1447814..2d2a2f1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
@@ -140,22 +140,64 @@ public abstract class Parser extends BeanContext {
 	private static final String PREFIX = "Parser.";
 
 	/**
-	 * Configuration property:  Trim parsed strings.
+	 * Configuration property:  File charset.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"Parser.trimStrings.b"</js>
-	 * 	<li><b>Data type:</b>  <code>Boolean</code>
-	 * 	<li><b>Default:</b>  <jk>false</jk>
+	 * 	<li><b>Name:</b>  <js>"Parser.fileCharset.s"</js>
+	 * 	<li><b>Data type:</b>  <code>String</code>
+	 * 	<li><b>Default:</b>  <js>"default"</js>
 	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * If <jk>true</jk>, string values will be trimmed of whitespace using {@link String#trim()} before being added to
-	 * the POJO.
+	 * The character set to use for reading <code>Files</code> from the file system.
+	 *
+	 * <p>
+	 * Used when passing in files to {@link Parser#parse(Object, Class)}.
+	 *
+	 * <p>
+	 * <js>"default"</js> can be used to indicate the JVM default file system charset.
 	 */
-	public static final String PARSER_trimStrings = PREFIX + "trimStrings.b";
+	public static final String PARSER_fileCharset = PREFIX + "fileCharset.s";
+
+	/**
+	 * Configuration property:  Input stream charset.
+	 *
+	 *	<h5 class='section'>Property:</h5>
+	 * <ul>
+	 * 	<li><b>Name:</b>  <js>"Parser.inputStreamCharset.s"</js>
+	 * 	<li><b>Data type:</b>  <code>String</code>
+	 * 	<li><b>Default:</b>  <js>"UTF-8"</js>
+	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
+	 * </ul>
+	 *
+	 *	<h5 class='section'>Description:</h5>
+	 * <p>
+	 * The character set to use for converting <code>InputStreams</code> and byte arrays to readers.
+	 *
+	 * <p>
+	 * Used when passing in input streams and byte arrays to {@link Parser#parse(Object, Class)}.
+	 */
+	public static final String PARSER_inputStreamCharset = PREFIX + "inputStreamCharset.s";
+
+	/**
+	 * Configuration property:  Parser listener.
+	 *
+	 *	<h5 class='section'>Property:</h5>
+	 * <ul>
+	 * 	<li><b>Name:</b>  <js>"Parser.listener.c"</js>
+	 * 	<li><b>Data type:</b>  <code>Class&lt;? extends ParserListener&gt;</code>
+	 * 	<li><b>Default:</b>  <jk>null</jk>
+	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
+	 * </ul>
+	 *
+	 *	<h5 class='section'>Description:</h5>
+	 * <p>
+	 * Class used to listen for errors and warnings that occur during parsing.
+	 */
+	public static final String PARSER_listener = PREFIX + "listener.c";
 
 	/**
 	 * Configuration property:  Strict mode.
@@ -203,64 +245,22 @@ public abstract class Parser extends BeanContext {
 	public static final String PARSER_strict = PREFIX + "strict.b";
 
 	/**
-	 * Configuration property:  Input stream charset.
-	 *
-	 *	<h5 class='section'>Property:</h5>
-	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"Parser.inputStreamCharset.s"</js>
-	 * 	<li><b>Data type:</b>  <code>String</code>
-	 * 	<li><b>Default:</b>  <js>"UTF-8"</js>
-	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
-	 * </ul>
-	 *
-	 *	<h5 class='section'>Description:</h5>
-	 * <p>
-	 * The character set to use for converting <code>InputStreams</code> and byte arrays to readers.
-	 *
-	 * <p>
-	 * Used when passing in input streams and byte arrays to {@link Parser#parse(Object, Class)}.
-	 */
-	public static final String PARSER_inputStreamCharset = PREFIX + "inputStreamCharset.s";
-
-	/**
-	 * Configuration property:  File charset.
-	 *
-	 *	<h5 class='section'>Property:</h5>
-	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"Parser.fileCharset.s"</js>
-	 * 	<li><b>Data type:</b>  <code>String</code>
-	 * 	<li><b>Default:</b>  <js>"default"</js>
-	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
-	 * </ul>
-	 *
-	 *	<h5 class='section'>Description:</h5>
-	 * <p>
-	 * The character set to use for reading <code>Files</code> from the file system.
-	 *
-	 * <p>
-	 * Used when passing in files to {@link Parser#parse(Object, Class)}.
-	 *
-	 * <p>
-	 * <js>"default"</js> can be used to indicate the JVM default file system charset.
-	 */
-	public static final String PARSER_fileCharset = PREFIX + "fileCharset.s";
-
-	/**
-	 * Configuration property:  Parser listener.
+	 * Configuration property:  Trim parsed strings.
 	 *
 	 *	<h5 class='section'>Property:</h5>
 	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"Parser.listener.c"</js>
-	 * 	<li><b>Data type:</b>  <code>Class&lt;? extends ParserListener&gt;</code>
-	 * 	<li><b>Default:</b>  <jk>null</jk>
+	 * 	<li><b>Name:</b>  <js>"Parser.trimStrings.b"</js>
+	 * 	<li><b>Data type:</b>  <code>Boolean</code>
+	 * 	<li><b>Default:</b>  <jk>false</jk>
 	 * 	<li><b>Session-overridable:</b>  <jk>true</jk>
 	 * </ul>
 	 *
 	 *	<h5 class='section'>Description:</h5>
 	 * <p>
-	 * Class used to listen for errors and warnings that occur during parsing.
+	 * If <jk>true</jk>, string values will be trimmed of whitespace using {@link String#trim()} before being added to
+	 * the POJO.
 	 */
-	public static final String PARSER_listener = PREFIX + "listener.c";
+	public static final String PARSER_trimStrings = PREFIX + "trimStrings.b";
 
 	static Parser DEFAULT = new Parser(PropertyStore.create().build()) {
 		@Override