juneau-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jamesbog...@apache.org
Subject [juneau] branch master updated: Add convenience methods to Context.
Date Thu, 15 Feb 2018 01:11:35 GMT
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 b11351c  Add convenience methods to Context.
b11351c is described below

commit b11351cd3076484d71309750b5b75e620e2081ef
Author: JamesBognar <jamesbognar@apache.org>
AuthorDate: Wed Feb 14 20:11:28 2018 -0500

    Add convenience methods to Context.
---
 .../java/org/apache/juneau/ContextCacheTest.java   |   6 +-
 .../java/org/apache/juneau/jena/RdfParser.java     |   6 +-
 .../java/org/apache/juneau/jena/RdfSerializer.java |  20 +--
 .../main/java/org/apache/juneau/BeanContext.java   |  30 ++---
 .../src/main/java/org/apache/juneau/Context.java   |  44 ++++++
 .../org/apache/juneau/html/HtmlDocSerializer.java  |   4 +-
 .../org/apache/juneau/html/HtmlSerializer.java     |  10 +-
 .../java/org/apache/juneau/json/JsonParser.java    |   2 +-
 .../org/apache/juneau/json/JsonSerializer.java     |   6 +-
 .../apache/juneau/msgpack/MsgPackSerializer.java   |   2 +-
 .../main/java/org/apache/juneau/parser/Parser.java |  12 +-
 .../org/apache/juneau/serializer/Serializer.java   |  30 ++---
 .../org/apache/juneau/soap/SoapXmlSerializer.java  |   2 +-
 .../main/java/org/apache/juneau/uon/UonParser.java |   4 +-
 .../java/org/apache/juneau/uon/UonSerializer.java  |   4 +-
 .../juneau/urlencoding/UrlEncodingParser.java      |   2 +-
 .../juneau/urlencoding/UrlEncodingSerializer.java  |   2 +-
 .../main/java/org/apache/juneau/xml/XmlParser.java |   4 +-
 .../java/org/apache/juneau/xml/XmlSerializer.java  |   8 +-
 .../apache/juneau/yaml/proto/YamlSerializer.java   |   6 +-
 juneau-doc/src/main/javadoc/overview.html          | 149 ++++++++++++---------
 .../org/apache/juneau/rest/client/RestClient.java  |  12 +-
 .../java/org/apache/juneau/rest/RestContext.java   |  18 +--
 23 files changed, 227 insertions(+), 156 deletions(-)

diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ContextCacheTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ContextCacheTest.java
index 81deb98..afd4a9e 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ContextCacheTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/ContextCacheTest.java
@@ -128,7 +128,7 @@ public class ContextCacheTest {
 
 		public A(PropertyStore ps) {
 			super(ps);
-			f1 = getProperty("A.f1", String.class, "xxx");
+			f1 = getStringProperty("A.f1", "xxx");
 		}
 
 		@Override
@@ -147,7 +147,7 @@ public class ContextCacheTest {
 
 		public B(PropertyStore ps) {
 			super(ps);
-			f2 = getProperty("B.f2.i", Integer.class, -1);
+			f2 = getIntegerProperty("B.f2.i", -1);
 			
 		}
 	}
@@ -156,7 +156,7 @@ public class ContextCacheTest {
 		public boolean f3;
 		public C(PropertyStore ps) {
 			super(ps);
-			f3 = getProperty("C.f3.b", boolean.class, false);
+			f3 = getBooleanProperty("C.f3.b", false);
 		}
 	}
 	
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
index 505f92a..4126ce9 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
@@ -205,9 +205,9 @@ public class RdfParser extends ReaderParser implements RdfCommon {
 	 */
 	public RdfParser(PropertyStore ps, String...consumes) {
 		super(ps, consumes);
-		trimWhitespace = getProperty(RDF_trimWhitespace, boolean.class, false);
-		looseCollections = getProperty(RDF_looseCollections, boolean.class, false);
-		rdfLanguage = getProperty(RDF_language, String.class, "RDF/XML-ABBREV");
+		trimWhitespace = getBooleanProperty(RDF_trimWhitespace, false);
+		looseCollections = getBooleanProperty(RDF_looseCollections, false);
+		rdfLanguage = getStringProperty(RDF_language, "RDF/XML-ABBREV");
 		juneauNs = getInstanceProperty(RDF_juneauNs, Namespace.class, DEFAULT_JUNEAU_NS);
 		juneauBpNs = getInstanceProperty(RDF_juneauBpNs, Namespace.class, DEFAULT_JUNEAUBP_NS);
 		collectionFormat = getProperty(RDF_collectionFormat, RdfCollectionFormat.class, RdfCollectionFormat.DEFAULT);
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 aa2aae2..a0addab 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
@@ -336,17 +336,17 @@ public class RdfSerializer extends WriterSerializer implements RdfCommon {
 	 */
 	public RdfSerializer(PropertyStore ps, String produces, String...accept) {
 		super(ps, produces, accept);
-		addLiteralTypes = getProperty(RDF_addLiteralTypes, boolean.class, false);
-		addRootProperty = getProperty(RDF_addRootProperty, boolean.class, false);
-		useXmlNamespaces = getProperty(RDF_useXmlNamespaces, boolean.class, true);
-		looseCollections = getProperty(RDF_looseCollections, boolean.class, false);
-		autoDetectNamespaces = getProperty(RDF_autoDetectNamespaces, boolean.class, true);
-		rdfLanguage = getProperty(RDF_language, String.class, "RDF/XML-ABBREV");
-		juneauNs = ps.getProperty(RDF_juneauNs, Namespace.class, DEFAULT_JUNEAU_NS);
-		juneauBpNs = ps.getProperty(RDF_juneauBpNs, Namespace.class, DEFAULT_JUNEAUBP_NS);
+		addLiteralTypes = getBooleanProperty(RDF_addLiteralTypes, false);
+		addRootProperty = getBooleanProperty(RDF_addRootProperty, false);
+		useXmlNamespaces = getBooleanProperty(RDF_useXmlNamespaces, true);
+		looseCollections = getBooleanProperty(RDF_looseCollections, false);
+		autoDetectNamespaces = getBooleanProperty(RDF_autoDetectNamespaces, true);
+		rdfLanguage = getStringProperty(RDF_language, "RDF/XML-ABBREV");
+		juneauNs = getProperty(RDF_juneauNs, Namespace.class, DEFAULT_JUNEAU_NS);
+		juneauBpNs = getProperty(RDF_juneauBpNs, Namespace.class, DEFAULT_JUNEAUBP_NS);
 		collectionFormat = getProperty(RDF_collectionFormat, RdfCollectionFormat.class, RdfCollectionFormat.DEFAULT);
-		namespaces = ps.getProperty(RDF_namespaces, Namespace[].class, new Namespace[0]);
-		addBeanTypeProperties = getProperty(RDF_addBeanTypeProperties, boolean.class, getProperty(SERIALIZER_addBeanTypeProperties, boolean.class, true));
+		namespaces = getProperty(RDF_namespaces, Namespace[].class, new Namespace[0]);
+		addBeanTypeProperties = getBooleanProperty(RDF_addBeanTypeProperties, getBooleanProperty(SERIALIZER_addBeanTypeProperties, true));
 		
 		Map<String,Object> m = new LinkedHashMap<>();
 		for (String k : getPropertyKeys("RdfCommon")) 
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 89a1225..36952be 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
@@ -1787,21 +1787,21 @@ public class BeanContext extends Context {
 
 		beanHashCode = ps.hashCode("BeanContext");
 
-		beansRequireDefaultConstructor = getProperty(BEAN_beansRequireDefaultConstructor, boolean.class, false);
-		beansRequireSerializable = getProperty(BEAN_beansRequireSerializable, boolean.class, false);
-		beansRequireSettersForGetters = getProperty(BEAN_beansRequireSettersForGetters, boolean.class, false);
-		beansRequireSomeProperties = getProperty(BEAN_beansRequireSomeProperties, boolean.class, true);
-		beanMapPutReturnsOldValue = getProperty(BEAN_beanMapPutReturnsOldValue, boolean.class, false);
-		useInterfaceProxies = getProperty(BEAN_useInterfaceProxies, boolean.class, true);
-		ignoreUnknownBeanProperties = getProperty(BEAN_ignoreUnknownBeanProperties, boolean.class, false);
-		ignoreUnknownNullBeanProperties = getProperty(BEAN_ignoreUnknownNullBeanProperties, boolean.class, true);
-		ignorePropertiesWithoutSetters = getProperty(BEAN_ignorePropertiesWithoutSetters, boolean.class, true);
-		ignoreInvocationExceptionsOnGetters = getProperty(BEAN_ignoreInvocationExceptionsOnGetters, boolean.class, false);
-		ignoreInvocationExceptionsOnSetters = getProperty(BEAN_ignoreInvocationExceptionsOnSetters, boolean.class, false);
-		useJavaBeanIntrospector = getProperty(BEAN_useJavaBeanIntrospector, boolean.class, false);
-		sortProperties = getProperty(BEAN_sortProperties, boolean.class, false);
-		beanTypePropertyName = getProperty(BEAN_beanTypePropertyName, String.class, "_type");
-		debug = getProperty(BEAN_debug, boolean.class, false);
+		beansRequireDefaultConstructor = getBooleanProperty(BEAN_beansRequireDefaultConstructor, false);
+		beansRequireSerializable = getBooleanProperty(BEAN_beansRequireSerializable, false);
+		beansRequireSettersForGetters = getBooleanProperty(BEAN_beansRequireSettersForGetters, false);
+		beansRequireSomeProperties = getBooleanProperty(BEAN_beansRequireSomeProperties, true);
+		beanMapPutReturnsOldValue = getBooleanProperty(BEAN_beanMapPutReturnsOldValue, false);
+		useInterfaceProxies = getBooleanProperty(BEAN_useInterfaceProxies, true);
+		ignoreUnknownBeanProperties = getBooleanProperty(BEAN_ignoreUnknownBeanProperties, false);
+		ignoreUnknownNullBeanProperties = getBooleanProperty(BEAN_ignoreUnknownNullBeanProperties, true);
+		ignorePropertiesWithoutSetters = getBooleanProperty(BEAN_ignorePropertiesWithoutSetters, true);
+		ignoreInvocationExceptionsOnGetters = getBooleanProperty(BEAN_ignoreInvocationExceptionsOnGetters, false);
+		ignoreInvocationExceptionsOnSetters = getBooleanProperty(BEAN_ignoreInvocationExceptionsOnSetters, false);
+		useJavaBeanIntrospector = getBooleanProperty(BEAN_useJavaBeanIntrospector, false);
+		sortProperties = getBooleanProperty(BEAN_sortProperties, false);
+		beanTypePropertyName = getStringProperty(BEAN_beanTypePropertyName, "_type");
+		debug = getBooleanProperty(BEAN_debug, false);
 
 		beanConstructorVisibility = getProperty(BEAN_beanConstructorVisibility, Visibility.class, PUBLIC);
 		beanClassVisibility = getProperty(BEAN_beanClassVisibility, Visibility.class, PUBLIC);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
index 16a7fe3..81a5626 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
@@ -81,6 +81,50 @@ public abstract class Context {
 	}
 
 	/**
+	 * Shortcut for calling <code>getProperty(key, Boolean.<jk>class</jk>, def)</code>.
+	 * 
+	 * @param key The property name.
+	 * @param def The default value.
+	 * @return The property value, or the default value if it doesn't exist.
+	 */
+	public final Boolean getBooleanProperty(String key, Boolean def) {
+		return getProperty(key, Boolean.class, def);
+	}
+
+	/**
+	 * Shortcut for calling <code>getProperty(key, Integer.<jk>class</jk>, def)</code>.
+	 * 
+	 * @param key The property name.
+	 * @param def The default value.
+	 * @return The property value, or the default value if it doesn't exist.
+	 */
+	public final Integer getIntegerProperty(String key, Integer def) {
+		return getProperty(key, Integer.class, def);
+	}
+	
+	/**
+	 * Shortcut for calling <code>getProperty(key, Long.<jk>class</jk>, def)</code>.
+	 * 
+	 * @param key The property name.
+	 * @param def The default value.
+	 * @return The property value, or the default value if it doesn't exist.
+	 */
+	public final Long getLongProperty(String key, Long def) {
+		return getProperty(key, Long.class, def);
+	}
+	
+	/**
+	 * Shortcut for calling <code>getProperty(key, String.<jk>class</jk>, def)</code>.
+	 * 
+	 * @param key The property name.
+	 * @param def The default value.
+	 * @return The property value, or the default value if it doesn't exist.
+	 */
+	public final String getStringProperty(String key, String def) {
+		return getProperty(key, String.class, def);
+	}
+
+	/**
 	 * Returns the class property with the specified name.
 	 * 
 	 * @param key The property name.
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 98c9205..763690a 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
@@ -568,9 +568,9 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 		nav = getArrayProperty(HTMLDOC_nav, String.class);
 		aside = getArrayProperty(HTMLDOC_aside, String.class);
 		footer = getArrayProperty(HTMLDOC_footer, String.class);
-		nowrap = getProperty(HTMLDOC_nowrap, boolean.class, false);
+		nowrap = getBooleanProperty(HTMLDOC_nowrap, false);
 		navlinks = getArrayProperty(HTMLDOC_navlinks, String.class);
-		noResultsMessage = getProperty(HTMLDOC_noResultsMessage, String.class, "<p>no results</p>");
+		noResultsMessage = getStringProperty(HTMLDOC_noResultsMessage, "<p>no results</p>");
 		template = getInstanceProperty(HTMLDOC_template, HtmlDocTemplate.class, HtmlDocTemplateBasic.class);
 	}
 
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 be9a9ce..123845b 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
@@ -675,11 +675,11 @@ public class HtmlSerializer extends XmlSerializer {
 	public HtmlSerializer(PropertyStore ps, String produces, String...accept) {
 		super(ps, produces, accept);
 		uriAnchorText = getProperty(HTML_uriAnchorText, AnchorText.class, AnchorText.TO_STRING);
-		lookForLabelParameters = getProperty(HTML_detectLabelParameters, boolean.class, true);
-		detectLinksInStrings = getProperty(HTML_detectLinksInStrings, boolean.class, true);
-		labelParameter = getProperty(HTML_labelParameter, String.class, "label");
-		addKeyValueTableHeaders = getProperty(HTML_addKeyValueTableHeaders, boolean.class, false);
-		addBeanTypeProperties = getProperty(HTML_addBeanTypeProperties, boolean.class, getProperty(SERIALIZER_addBeanTypeProperties, boolean.class, true));
+		lookForLabelParameters = getBooleanProperty(HTML_detectLabelParameters, true);
+		detectLinksInStrings = getBooleanProperty(HTML_detectLinksInStrings, true);
+		labelParameter = getStringProperty(HTML_labelParameter, "label");
+		addKeyValueTableHeaders = getBooleanProperty(HTML_addKeyValueTableHeaders, false);
+		addBeanTypeProperties = getBooleanProperty(HTML_addBeanTypeProperties, getBooleanProperty(SERIALIZER_addBeanTypeProperties, true));
 	}
 
 	@Override /* Context */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParser.java
index 776d7c7..5a4bdd3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParser.java
@@ -200,7 +200,7 @@ public class JsonParser extends ReaderParser {
 	 */
 	public JsonParser(PropertyStore ps, String...consumes) {
 		super(ps, consumes);
-		validateEnd = getProperty(JSON_validateEnd, boolean.class, false);
+		validateEnd = getBooleanProperty(JSON_validateEnd, false);
 	}
 
 	@Override /* Context */
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 2490c62..8081465 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
@@ -403,9 +403,9 @@ public class JsonSerializer extends WriterSerializer {
 	public JsonSerializer(PropertyStore ps, String produces, String...accept) {
 		super(ps, produces, accept);
 		
-		simpleMode = getProperty(JSON_simpleMode, boolean.class, false);
-		escapeSolidus = getProperty(JSON_escapeSolidus, boolean.class, false);
-		addBeanTypeProperties = getProperty(JSON_addBeanTypeProperties, boolean.class, getProperty(SERIALIZER_addBeanTypeProperties, boolean.class, true));
+		simpleMode = getBooleanProperty(JSON_simpleMode, false);
+		escapeSolidus = getBooleanProperty(JSON_escapeSolidus, false);
+		addBeanTypeProperties = getBooleanProperty(JSON_addBeanTypeProperties, getBooleanProperty(SERIALIZER_addBeanTypeProperties, true));
 	}
 
 	@Override /* Context */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
index 1ad61e9..611f8c6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
@@ -81,7 +81,7 @@ public class MsgPackSerializer extends OutputStreamSerializer {
 	 */
 	public MsgPackSerializer(PropertyStore ps) {
 		super(ps, "octal/msgpack");
-		this.addBeanTypeProperties = getProperty(MSGPACK_addBeanTypeProperties, boolean.class, getProperty(SERIALIZER_addBeanTypeProperties, boolean.class, true));
+		this.addBeanTypeProperties = getBooleanProperty(MSGPACK_addBeanTypeProperties, getBooleanProperty(SERIALIZER_addBeanTypeProperties, true));
 	}
 
 	@Override /* Context */
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 5fd5448..f7d4538 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
@@ -527,12 +527,12 @@ public abstract class Parser extends BeanContext {
 	Parser(PropertyStore ps, String...consumes) {
 		super(ps);
 
-		trimStrings = getProperty(PARSER_trimStrings, boolean.class, false);
-		strict = getProperty(PARSER_strict, boolean.class, false);
-		autoCloseStreams = getProperty(PARSER_autoCloseStreams, boolean.class, false);
-		unbuffered = getProperty(PARSER_unbuffered, boolean.class, false);
-		inputStreamCharset = getProperty(PARSER_inputStreamCharset, String.class, "UTF-8");
-		fileCharset = getProperty(PARSER_fileCharset, String.class, "DEFAULT");
+		trimStrings = getBooleanProperty(PARSER_trimStrings, false);
+		strict = getBooleanProperty(PARSER_strict, false);
+		autoCloseStreams = getBooleanProperty(PARSER_autoCloseStreams, false);
+		unbuffered = getBooleanProperty(PARSER_unbuffered, false);
+		inputStreamCharset = getStringProperty(PARSER_inputStreamCharset, "UTF-8");
+		fileCharset = getStringProperty(PARSER_fileCharset, "DEFAULT");
 		listener = getClassProperty(PARSER_listener, ParserListener.class, null);
 		this.consumes = new MediaType[consumes.length];
 		for (int i = 0; i < consumes.length; i++) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java
index 8abebf9..18433ef 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java
@@ -994,21 +994,21 @@ public abstract class Serializer extends BeanContext {
 	Serializer(PropertyStore ps, String produces, String...accept) {
 		super(ps);
 		
-		maxDepth = getProperty(SERIALIZER_maxDepth, Integer.class, 100);
-		initialDepth = getProperty(SERIALIZER_initialDepth, Integer.class, 0);
-		detectRecursions = getProperty(SERIALIZER_detectRecursions, boolean.class, false);
-		ignoreRecursions = getProperty(SERIALIZER_ignoreRecursions, boolean.class, false);
-		useWhitespace = getProperty(SERIALIZER_useWhitespace, boolean.class, false);
-		maxIndent = getProperty(SERIALIZER_maxIndent, Integer.class, 100);
-		addBeanTypeProperties = getProperty(SERIALIZER_addBeanTypeProperties, boolean.class, true);
-		trimNulls = getProperty(SERIALIZER_trimNullProperties, boolean.class, true);
-		trimEmptyCollections = getProperty(SERIALIZER_trimEmptyCollections, boolean.class, false);
-		trimEmptyMaps = getProperty(SERIALIZER_trimEmptyMaps, boolean.class, false);
-		trimStrings = getProperty(SERIALIZER_trimStrings, boolean.class, false);
-		sortCollections = getProperty(SERIALIZER_sortCollections, boolean.class, false);
-		sortMaps = getProperty(SERIALIZER_sortMaps, boolean.class, false);
-		abridged = getProperty(SERIALIZER_abridged, boolean.class, false);
-		quoteChar = getProperty(SERIALIZER_quoteChar, String.class, "\"").charAt(0);
+		maxDepth = getIntegerProperty(SERIALIZER_maxDepth, 100);
+		initialDepth = getIntegerProperty(SERIALIZER_initialDepth, 0);
+		detectRecursions = getBooleanProperty(SERIALIZER_detectRecursions, false);
+		ignoreRecursions = getBooleanProperty(SERIALIZER_ignoreRecursions, false);
+		useWhitespace = getBooleanProperty(SERIALIZER_useWhitespace, false);
+		maxIndent = getIntegerProperty(SERIALIZER_maxIndent, 100);
+		addBeanTypeProperties = getBooleanProperty(SERIALIZER_addBeanTypeProperties, true);
+		trimNulls = getBooleanProperty(SERIALIZER_trimNullProperties, true);
+		trimEmptyCollections = getBooleanProperty(SERIALIZER_trimEmptyCollections, false);
+		trimEmptyMaps = getBooleanProperty(SERIALIZER_trimEmptyMaps, false);
+		trimStrings = getBooleanProperty(SERIALIZER_trimStrings, false);
+		sortCollections = getBooleanProperty(SERIALIZER_sortCollections, false);
+		sortMaps = getBooleanProperty(SERIALIZER_sortMaps, false);
+		abridged = getBooleanProperty(SERIALIZER_abridged, false);
+		quoteChar = getStringProperty(SERIALIZER_quoteChar, "\"").charAt(0);
 		uriContext = getProperty(SERIALIZER_uriContext, UriContext.class, UriContext.DEFAULT);
 		uriResolution = getProperty(SERIALIZER_uriResolution, UriResolution.class, UriResolution.NONE);
 		uriRelativity = getProperty(SERIALIZER_uriRelativity, UriRelativity.class, UriRelativity.RESOURCE);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
index 9e6b32d..c7cd919 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
@@ -67,7 +67,7 @@ public final class SoapXmlSerializer extends XmlSerializer {
 	 */
 	public SoapXmlSerializer(PropertyStore ps) {
 		super(ps, "text/xml", "text/xml+soap");
-		soapAction = getProperty(SOAPXML_SOAPAction, String.class, "http://www.w3.org/2003/05/soap-envelope");
+		soapAction = getStringProperty(SOAPXML_SOAPAction, "http://www.w3.org/2003/05/soap-envelope");
 	}
 
 	@Override /* Serializer */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
index c41cf99..92fe38f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
@@ -174,8 +174,8 @@ public class UonParser extends ReaderParser {
 	 */
 	public UonParser(PropertyStore ps, String...consumes) {
 		super(ps, consumes);
-		this.decodeChars = getProperty(UON_decoding, boolean.class, false);
-		this.validateEnd = getProperty(UON_validateEnd, boolean.class, false);
+		this.decodeChars = getBooleanProperty(UON_decoding, false);
+		this.validateEnd = getBooleanProperty(UON_validateEnd, false);
 	}
 
 	@Override /* Context */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
index 73a3109..0edfcf7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
@@ -347,8 +347,8 @@ public class UonSerializer extends WriterSerializer {
 	 */
 	public UonSerializer(PropertyStore ps, String produces, String...accept) {
 		super(ps, produces, accept);
-		encodeChars = getProperty(UON_encoding, boolean.class, false);
-		addBeanTypeProperties = getProperty(UON_addBeanTypeProperties, boolean.class, getProperty(SERIALIZER_addBeanTypeProperties, boolean.class, true));
+		encodeChars = getBooleanProperty(UON_encoding, false);
+		addBeanTypeProperties = getBooleanProperty(UON_addBeanTypeProperties, getBooleanProperty(SERIALIZER_addBeanTypeProperties, true));
 		paramFormat = getProperty(UON_paramFormat, ParamFormat.class, ParamFormat.UON);
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
index 88cd2ca..8110c3a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
@@ -123,7 +123,7 @@ public class UrlEncodingParser extends UonParser {
 				.build(), 
 			"application/x-www-form-urlencoded"
 		);
-		expandedParams = getProperty(URLENC_expandedParams, boolean.class, false);
+		expandedParams = getBooleanProperty(URLENC_expandedParams, false);
 	}
 
 	@Override /* Context */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
index c38a43c..af0a939 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
@@ -292,7 +292,7 @@ public class UrlEncodingSerializer extends UonSerializer {
 			produces, 
 			accept
 		);
-		expandedParams = getProperty(URLENC_expandedParams, boolean.class, false);
+		expandedParams = getBooleanProperty(URLENC_expandedParams, false);
 	}
 
 	@Override /* Context */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java
index 4a6838d..f7d951e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java
@@ -217,8 +217,8 @@ public class XmlParser extends ReaderParser {
 	 */
 	public XmlParser(PropertyStore ps, String...consumes) {
 		super(ps, consumes);
-		validating = getProperty(XML_validating, boolean.class, false);
-		preserveRootElement = getProperty(XML_preserveRootElement, boolean.class, false);
+		validating = getBooleanProperty(XML_validating, false);
+		preserveRootElement = getBooleanProperty(XML_preserveRootElement, false);
 		reporter = getInstanceProperty(XML_reporter, XMLReporter.class, null);
 		resolver = getInstanceProperty(XML_resolver, XMLResolver.class, null);
 		eventAllocator = getInstanceProperty(XML_eventAllocator, XMLEventAllocator.class, null);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
index 6751407..7a542b6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
@@ -501,11 +501,11 @@ public class XmlSerializer extends WriterSerializer {
 	 */
 	public XmlSerializer(PropertyStore ps, String produces, String...accept) {
 		super(ps, produces, accept);
-		autoDetectNamespaces = getProperty(XML_autoDetectNamespaces, boolean.class, true);
-		enableNamespaces = getProperty(XML_enableNamespaces, boolean.class, false);
-		addNamespaceUrlsToRoot = getProperty(XML_addNamespaceUrisToRoot, boolean.class, false);
+		autoDetectNamespaces = getBooleanProperty(XML_autoDetectNamespaces, true);
+		enableNamespaces = getBooleanProperty(XML_enableNamespaces, false);
+		addNamespaceUrlsToRoot = getBooleanProperty(XML_addNamespaceUrisToRoot, false);
 		defaultNamespace = getInstanceProperty(XML_defaultNamespace, Namespace.class, DEFAULT_JUNEAU_NAMESPACE);
-		addBeanTypeProperties = getProperty(XML_addBeanTypeProperties, boolean.class, getProperty(SERIALIZER_addBeanTypeProperties, boolean.class, true));
+		addBeanTypeProperties = getBooleanProperty(XML_addBeanTypeProperties, getBooleanProperty(SERIALIZER_addBeanTypeProperties, true));
 		xsNamespace = getInstanceProperty(XML_xsNamespace, Namespace.class, DEFAULT_XS_NAMESPACE);
 		namespaces = getInstanceArrayProperty(XML_namespaces, Namespace.class, new Namespace[0]);
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/proto/YamlSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/proto/YamlSerializer.java
index ad5fadd..0e107be 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/proto/YamlSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/proto/YamlSerializer.java
@@ -295,9 +295,9 @@ public class YamlSerializer extends WriterSerializer {
 	 */
 	public YamlSerializer(PropertyStore ps, String produces, String...accept) {
 		super(ps, produces, accept);
-		simpleMode = getProperty(YAML_simpleMode, boolean.class, false);
-		escapeSolidus = getProperty(YAML_escapeSolidus, boolean.class, false);
-		addBeanTypeProperties = getProperty(YAML_addBeanTypeProperties, boolean.class, getProperty(SERIALIZER_addBeanTypeProperties, boolean.class, true));
+		simpleMode = getBooleanProperty(YAML_simpleMode, false);
+		escapeSolidus = getBooleanProperty(YAML_escapeSolidus, false);
+		addBeanTypeProperties = getBooleanProperty(YAML_addBeanTypeProperties, getBooleanProperty(SERIALIZER_addBeanTypeProperties, true));
 	}
 
 	@Override /* Context */
diff --git a/juneau-doc/src/main/javadoc/overview.html b/juneau-doc/src/main/javadoc/overview.html
index 388d3bd..e22fb66 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -145,6 +145,8 @@
 	<li><p><a class='doclink' href='#juneau-config'><i>juneau-config</i></a></p>
 	<ol>
 		<li><p><a class='doclink' href='#juneau-config.Overview'>Overview</a></p>
+		<li><p><a class='doclink' href='#juneau-config.SectionBeans'>Section Beans</a></p>
+		<li><p><a class='doclink' href='#juneau-config.SectionInterfaces'>Section Interfaces</a></p>
 		<li><p><a class='doclink' href='#juneau-config.Variables'>Variables</a></p>
 		<li><p><a class='doclink' href='#juneau-config.EncodedEntries'>Encoded Entries</a></p>
 		<li><p><a class='doclink' href='#juneau-config.Listeners'>Listeners</a></p>
@@ -3145,7 +3147,7 @@
 	address.setState(StateEnum.<jsf>NY</jsf>);
 		</p>
 		<p>
-			Getter and setter values can be any parsable values, even other virtual beans.
+			Getter and setter values can be any <a class='doclink' href='#juneau-marshall.PojoCategories'>parsable</a> values, even other virtual beans.
 		</p>
 		<p>
 			Under-the-covers, a virtual bean is simply a proxy interface on top of an existing <code>BeanMap</code>
@@ -4655,7 +4657,7 @@
 			The <code>juneau-config</code> library contains a powerful API for creating and using INI-style config files.
 		</p>
 		<p>
-			An example of an INI file:
+			An example of the cotents of a config file:
 		</p>
 		<p class='bcode'>
 	<cc># Default section</cc>
@@ -4699,7 +4701,7 @@
 			The interface also allows a config file to be easily constructed programmatically:
 		</p>
 		<p class='bcode'>
-	<jc>// Construct the sample INI file programmatically</jc>
+	<jc>// Construct the sample config file programmatically</jc>
 	ConfigFile cf = ConfigFile.<jsm>create</jsm>().build(<js>"MyConfig.cfg"</js>)
 		.addLines(<jk>null</jk>,
 			<js>"# Default section"</js>,
@@ -4722,7 +4724,7 @@
 			to set values:
 		</p>
 		<p class='bcode'>
-	<jc>// Construct the sample INI file programmatically</jc>
+	<jc>// Construct the sample config file programmatically</jc>
 	ConfigFile cf = ConfigFile.<jsm>create</jsm>().build(<js>"MyConfig.cfg"</js>)
 		.addLines(<jk>null</jk>,
 			<js>"# Default section"</js>)
@@ -4741,7 +4743,7 @@
 		<p>
 			Values are LAX JSON (i.e. unquoted attributes, single quotes) except for top-level strings which are left 
 			unquoted.  
-			Any parsable object types are supported as values (e.g. arrays, collections, beans, swappable objects, 
+			<br>Any <a class='doclink' href='#juneau-marshall.PojoCategories'>parsable</a> types are supported as values (e.g. arrays, collections, beans, swappable objects, 
 			enums, etc...).
 		</p>
 		<p>
@@ -4753,7 +4755,7 @@
 				The ability to use variables to reference environment variables, system properties, other config file 
 				entries, and a host of other types.
 			<li>
-				APIs for updating, modifying, and saving configuration files <b style='text-decoration: underline;'>without losing comments or formatting</b>.
+				APIs for updating, modifying, and saving configuration files <b style='text-decoration: underline;'>without losing comments or formatting</b>!
 			<li>
 				Extensive listener APIs.
 		</ul>
@@ -4779,47 +4781,23 @@
 	
 	<cc># A POJO that can be converted from JSON</cc>
 	<ck>aBean</ck> = <cv>{foo:'bar',baz:123}</cv>
-	
-	<cc># A system property</cc>
-	<ck>locale</ck> = <cv>$S{java.locale, en_US}</cv>
-	
-	<cc># An environment variable</cc>
-	<ck>path</ck> = <cv>$E{PATH, unknown}</cv>
-	
-	<cc># A manifest file entry</cc>
-	<ck>mainClass</ck> = <cv>$MF{Main-Class}</cv>
-	
-	<cc># Another value in this config file</cc>
-	<ck>sameAsAnInt</ck> = <cv>$C{MySection/anInt}</cv>
-	
-	<cc># A command-line argument in the form "myarg=foo"</cc>
-	<ck>myArg</ck> = <cv>$ARG{myarg}</cv>
-	
-	<cc># The first command-line argument</cc>
-	<ck>firstArg</ck> = <cv>$ARG{0}</cv>
-
-	<cc># Look for system property, or env var if that doesn't exist, or command-line arg if that doesn't exist.</cc>
-	<ck>nested</ck> = <cv>$S{mySystemProperty,$E{MY_ENV_VAR,$ARG{0}}}</cv>
-
-	<cc># A POJO with embedded variables</cc>
-	<ck>aBean2</ck> = <cv>{foo:'$ARG{0}',baz:$C{MySection/anInt}}</cv>
 		</p>
 		<p class='bcode'>
 	<jc>// Java code for accessing config entries above.</jc>
-	ConfigFile cf = Microservice.<jsm>getConfig</jsm>();
+	ConfigFile cf = ConfigFile.<jsf>create</jsf>().build(<js>"MyConfig.cfg"</js>);
 	
 	<jk>int</jk> anInt = cf.getInt(<js>"MySection/anInt"</js>); 
 	<jk>boolean</jk> aBoolean = cf.getBoolean(<js>"MySection/aBoolean"</js>); 
 	<jk>int</jk>[] anIntArray = cf.getObject(<jk>int</jk>[].<jk>class</jk>, <js>"MySection/anIntArray"</js>); 
 	URL aURL = cf.getObject(URL.<jk>class</jk>, <js>"MySection/aURL"</js>); 
 	MyBean aBean = cf.getObject(MyBean.<jk>class</jk>, <js>"MySection/aBean"</js>); 
-	Locale locale = cf.getObject(Locale.<jk>class</jk>, <js>"MySection/locale"</js>); 
-	String path = cf.getString(<js>"MySection/path"</js>); 
-	String mainClass = cf.getString(<js>"MySection/mainClass"</js>); 
-	<jk>int</jk> sameAsAnInt = cf.getInt(<js>"MySection/sameAsAnInt"</js>); 
-	String myArg = cf.getString(<js>"MySection/myArg"</js>); 
-	String firstArg = cf.getString(<js>"MySection/firstArg"</js>); 
 		</p>
+	</div>
+	
+	<!-- ======================================================================================================== -->
+	<a id="juneau-config.SectionBeans"></a>
+	<h3 class='topic' onclick='toggle(this)'>6.2 - Section Beans</h3>
+	<div class='topic'>
 		<p>
 			Config files can also be used to directly populate beans using the 
 			{@link org.apache.juneau.config.ConfigFile#getSectionAsBean(String,Class,boolean)}:
@@ -4844,6 +4822,12 @@
 	ConfigFile cf = ConfigFile.<jsm>create</jsm>().build(<js>"MyConfig.cfg"</js>);
 	Address myAddress = cf.getSectionAsBean(<js>"MySection"</js>, Address.<jk>class</jk>);
 		</p>
+	</div>
+
+	<!-- ======================================================================================================== -->
+	<a id="juneau-config.SectionInterfaces"></a>
+	<h3 class='topic' onclick='toggle(this)'>6.3 - Section Interfaces</h3>
+	<div class='topic'>
 		<p>
 			Config file sections can also be accessed via interface proxies using 
 			{@link org.apache.juneau.config.ConfigFile#getSectionAsInterface(String,Class)}:
@@ -4858,7 +4842,8 @@
 	<ck>int3dArray</ck> = <cv>[[[123,null],null],null]</cv>
 	<ck>bean1d3dListMap</ck> = <cv>{key:[[[[{foo:'bar',baz:123}]]]]}</cv>
 
-	<jc>// Example interface</jc>
+	<jc>// Example interface.</jc>
+	<jc>// Setters are optional.</jc>
 	<jk>public interface</jk> MyConfigInterface {
 
 		String getString();
@@ -4880,33 +4865,77 @@
 		<jk>void</jk> setBean1d3dListMap(Map&lt;String,List&lt;MyBean[][][]&gt;&gt; x);
 	}
 	
-	<jc>// Example usage</jc>
+	<jc>// Example usage.</jc>
 	ConfigFile cf = ConfigFile.<jsm>create</jsm>().build(<js>"MyConfig.cfg"</js>);
 	MyConfigInterface ci = cf.getSectionAsInterface(<js>"MySection"</js>, MyConfigInterface.<jk>class</jk>);
+	
+	<jc>// Read a value.</jc>
 	<jk>int</jk> myInt = ci.getInt();
+
+	<jc>// Write a value.</jc>
 	ci.setBean(<jk>new</jk> MyBean());
+
+	<jc>// Save your changes.</jc>
 	cf.save();
 		</p>
 	</div>
-	
+
 	<!-- ======================================================================================================== -->
 	<a id="juneau-config.Variables"></a>
-	<h3 class='topic' onclick='toggle(this)'>6.2 - Variables</h3>
+	<h3 class='topic' onclick='toggle(this)'>6.4 - Variables</h3>
 	<div class='topic'>
 		<p>
 			Config files can contain variables that get resolved dynamically using the 
 			{@link org.apache.juneau.svl.VarResolver} API.
 		</p>
+		<h5 class='figure'>Example:</h5>
+		<p class='bcode'>
+	<cc>#--------------------------</cc>
+	<cc># My section</cc>
+	<cc>#--------------------------</cc>
+	<cs>[MySection]</cs>
+	
+	<cc># A system property</cc>
+	<ck>locale</ck> = <cv>$S{java.locale, en_US}</cv>
+	
+	<cc># An environment variable</cc>
+	<ck>path</ck> = <cv>$E{PATH, unknown}</cv>
+	
+	<cc># A manifest file entry</cc>
+	<ck>mainClass</ck> = <cv>$MF{Main-Class}</cv>
+	
+	<cc># Another value in this config file</cc>
+	<ck>sameAsAnInt</ck> = <cv>$C{MySection/anInt}</cv>
+	
+	<cc># A command-line argument in the form "myarg=foo"</cc>
+	<ck>myArg</ck> = <cv>$ARG{myarg}</cv>
+	
+	<cc># The first command-line argument</cc>
+	<ck>firstArg</ck> = <cv>$ARG{0}</cv>
+
+	<cc># Look for system property, or env var if that doesn't exist, or command-line arg if that doesn't exist.</cc>
+	<ck>nested</ck> = <cv>$S{mySystemProperty,$E{MY_ENV_VAR,$ARG{0}}}</cv>
+
+	<cc># A POJO with embedded variables</cc>
+	<ck>aBean2</ck> = <cv>{foo:'$ARG{0}',baz:$C{MySection/anInt}}</cv>
+		</p>
+		<p class='bcode'>
+	<jc>// Java code for accessing config entries above.</jc>
+	ConfigFile cf = Microservice.<jsm>getInstance</jsm>().getConfig();
+	
+	Locale locale = cf.getObject(Locale.<jk>class</jk>, <js>"MySection/locale"</js>); 
+	String path = cf.getString(<js>"MySection/path"</js>); 
+	String mainClass = cf.getString(<js>"MySection/mainClass"</js>); 
+	<jk>int</jk> sameAsAnInt = cf.getInt(<js>"MySection/sameAsAnInt"</js>); 
+	String myArg = cf.getString(<js>"MySection/myArg"</js>); 
+	String firstArg = cf.getString(<js>"MySection/firstArg"</js>); 
+		</p>
 		<p>
 			Resolving config files can be retrieved through the following methods:
 		</p>	
 		<ul class='spaced-list'>
-			<li>
-				{@link org.apache.juneau.config.ConfigFile#getResolving()} - Returns a config file that resolves a default 
-				set of variables.
-			<li>
-				{@link org.apache.juneau.config.ConfigFile#getResolving(VarResolver)} - Returns a config file that resolves 
-				a custom set of variables.
+			<li class='jm'>{@link org.apache.juneau.config.ConfigFile#getResolving()} - Returns a config file that resolves a default set of variables.
+			<li class='jm'>{@link org.apache.juneau.config.ConfigFile#getResolving(VarResolver)} - Returns a config file that resolves a custom set of variables.
 		</ul>
 		<p>
 			The default {@link org.apache.juneau.config.ConfigFile#getResolving()} method returns a config file that resolves 
@@ -4954,7 +4983,7 @@
 	
 	<!-- ======================================================================================================== -->
 	<a id="juneau-config.EncodedEntries"></a>
-	<h3 class='topic' onclick='toggle(this)'>6.3 - Encoded Entries</h3>
+	<h3 class='topic' onclick='toggle(this)'>6.5 - Encoded Entries</h3>
 	<div class='topic'>
 		<p>
 			If a config file contains sensitive information such as passwords, those values can be 
@@ -4989,7 +5018,7 @@
 	
 	<!-- ======================================================================================================== -->
 	<a id="juneau-config.Listeners"></a>
-	<h3 class='topic' onclick='toggle(this)'>6.4 - Listeners</h3>
+	<h3 class='topic' onclick='toggle(this)'>6.6 - Listeners</h3>
 	<div class='topic'>
 		<p>
 			The following method is provided for listening to changes made on config files:
@@ -5028,7 +5057,7 @@
 	
 	<!-- ======================================================================================================== -->
 	<a id="juneau-config.CommandLine"></a>
-	<h3 class='topic' onclick='toggle(this)'>6.5 - Command Line API</h3>
+	<h3 class='topic' onclick='toggle(this)'>6.7 - Command Line API</h3>
 	<div class='topic'>
 		<p>
 			The {@link org.apache.juneau.config.ConfigFileBuilder} class contains a 
@@ -5071,7 +5100,7 @@
 	
 	<!-- ======================================================================================================== -->
 	<a id="juneau-config.Serializing"></a>
-	<h3 class='topic' onclick='toggle(this)'>6.6 - Serializing Config Files</h3>
+	<h3 class='topic' onclick='toggle(this)'>6.8 - Serializing Config Files</h3>
 	<div class='topic'>
 		<p>
 			Instances of {@link org.apache.juneau.config.ConfigFile} are POJOs that can be serialized to and parsed from
@@ -5283,7 +5312,7 @@
 	
 	<!-- ======================================================================================================== -->
 	<a id="juneau-config.Merging"></a>
-	<h3 class='topic' onclick='toggle(this)'>6.7 - Merging Config Files</h3>
+	<h3 class='topic' onclick='toggle(this)'>6.9 - Merging Config Files</h3>
 	<div class='topic'>
 		<p>
 			In the previous example, an edit page was shown that allows you to edit config files through
@@ -5295,7 +5324,7 @@
 			trigger listeners when the values are different.
 		</p>
 		<p>
-			The edit page is implemented with this method which is a simple PUT with the contents of the new INI file as 
+			The edit page is implemented with this method which is a simple PUT with the contents of the new config file as 
 			the body of the HTTP request:
 		</p>
 		<p class='bcode'>
@@ -6604,7 +6633,7 @@
 	}
 			</p>
 			<p>
-				Annotations are provided for easy access to URL parameters with automatic conversion to any parsable object type.
+				Annotations are provided for easy access to URL parameters with automatic conversion to any <a class='doclink' href='#juneau-marshall.PojoCategories'>parsable</a> type.
 				<br>For example, the following example can process the URL <l>"/urlWithParams?foo=foo&amp;bar=[1,2,3]&amp;baz=067e6162-3b6f-4ae2-a171-2470b63dff00"</l>...
 			</p>
 			<p class='bcode'>
@@ -6969,8 +6998,7 @@
 	<h3 class='topic' onclick='toggle(this)'>7.7 - @Body</h3>
 	<div class='topic'>
 		<p>
-			The {@link org.apache.juneau.rest.annotation.Body @Body} annotation provides easy access to the HTTP body content as any parsable POJO type
-			(See <a class='doclink' href='#juneau-marshall.PojoCategories'>POJO Categories</a>).
+			The {@link org.apache.juneau.rest.annotation.Body @Body} annotation provides easy access to the HTTP body content as any <a class='doclink' href='#juneau-marshall.PojoCategories'>parsable</a> POJO type
 			<br>In the example below, we're POSTing beans.
 		</p>
 		<p class='bcode'>
@@ -9517,7 +9545,7 @@
 			<li>
 				The method must be public.
 			<li>
-				The parameter and return types must be <a href='#juneau-marshall.PojoCategories'>serializable and parsable</a>.
+				The parameter and return types must be <a class='doclink' href='#juneau-marshall.PojoCategories'>serializable and parsable</a>.
 		</ul>
 		<p>
 			Juneau provides the capability of calling methods on POJOs on a server through client-side proxy interfaces.
@@ -9645,8 +9673,7 @@
 			a browser with no coding involved.
 		</p>
 		<p>
-			The parameters and return types of the Java methods can be any of the supported serializable and parsable types
-			in <a class='doclink' href='#juneau-marshall.PojoCategories'>POJO Categories</a>.
+			The parameters and return types of the Java methods can be any of the supported <a class='doclink' href='#juneau-marshall.PojoCategories'>serializable and parsable types</a>.
 			This ends up being WAY more flexible than other proxy interfaces since Juneau can handle so may POJO types 
 			out-of-the-box.
 			Most of the time you don't even need to modify your existing Java implementation code.
@@ -10547,7 +10574,7 @@
 				- Don't parse any response.  
 				<br>Note that the method will still throw a runtime exception if an error HTTP status is returned.
 			<li>
-				Any parsable POJO 
+				Any <a class='doclink' href='#juneau-marshall.PojoCategories'>parsable</a> POJO 
 				- The body of the response will be converted to the POJO using the parser defined on the 
 				<code>RestClient</code>.
 			<li>
@@ -11250,7 +11277,7 @@
 			<li>
 				The method must be public.
 			<li>
-				The parameter and return types must be <a href='#juneau-marshall.PojoCategories'>serializable and parsable</a>.
+				The parameter and return types must be <a class='doclink' href='#juneau-marshall.PojoCategories'>serializable and parsable</a>.
 		</ul>
 		<p>
 			One significant feature is that the remoteable services servlet is a full-blown REST interface.  
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
index 4928fc4..e5b92d9 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
@@ -451,15 +451,15 @@ public class RestClient extends BeanContext implements Closeable {
 		super(ps);
 		this.httpClientBuilder = httpClientBuilder;
 		this.httpClient = httpClient;
-		this.keepHttpClientOpen = getProperty(RESTCLIENT_keepHttpClientOpen, boolean.class, false);
+		this.keepHttpClientOpen = getBooleanProperty(RESTCLIENT_keepHttpClientOpen, false);
 		this.headers = getMapProperty(RESTCLIENT_headers, String.class);
 		this.query = getMapProperty(RESTCLIENT_query, String.class);
-		this.retries = getProperty(RESTCLIENT_retries, int.class, 1);
-		this.retryInterval = getProperty(RESTCLIENT_retryInterval, int.class, -1);
+		this.retries = getIntegerProperty(RESTCLIENT_retries, 1);
+		this.retryInterval = getIntegerProperty(RESTCLIENT_retryInterval, -1);
 		this.retryOn = getInstanceProperty(RESTCLIENT_retryOn, RetryOn.class, RetryOn.DEFAULT);
-		this.debug = getProperty(RESTCLIENT_debug, boolean.class, false);
-		this.executorServiceShutdownOnClose = getProperty(RESTCLIENT_executorServiceShutdownOnClose, boolean.class, false);
-		this.rootUrl = StringUtils.nullIfEmpty(getProperty(RESTCLIENT_rootUri, String.class, "").replaceAll("\\/$", ""));
+		this.debug = getBooleanProperty(RESTCLIENT_debug, false);
+		this.executorServiceShutdownOnClose = getBooleanProperty(RESTCLIENT_executorServiceShutdownOnClose, false);
+		this.rootUrl = StringUtils.nullIfEmpty(getStringProperty(RESTCLIENT_rootUri, "").replaceAll("\\/$", ""));
 		
 		Object o = getProperty(RESTCLIENT_serializer, Object.class, JsonSerializer.class);
 		if (o instanceof Serializer) {
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index 3c48a83..a0a1640 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -2834,15 +2834,15 @@ public final class RestContext extends BeanContext {
 			PropertyStore ps = getPropertyStore().builder().add(builder.properties).build();
 			Class<?> resourceClass = resource.getClass();
 
-			contextPath = nullIfEmpty(getProperty(REST_contextPath, String.class, null));
-			allowHeaderParams = getProperty(REST_allowHeaderParams, boolean.class, true);
-			allowBodyParam = getProperty(REST_allowBodyParam, boolean.class, true);
-			allowedMethodParams = Collections.unmodifiableSet(new LinkedHashSet<>(Arrays.asList(StringUtils.split(getProperty(REST_allowedMethodParams, String.class, "HEAD,OPTIONS")))));
-			renderResponseStackTraces = getProperty(REST_renderResponseStackTraces, boolean.class, false);
-			useStackTraceHashes = getProperty(REST_useStackTraceHashes, boolean.class, true);
-			defaultCharset = getProperty(REST_defaultCharset, String.class, "utf-8");
-			maxInput = getProperty(REST_maxInput, long.class, 100_000_000l);
-			clientVersionHeader = getProperty(REST_clientVersionHeader, String.class, "X-Client-Version");
+			contextPath = nullIfEmpty(getStringProperty(REST_contextPath, null));
+			allowHeaderParams = getBooleanProperty(REST_allowHeaderParams, true);
+			allowBodyParam = getBooleanProperty(REST_allowBodyParam, true);
+			allowedMethodParams = Collections.unmodifiableSet(new LinkedHashSet<>(Arrays.asList(StringUtils.split(getStringProperty(REST_allowedMethodParams, "HEAD,OPTIONS")))));
+			renderResponseStackTraces = getBooleanProperty(REST_renderResponseStackTraces, false);
+			useStackTraceHashes = getBooleanProperty(REST_useStackTraceHashes, true);
+			defaultCharset = getStringProperty(REST_defaultCharset, "utf-8");
+			maxInput = getLongProperty(REST_maxInput, 100_000_000l);
+			clientVersionHeader = getStringProperty(REST_clientVersionHeader, "X-Client-Version");
 
 			converters = getInstanceArrayProperty(REST_converters, resource, RestConverter.class, new RestConverter[0], true, this);
 			guards = getInstanceArrayProperty(REST_guards, resource, RestGuard.class, new RestGuard[0], true, this);

-- 
To stop receiving notification emails like this one, please contact
jamesbognar@apache.org.

Mime
View raw message