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 2019/01/13 21:10:08 UTC
[juneau-website] branch asf-site updated: Javadocs.
This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/juneau-website.git
The following commit(s) were added to refs/heads/asf-site by this push:
new a45a2d8 Javadocs.
a45a2d8 is described below
commit a45a2d8f3f9d30da9108ec1e70580d2ca82ec35c
Author: JamesBognar <ja...@apache.org>
AuthorDate: Sun Jan 13 16:09:49 2019 -0500
Javadocs.
---
content/site/apidocs-8.0.1/index-all.html | 12 +-
.../apidocs-8.0.1/org/apache/juneau/BeanMeta.html | 42 +-
.../org/apache/juneau/config/Config.html | 167 +-
.../juneau/examples/core/dto/DtoExample.html | 2 +-
.../juneau/examples/core/dto/atom/AtomFeed.html | 2 +-
.../examples/core/dto/atom/AtomHtmlExample.html | 2 +-
.../examples/core/dto/atom/AtomJsonExample.html | 2 +-
.../examples/core/dto/atom/AtomXmlExample.html | 2 +-
.../examples/core/html/HtmlComplexExample.html | 2 +-
.../examples/core/html/HtmlSimpleExample.html | 2 +-
.../examples/core/json/JsonComplexExample.html | 2 +-
.../core/json/JsonConfigurationExample.html | 2 +-
.../examples/core/json/JsonSimpleExample.html | 2 +-
.../juneau/examples/core/oapi/OapiExample.html | 2 +-
.../org/apache/juneau/examples/core/pojo/Pojo.html | 2 +-
.../juneau/examples/core/pojo/PojoComplex.html | 2 +-
.../examples/core/rdf/RdfComplexExample.html | 2 +-
.../juneau/examples/core/rdf/RdfExample.html | 2 +-
.../juneau/examples/core/svl/SvlExample.html | 2 +-
.../examples/core/uon/UONComplexExample.html | 2 +-
.../juneau/examples/core/uon/UONExample.html | 2 +-
.../examples/core/xml/XmlComplexExample.html | 2 +-
.../examples/core/xml/XmlConfigurationExample.html | 2 +-
.../juneau/examples/core/xml/XmlSimpleExample.html | 2 +-
.../apache/juneau/examples/rest/AdminGuard.html | 2 +-
.../juneau/examples/rest/HelloWorldResource.html | 2 +-
.../juneau/examples/rest/RequestEchoResource.html | 2 +-
.../apache/juneau/examples/rest/RootResources.html | 2 +-
.../juneau/examples/rest/command/EchoCommand.html | 2 +-
.../juneau/examples/rest/dto/AtomFeedResource.html | 2 +-
.../juneau/examples/rest/dto/DtoExamples.html | 2 +-
.../examples/rest/dto/JsonSchemaResource.html | 2 +-
.../rest/dto/PredefinedLabelsResource.html | 2 +-
.../org/apache/juneau/examples/rest/jetty/App.html | 2 +-
.../rest/petstore/AbstractPersistenceService.html | 2 +-
.../examples/rest/petstore/ExpiresAfter.html | 2 +-
.../juneau/examples/rest/petstore/IdConflict.html | 2 +-
.../juneau/examples/rest/petstore/IdNotFound.html | 2 +-
.../juneau/examples/rest/petstore/InvalidId.html | 2 +-
.../examples/rest/petstore/InvalidLogin.html | 2 +-
.../examples/rest/petstore/InvalidSpecies.html | 2 +-
.../juneau/examples/rest/petstore/InvalidTag.html | 2 +-
.../examples/rest/petstore/InvalidUsername.html | 2 +-
.../examples/rest/petstore/PetStoreService.html | 2 +-
.../examples/rest/petstore/dto/CreateOrder.html | 2 +-
.../examples/rest/petstore/dto/CreatePet.html | 2 +-
.../juneau/examples/rest/petstore/dto/Order.html | 2 +-
.../examples/rest/petstore/dto/OrderStatus.html | 2 +-
.../juneau/examples/rest/petstore/dto/Pet.html | 2 +-
.../examples/rest/petstore/dto/PetStatus.html | 2 +-
.../juneau/examples/rest/petstore/dto/PetTag.html | 2 +-
.../examples/rest/petstore/dto/PetTagNameSwap.html | 2 +-
.../juneau/examples/rest/petstore/dto/Species.html | 2 +-
.../examples/rest/petstore/dto/UpdatePet.html | 2 +-
.../juneau/examples/rest/petstore/dto/User.html | 2 +-
.../examples/rest/petstore/dto/UserStatus.html | 2 +-
.../rest/petstore/rest/AddOrderMenuItem.html | 2 +-
.../rest/petstore/rest/AddPetMenuItem.html | 2 +-
.../examples/rest/petstore/rest/PetStore.html | 2 +-
.../rest/petstore/rest/PetStoreResource.html | 2 +-
.../rest/petstore/rest/PhotosResource.html | 2 +-
.../rest/petstore/rest/SqlQueryResource.html | 2 +-
.../rest/petstore/rest/UploadPhotoMenuItem.html | 2 +-
.../juneau/examples/rest/springboot/App.html | 2 +-
.../apache/juneau/microservice/Microservice.html | 44 +-
.../org/apache/juneau/rest/BasicRest.html | 12 +-
.../org/apache/juneau/rest/BasicRestGroup.html | 17 +-
.../org/apache/juneau/rest/BasicRestJena.html | 6 +-
.../org/apache/juneau/rest/BasicRestJenaGroup.html | 6 +-
.../apache/juneau/rest/BasicRestServletGroup.html | 2 +-
.../org/apache/juneau/rest/package-summary.html | 12 +-
content/site/apidocs-8.0.1/overview-summary.html | 151 +-
.../src-html/org/apache/juneau/BeanMeta.html | 1754 +++++-----
.../src-html/org/apache/juneau/config/Config.html | 3672 ++++++++++----------
.../apache/juneau/microservice/Microservice.html | 1205 ++++---
.../src-html/org/apache/juneau/rest/BasicRest.html | 166 +-
.../org/apache/juneau/rest/BasicRestGroup.html | 63 +-
.../org/apache/juneau/rest/BasicRestJena.html | 52 +-
.../org/apache/juneau/rest/BasicRestJenaGroup.html | 52 +-
.../apache/juneau/rest/BasicRestServletGroup.html | 2 +-
80 files changed, 3790 insertions(+), 3769 deletions(-)
diff --git a/content/site/apidocs-8.0.1/index-all.html b/content/site/apidocs-8.0.1/index-all.html
index eaebe56..c604b8b 100644
--- a/content/site/apidocs-8.0.1/index-all.html
+++ b/content/site/apidocs-8.0.1/index-all.html
@@ -2701,7 +2701,9 @@
<dd> </dd>
<dt><a href="org/apache/juneau/rest/BasicRest.html" title="class in org.apache.juneau.rest"><span class="typeNameLink">BasicRest</span></a> - Class in <a href="org/apache/juneau/rest/package-summary.html">org.apache.juneau.rest</a></dt>
<dd>
-<div class="block"><h5 class='section'>See Also:</div>
+<div class="block">Identical to <a href="org/apache/juneau/rest/BasicRestServlet.html" title="class in org.apache.juneau.rest"><code>BasicRestServlet</code></a> but doesn't extend from <code>HttpServlet</code>
+
+ <h5 class='section'>See Also:</div>
</dd>
<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/BasicRest.html#BasicRest--">BasicRest()</a></span> - Constructor for class org.apache.juneau.rest.<a href="org/apache/juneau/rest/BasicRest.html" title="class in org.apache.juneau.rest">BasicRest</a></dt>
<dd> </dd>
@@ -2719,7 +2721,9 @@
</dd>
<dt><a href="org/apache/juneau/rest/BasicRestGroup.html" title="class in org.apache.juneau.rest"><span class="typeNameLink">BasicRestGroup</span></a> - Class in <a href="org/apache/juneau/rest/package-summary.html">org.apache.juneau.rest</a></dt>
<dd>
-<div class="block">Specialized subclass of <a href="org/apache/juneau/rest/BasicRestServlet.html" title="class in org.apache.juneau.rest"><code>BasicRestServlet</code></a> for showing "group" pages.</div>
+<div class="block">Identical to <a href="org/apache/juneau/rest/BasicRestServletGroup.html" title="class in org.apache.juneau.rest"><code>BasicRestServletGroup</code></a> but doesn't extend from <code>HttpServlet</code>
+
+ <h5 class='section'>See Also:</div>
</dd>
<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/BasicRestGroup.html#BasicRestGroup--">BasicRestGroup()</a></span> - Constructor for class org.apache.juneau.rest.<a href="org/apache/juneau/rest/BasicRestGroup.html" title="class in org.apache.juneau.rest">BasicRestGroup</a></dt>
<dd> </dd>
@@ -2733,13 +2737,13 @@
</dd>
<dt><a href="org/apache/juneau/rest/BasicRestJena.html" title="class in org.apache.juneau.rest"><span class="typeNameLink">BasicRestJena</span></a> - Class in <a href="org/apache/juneau/rest/package-summary.html">org.apache.juneau.rest</a></dt>
<dd>
-<div class="block">Resource servlet with additional RDF support.</div>
+<div class="block">Identical to <a href="org/apache/juneau/rest/BasicRestServletJena.html" title="class in org.apache.juneau.rest"><code>BasicRestServletJena</code></a> but doesn't extend from <code>HttpServlet</code></div>
</dd>
<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/BasicRestJena.html#BasicRestJena--">BasicRestJena()</a></span> - Constructor for class org.apache.juneau.rest.<a href="org/apache/juneau/rest/BasicRestJena.html" title="class in org.apache.juneau.rest">BasicRestJena</a></dt>
<dd> </dd>
<dt><a href="org/apache/juneau/rest/BasicRestJenaGroup.html" title="class in org.apache.juneau.rest"><span class="typeNameLink">BasicRestJenaGroup</span></a> - Class in <a href="org/apache/juneau/rest/package-summary.html">org.apache.juneau.rest</a></dt>
<dd>
-<div class="block">Resource group with additional RDF support.</div>
+<div class="block">Identical to <a href="org/apache/juneau/rest/BasicRestServletJenaGroup.html" title="class in org.apache.juneau.rest"><code>BasicRestServletJenaGroup</code></a> but doesn't extend from <code>HttpServlet</code></div>
</dd>
<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/BasicRestJenaGroup.html#BasicRestJenaGroup--">BasicRestJenaGroup()</a></span> - Constructor for class org.apache.juneau.rest.<a href="org/apache/juneau/rest/BasicRestJenaGroup.html" title="class in org.apache.juneau.rest">BasicRestJenaGroup</a></dt>
<dd> </dd>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/BeanMeta.html b/content/site/apidocs-8.0.1/org/apache/juneau/BeanMeta.html
index ace6218..0b0980b 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/BeanMeta.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/BeanMeta.html
@@ -116,7 +116,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public class <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.61">BeanMeta</a><T>
+<pre>public class <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.63">BeanMeta</a><T>
extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
<div class="block">Encapsulates all access to the properties of a bean class (like a souped-up <a href="http://docs.oracle.com/javase/8/docs/api/java/beans/BeanInfo.html?is-external=true" title="class or interface in java.beans"><code>BeanInfo</code></a>).
@@ -343,7 +343,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<ul class="blockList">
<li class="blockList">
<h4>classMeta</h4>
-<pre>protected final <a href="../../../org/apache/juneau/ClassMeta.html" title="class in org.apache.juneau">ClassMeta</a><<a href="../../../org/apache/juneau/BeanMeta.html" title="type parameter in BeanMeta">T</a>> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.64">classMeta</a></pre>
+<pre>protected final <a href="../../../org/apache/juneau/ClassMeta.html" title="class in org.apache.juneau">ClassMeta</a><<a href="../../../org/apache/juneau/BeanMeta.html" title="type parameter in BeanMeta">T</a>> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.66">classMeta</a></pre>
<div class="block">The target class type that this meta object describes.</div>
</li>
</ul>
@@ -353,7 +353,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<ul class="blockList">
<li class="blockList">
<h4>c</h4>
-<pre>protected final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><<a href="../../../org/apache/juneau/BeanMeta.html" title="type parameter in BeanMeta">T</a>> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.67">c</a></pre>
+<pre>protected final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><<a href="../../../org/apache/juneau/BeanMeta.html" title="type parameter in BeanMeta">T</a>> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.69">c</a></pre>
<div class="block">The target class that this meta object describes.</div>
</li>
</ul>
@@ -363,7 +363,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<ul class="blockList">
<li class="blockList">
<h4>properties</h4>
-<pre>protected final <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../org/apache/juneau/BeanPropertyMeta.html" title="class in org.apache.juneau">BeanPropertyMeta</a>> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.70"> [...]
+<pre>protected final <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../org/apache/juneau/BeanPropertyMeta.html" title="class in org.apache.juneau">BeanPropertyMeta</a>> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.72"> [...]
<div class="block">The properties on the target class.</div>
</li>
</ul>
@@ -373,7 +373,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<ul class="blockList">
<li class="blockList">
<h4>getterProps</h4>
-<pre>protected final <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../src-html [...]
+<pre>protected final <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../src-html [...]
<div class="block">The getter properties on the target class.</div>
</li>
</ul>
@@ -383,7 +383,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<ul class="blockList">
<li class="blockList">
<h4>setterProps</h4>
-<pre>protected final <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../src-html [...]
+<pre>protected final <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../src-html [...]
<div class="block">The setter properties on the target class.</div>
</li>
</ul>
@@ -393,7 +393,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<ul class="blockList">
<li class="blockList">
<h4>ctx</h4>
-<pre>protected final <a href="../../../org/apache/juneau/BeanContext.html" title="class in org.apache.juneau">BeanContext</a> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.79">ctx</a></pre>
+<pre>protected final <a href="../../../org/apache/juneau/BeanContext.html" title="class in org.apache.juneau">BeanContext</a> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.81">ctx</a></pre>
<div class="block">The bean context that created this metadata object.</div>
</li>
</ul>
@@ -403,7 +403,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<ul class="blockList">
<li class="blockList">
<h4>beanFilter</h4>
-<pre>protected final <a href="../../../org/apache/juneau/transform/BeanFilter.html" title="class in org.apache.juneau.transform">BeanFilter</a> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.82">beanFilter</a></pre>
+<pre>protected final <a href="../../../org/apache/juneau/transform/BeanFilter.html" title="class in org.apache.juneau.transform">BeanFilter</a> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.84">beanFilter</a></pre>
<div class="block">Optional bean filter associated with the target class.</div>
</li>
</ul>
@@ -413,7 +413,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<ul class="blockList">
<li class="blockList">
<h4>typeVarImpls</h4>
-<pre>protected final <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?>[]> <a href="../../../src-html [...]
+<pre>protected final <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?>[]> <a href="../../../src-html [...]
<div class="block">Type variables implemented by this bean.</div>
</li>
</ul>
@@ -423,7 +423,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<ul class="blockList">
<li class="blockList">
<h4>constructor</h4>
-<pre>protected final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Constructor.html?is-external=true" title="class or interface in java.lang.reflect">Constructor</a><<a href="../../../org/apache/juneau/BeanMeta.html" title="type parameter in BeanMeta">T</a>> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.88">constructor</a></pre>
+<pre>protected final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Constructor.html?is-external=true" title="class or interface in java.lang.reflect">Constructor</a><<a href="../../../org/apache/juneau/BeanMeta.html" title="type parameter in BeanMeta">T</a>> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.90">constructor</a></pre>
<div class="block">The constructor for this bean.</div>
</li>
</ul>
@@ -433,7 +433,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<ul class="blockListLast">
<li class="blockList">
<h4>constructorArgs</h4>
-<pre>protected final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.91">constructorArgs</a></pre>
+<pre>protected final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.93">constructorArgs</a></pre>
<div class="block">For beans with constructors with BeanConstructor annotation, this is the list of constructor arg properties.</div>
</li>
</ul>
@@ -451,7 +451,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<ul class="blockListLast">
<li class="blockList">
<h4>BeanMeta</h4>
-<pre>protected <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.113">BeanMeta</a>(<a href="../../../org/apache/juneau/ClassMeta.html" title="class in org.apache.juneau">ClassMeta</a><<a href="../../../org/apache/juneau/BeanMeta.html" title="type parameter in BeanMeta">T</a>> classMeta,
+<pre>protected <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.115">BeanMeta</a>(<a href="../../../org/apache/juneau/ClassMeta.html" title="class in org.apache.juneau">ClassMeta</a><<a href="../../../org/apache/juneau/BeanMeta.html" title="type parameter in BeanMeta">T</a>> classMeta,
<a href="../../../org/apache/juneau/BeanContext.html" title="class in org.apache.juneau">BeanContext</a> ctx,
<a href="../../../org/apache/juneau/transform/BeanFilter.html" title="class in org.apache.juneau.transform">BeanFilter</a> beanFilter,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] pNames)</pre>
@@ -480,7 +480,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<li class="blockList">
<h4>getClassMeta</h4>
<pre><a href="../../../org/apache/juneau/annotation/BeanIgnore.html" title="annotation in org.apache.juneau.annotation">@BeanIgnore</a>
-public final <a href="../../../org/apache/juneau/ClassMeta.html" title="class in org.apache.juneau">ClassMeta</a><<a href="../../../org/apache/juneau/BeanMeta.html" title="type parameter in BeanMeta">T</a>> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.495">getClassMeta</a>()</pre>
+public final <a href="../../../org/apache/juneau/ClassMeta.html" title="class in org.apache.juneau">ClassMeta</a><<a href="../../../org/apache/juneau/BeanMeta.html" title="type parameter in BeanMeta">T</a>> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.497">getClassMeta</a>()</pre>
<div class="block">Returns the <a href="../../../org/apache/juneau/ClassMeta.html" title="class in org.apache.juneau"><code>ClassMeta</code></a> of this bean.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -494,7 +494,7 @@ public final <a href="../../../org/apache/juneau/ClassMeta.html" title="cla
<ul class="blockList">
<li class="blockList">
<h4>getDictionaryName</h4>
-<pre>public final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.504">getDictionaryName</a>()</pre>
+<pre>public final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.506">getDictionaryName</a>()</pre>
<div class="block">Returns the dictionary name for this bean as defined through the <a href="../../../org/apache/juneau/annotation/Bean.html#typeName--"><code>@Bean(typeName)</code></a> annotation.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -508,7 +508,7 @@ public final <a href="../../../org/apache/juneau/ClassMeta.html" title="cla
<ul class="blockList">
<li class="blockList">
<h4>getTypeProperty</h4>
-<pre>public final <a href="../../../org/apache/juneau/BeanPropertyMeta.html" title="class in org.apache.juneau">BeanPropertyMeta</a> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.514">getTypeProperty</a>()</pre>
+<pre>public final <a href="../../../org/apache/juneau/BeanPropertyMeta.html" title="class in org.apache.juneau">BeanPropertyMeta</a> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.516">getTypeProperty</a>()</pre>
<div class="block">Returns a mock bean property that resolves to the name <js>"_type"</js> and whose value always resolves to the
dictionary name of the bean.</div>
<dl>
@@ -523,7 +523,7 @@ public final <a href="../../../org/apache/juneau/ClassMeta.html" title="cla
<ul class="blockList">
<li class="blockList">
<h4>getPropertyMetas</h4>
-<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../org/apache/juneau/BeanPropertyMeta.html" title="class in org.apache.juneau">BeanPropertyMeta</a>> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.764">getPropertyMetas</a>()</pre>
+<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../org/apache/juneau/BeanPropertyMeta.html" title="class in org.apache.juneau">BeanPropertyMeta</a>> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.766">getPropertyMetas</a>()</pre>
<div class="block">Returns the metadata on all properties associated with this bean.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -537,7 +537,7 @@ public final <a href="../../../org/apache/juneau/ClassMeta.html" title="cla
<ul class="blockList">
<li class="blockList">
<h4>getPropertyMetas</h4>
-<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../org/apache/juneau/BeanPropertyMeta.html" title="class in org.apache.juneau">BeanPropertyMeta</a>> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.774">getPropertyMetas</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or int [...]
+<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../org/apache/juneau/BeanPropertyMeta.html" title="class in org.apache.juneau">BeanPropertyMeta</a>> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.776">getPropertyMetas</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or int [...]
<div class="block">Returns the metadata on the specified list of properties.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -553,7 +553,7 @@ public final <a href="../../../org/apache/juneau/ClassMeta.html" title="cla
<ul class="blockList">
<li class="blockList">
<h4>getExtendedMeta</h4>
-<pre>public <M extends <a href="../../../org/apache/juneau/BeanMetaExtended.html" title="class in org.apache.juneau">BeanMetaExtended</a>> M <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.789">getExtendedMeta</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><M> metaDataClass)</pre>
+<pre>public <M extends <a href="../../../org/apache/juneau/BeanMetaExtended.html" title="class in org.apache.juneau">BeanMetaExtended</a>> M <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.791">getExtendedMeta</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><M> metaDataClass)</pre>
<div class="block">Returns the language-specified extended metadata on this bean class.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -569,7 +569,7 @@ public final <a href="../../../org/apache/juneau/ClassMeta.html" title="cla
<ul class="blockList">
<li class="blockList">
<h4>getPropertyMeta</h4>
-<pre>public <a href="../../../org/apache/juneau/BeanPropertyMeta.html" title="class in org.apache.juneau">BeanPropertyMeta</a> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.799">getPropertyMeta</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</pre>
+<pre>public <a href="../../../org/apache/juneau/BeanPropertyMeta.html" title="class in org.apache.juneau">BeanPropertyMeta</a> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.801">getPropertyMeta</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</pre>
<div class="block">Returns metadata about the specified property.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -585,7 +585,7 @@ public final <a href="../../../org/apache/juneau/ClassMeta.html" title="cla
<ul class="blockList">
<li class="blockList">
<h4>newBean</h4>
-<pre>protected <a href="../../../org/apache/juneau/BeanMeta.html" title="type parameter in BeanMeta">T</a> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.817">newBean</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> outer)
+<pre>protected <a href="../../../org/apache/juneau/BeanMeta.html" title="type parameter in BeanMeta">T</a> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.819">newBean</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> outer)
throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a>,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/InstantiationException.html?is-external=true" title="class or interface in java.lang">InstantiationException</a>,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/IllegalAccessException.html?is-external=true" title="class or interface in java.lang">IllegalAccessException</a>,
@@ -610,7 +610,7 @@ public final <a href="../../../org/apache/juneau/ClassMeta.html" title="cla
<ul class="blockListLast">
<li class="blockList">
<h4>toString</h4>
-<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.904">toString</a>()</pre>
+<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../src-html/org/apache/juneau/BeanMeta.html#line.906">toString</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code> in class <code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/config/Config.html b/content/site/apidocs-8.0.1/org/apache/juneau/config/Config.html
index e708299..795494a 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/config/Config.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/config/Config.html
@@ -125,7 +125,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
<li class='link'><a class='doclink' href='../../../../overview-summary.html#juneau-config'>Overview > juneau-config</a>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java'>Source</a>
</ul></div>
</li>
</ul>
@@ -765,7 +765,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>CONFIG_name</h4>
-<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.163">CONFIG_name</a></pre>
+<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.169">CONFIG_name</a></pre>
<div class="block">Configuration property: Configuration name.
<h5 class='section'>Property:</h5>
@@ -796,7 +796,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>CONFIG_store</h4>
-<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.183">CONFIG_store</a></pre>
+<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.189">CONFIG_store</a></pre>
<div class="block">Configuration property: Configuration store.
<h5 class='section'>Property:</h5>
@@ -825,7 +825,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>CONFIG_serializer</h4>
-<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.204">CONFIG_serializer</a></pre>
+<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.210">CONFIG_serializer</a></pre>
<div class="block">Configuration property: POJO serializer.
<h5 class='section'>Property:</h5>
@@ -855,7 +855,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>CONFIG_parser</h4>
-<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.225">CONFIG_parser</a></pre>
+<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.231">CONFIG_parser</a></pre>
<div class="block">Configuration property: POJO parser.
<h5 class='section'>Property:</h5>
@@ -885,7 +885,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>CONFIG_encoder</h4>
-<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.246">CONFIG_encoder</a></pre>
+<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.252">CONFIG_encoder</a></pre>
<div class="block">Configuration property: Value encoder.
<h5 class='section'>Property:</h5>
@@ -915,7 +915,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>CONFIG_varResolver</h4>
-<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.267">CONFIG_varResolver</a></pre>
+<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.273">CONFIG_varResolver</a></pre>
<div class="block">Configuration property: SVL variable resolver.
<h5 class='section'>Property:</h5>
@@ -945,7 +945,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>CONFIG_binaryLineLength</h4>
-<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.288">CONFIG_binaryLineLength</a></pre>
+<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.294">CONFIG_binaryLineLength</a></pre>
<div class="block">Configuration property: Binary value line length.
<h5 class='section'>Property:</h5>
@@ -975,7 +975,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>CONFIG_binaryFormat</h4>
-<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.316">CONFIG_binaryFormat</a></pre>
+<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.322">CONFIG_binaryFormat</a></pre>
<div class="block">Configuration property: Binary value format.
<h5 class='section'>Property:</h5>
@@ -1012,7 +1012,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>CONFIG_multiLineValuesOnSeparateLines</h4>
-<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.336">CONFIG_multiLineValuesOnSeparateLines</a></pre>
+<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.342">CONFIG_multiLineValuesOnSeparateLines</a></pre>
<div class="block">Configuration property: Multi-line values should always be on separate lines.
<h5 class='section'>Property:</h5>
@@ -1041,7 +1041,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockListLast">
<li class="blockList">
<h4>CONFIG_readOnly</h4>
-<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.356">CONFIG_readOnly</a></pre>
+<pre>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.362">CONFIG_readOnly</a></pre>
<div class="block">Configuration property: Read-only.
<h5 class='section'>Property:</h5>
@@ -1078,7 +1078,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockListLast">
<li class="blockList">
<h4>Config</h4>
-<pre>public <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.413">Config</a>(<a href="../../../../org/apache/juneau/PropertyStore.html" title="class in org.apache.juneau">PropertyStore</a> ps)
+<pre>public <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.419">Config</a>(<a href="../../../../org/apache/juneau/PropertyStore.html" title="class in org.apache.juneau">PropertyStore</a> ps)
throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Constructor.</div>
<dl>
@@ -1131,7 +1131,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getCandidateSystemDefaultConfigNames</h4>
-<pre>public static <a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.99">getCandidateSystemDefaultConfigNames</a>()</pre>
+<pre>public static <a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.102">getCandidateSystemDefaultConfigNames</a>()</pre>
<div class="block">Returns the list of candidate system default configuration file names.
<p>
@@ -1142,6 +1142,9 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<li>Any file ending in <js>".cfg"</js> in the home directory (names ordered alphabetically).
<li><js>"juneau.cfg"</js>
<li><js>"default.cfg"</js>
+ <li><js>"application.cfg"</js>
+ <li><js>"app.cfg"</js>
+ <li><js>"settings.cfg"</js>
</ol>
<p></div>
<dl>
@@ -1158,7 +1161,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>create</h4>
-<pre>public static <a href="../../../../org/apache/juneau/config/ConfigBuilder.html" title="class in org.apache.juneau.config">ConfigBuilder</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.384">create</a>()</pre>
+<pre>public static <a href="../../../../org/apache/juneau/config/ConfigBuilder.html" title="class in org.apache.juneau.config">ConfigBuilder</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.390">create</a>()</pre>
<div class="block">Instantiates a new clean-slate <a href="../../../../org/apache/juneau/config/ConfigBuilder.html" title="class in org.apache.juneau.config"><code>ConfigBuilder</code></a> object.
<p>
@@ -1175,7 +1178,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>create</h4>
-<pre>public static <a href="../../../../org/apache/juneau/config/ConfigBuilder.html" title="class in org.apache.juneau.config">ConfigBuilder</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.397">create</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</pre>
+<pre>public static <a href="../../../../org/apache/juneau/config/ConfigBuilder.html" title="class in org.apache.juneau.config">ConfigBuilder</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.403">create</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</pre>
<div class="block">Same as <a href="../../../../org/apache/juneau/config/Config.html#create--"><code>create()</code></a> but initializes the builder with the specified config name.
<p>
@@ -1194,7 +1197,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>builder</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/ConfigBuilder.html" title="class in org.apache.juneau.config">ConfigBuilder</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.402">builder</a>()</pre>
+<pre>public <a href="../../../../org/apache/juneau/config/ConfigBuilder.html" title="class in org.apache.juneau.config">ConfigBuilder</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.408">builder</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../org/apache/juneau/Context.html#builder--">Context</a></code></span></div>
<div class="block">Creates a builder from this context object.
@@ -1214,7 +1217,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>resolving</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.462">resolving</a>(<a href="../../../../org/apache/juneau/svl/VarResolverSession.html" title="class in org.apache.juneau.svl">VarResolverSession</a> varSession)</pre>
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.468">resolving</a>(<a href="../../../../org/apache/juneau/svl/VarResolverSession.html" title="class in org.apache.juneau.svl">VarResolverSession</a> varSession)</pre>
<div class="block">Creates a copy of this config using the specified var session for resolving variables.
<p>
@@ -1233,7 +1236,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getName</h4>
-<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.471">getName</a>()</pre>
+<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.477">getName</a>()</pre>
<div class="block">Returns the name associated with this config (usually a file name).</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -1247,7 +1250,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>get</h4>
-<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.488">get</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
+<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.494">get</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
<div class="block">Returns the specified value as a string from the config file.
<p>
@@ -1266,7 +1269,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>set</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.522">set</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.528">set</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> value)</pre>
<div class="block">Sets a value in this config.</div>
<dl>
@@ -1286,7 +1289,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>set</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.559">set</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.565">set</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> value)
throws <a href="../../../../org/apache/juneau/serializer/SerializeException.html" title="class in org.apache.juneau.serializer">SerializeException</a></pre>
<div class="block">Adds or replaces an entry with the specified key with a POJO serialized to a string using the registered
@@ -1312,7 +1315,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>set</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.577">set</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.583">set</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> value,
<a href="../../../../org/apache/juneau/serializer/Serializer.html" title="class in org.apache.juneau.serializer">Serializer</a> serializer)
throws <a href="../../../../org/apache/juneau/serializer/SerializeException.html" title="class in org.apache.juneau.serializer">SerializeException</a></pre>
@@ -1338,7 +1341,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>set</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.603">set</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.609">set</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> value,
<a href="../../../../org/apache/juneau/serializer/Serializer.html" title="class in org.apache.juneau.serializer">Serializer</a> serializer,
<a href="../../../../org/apache/juneau/config/ConfigMod.html" title="enum in org.apache.juneau.config">ConfigMod</a> modifier,
@@ -1372,7 +1375,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>set</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.629">set</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.635">set</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> value,
<a href="../../../../org/apache/juneau/serializer/Serializer.html" title="class in org.apache.juneau.serializer">Serializer</a> serializer,
<a href="../../../../org/apache/juneau/config/ConfigMod.html" title="enum in org.apache.juneau.config">ConfigMod</a>[] modifiers,
@@ -1406,7 +1409,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>remove</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.655">remove</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.661">remove</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
<div class="block">Removes an entry with the specified key.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -1424,7 +1427,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>encodeEntries</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.673">encodeEntries</a>()</pre>
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.679">encodeEntries</a>()</pre>
<div class="block">Encodes and unencoded entries in this config.
<p>
@@ -1444,7 +1447,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getString</h4>
-<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.706">getString</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
+<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.712">getString</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
<div class="block">Gets the entry with the specified key.
<p>
@@ -1469,7 +1472,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getString</h4>
-<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.731">getString</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.737">getString</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> def)</pre>
<div class="block">Gets the entry with the specified key.
@@ -1496,7 +1499,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getStringArray</h4>
-<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.746">getStringArray</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
+<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.752">getStringArray</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
<div class="block">Gets the entry with the specified key, splits the value on commas, and returns the values as trimmed strings.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -1512,7 +1515,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getStringArray</h4>
-<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.757">getStringArray</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.763">getStringArray</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] def)</pre>
<div class="block">Same as <a href="../../../../org/apache/juneau/config/Config.html#getStringArray-java.lang.String-"><code>getStringArray(String)</code></a> but returns a default value if the value cannot be found.</div>
<dl>
@@ -1530,7 +1533,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getInt</h4>
-<pre>public int <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.791">getInt</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
+<pre>public int <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.797">getInt</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
<div class="block">Convenience method for getting int config values.
<p>
@@ -1566,7 +1569,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getInt</h4>
-<pre>public int <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.802">getInt</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public int <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.808">getInt</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
int def)</pre>
<div class="block">Same as <a href="../../../../org/apache/juneau/config/Config.html#getInt-java.lang.String-"><code>getInt(String)</code></a> but returns a default value if not set.</div>
<dl>
@@ -1584,7 +1587,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getBoolean</h4>
-<pre>public boolean <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.815">getBoolean</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
+<pre>public boolean <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.821">getBoolean</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
<div class="block">Convenience method for getting boolean config values.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -1600,7 +1603,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getBoolean</h4>
-<pre>public boolean <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.826">getBoolean</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public boolean <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.832">getBoolean</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
boolean def)</pre>
<div class="block">Convenience method for getting boolean config values.</div>
<dl>
@@ -1618,7 +1621,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getLong</h4>
-<pre>public long <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.857">getLong</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
+<pre>public long <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.863">getLong</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
<div class="block">Convenience method for getting long config values.
<p>
@@ -1654,7 +1657,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getLong</h4>
-<pre>public long <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.868">getLong</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public long <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.874">getLong</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
long def)</pre>
<div class="block">Same as <a href="../../../../org/apache/juneau/config/Config.html#getLong-java.lang.String-"><code>getLong(String)</code></a> but returns a default value if not set.</div>
<dl>
@@ -1672,7 +1675,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getDouble</h4>
-<pre>public double <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.890">getDouble</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
+<pre>public double <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.896">getDouble</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
<div class="block">Convenience method for getting double config values.
<p>
@@ -1697,7 +1700,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getDouble</h4>
-<pre>public double <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.901">getDouble</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public double <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.907">getDouble</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
double def)</pre>
<div class="block">Same as <a href="../../../../org/apache/juneau/config/Config.html#getDouble-java.lang.String-"><code>getDouble(String)</code></a> but returns a default value if not set.</div>
<dl>
@@ -1715,7 +1718,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getFloat</h4>
-<pre>public float <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.923">getFloat</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
+<pre>public float <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.929">getFloat</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
<div class="block">Convenience method for getting float config values.
<p>
@@ -1740,7 +1743,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getFloat</h4>
-<pre>public float <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.934">getFloat</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public float <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.940">getFloat</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
float def)</pre>
<div class="block">Same as <a href="../../../../org/apache/juneau/config/Config.html#getFloat-java.lang.String-"><code>getFloat(String)</code></a> but returns a default value if not set.</div>
<dl>
@@ -1758,7 +1761,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getBytes</h4>
-<pre>public byte[] <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.956">getBytes</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)
+<pre>public byte[] <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.962">getBytes</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)
throws <a href="../../../../org/apache/juneau/parser/ParseException.html" title="class in org.apache.juneau.parser">ParseException</a></pre>
<div class="block">Convenience method for getting byte array config values.
@@ -1785,7 +1788,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getBytes</h4>
-<pre>public byte[] <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.973">getBytes</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public byte[] <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.979">getBytes</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
byte[] def)
throws <a href="../../../../org/apache/juneau/parser/ParseException.html" title="class in org.apache.juneau.parser">ParseException</a></pre>
<div class="block">Same as <a href="../../../../org/apache/juneau/config/Config.html#getBytes-java.lang.String-"><code>getBytes(String)</code></a> but with a default value if the entry doesn't exist.</div>
@@ -1806,7 +1809,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getObject</h4>
-<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1047">getObject</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1053">getObject</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Type.html?is-external=true" title="class or interface in java.lang.reflect">Type</a> type,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Type.html?is-external=true" title="class or interface in java.lang.reflect">Type</a>... args)
throws <a href="../../../../org/apache/juneau/parser/ParseException.html" title="class in org.apache.juneau.parser">ParseException</a></pre>
@@ -1883,7 +1886,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getObject</h4>
-<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1068">getObject</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1074">getObject</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
<a href="../../../../org/apache/juneau/parser/Parser.html" title="class in org.apache.juneau.parser">Parser</a> parser,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Type.html?is-external=true" title="class or interface in java.lang.reflect">Type</a> type,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Type.html?is-external=true" title="class or interface in java.lang.reflect">Type</a>... args)
@@ -1912,7 +1915,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getObject</h4>
-<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1107">getObject</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1113">getObject</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><T> type)
throws <a href="../../../../org/apache/juneau/parser/ParseException.html" title="class in org.apache.juneau.parser">ParseException</a></pre>
<div class="block">Same as <a href="../../../../org/apache/juneau/config/Config.html#getObject-java.lang.String-java.lang.reflect.Type-java.lang.reflect.Type...-"><code>getObject(String, Type, Type...)</code></a> except optimized for a non-parameterized class.
@@ -1960,7 +1963,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getObject</h4>
-<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1125">getObject</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1131">getObject</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
<a href="../../../../org/apache/juneau/parser/Parser.html" title="class in org.apache.juneau.parser">Parser</a> parser,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><T> type)
throws <a href="../../../../org/apache/juneau/parser/ParseException.html" title="class in org.apache.juneau.parser">ParseException</a></pre>
@@ -1990,7 +1993,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getObjectWithDefault</h4>
-<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1142">getObjectWithDefault</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1148">getObjectWithDefault</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
T def,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><T> type)
throws <a href="../../../../org/apache/juneau/parser/ParseException.html" title="class in org.apache.juneau.parser">ParseException</a></pre>
@@ -2018,7 +2021,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getObjectWithDefault</h4>
-<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1159">getObjectWithDefault</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1165">getObjectWithDefault</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
<a href="../../../../org/apache/juneau/parser/Parser.html" title="class in org.apache.juneau.parser">Parser</a> parser,
T def,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><T> type)
@@ -2047,7 +2050,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getObjectWithDefault</h4>
-<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1183">getObjectWithDefault</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1189">getObjectWithDefault</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
T def,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Type.html?is-external=true" title="class or interface in java.lang.reflect">Type</a> type,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Type.html?is-external=true" title="class or interface in java.lang.reflect">Type</a>... args)
@@ -2080,7 +2083,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getObjectWithDefault</h4>
-<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1206">getObjectWithDefault</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1212">getObjectWithDefault</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
<a href="../../../../org/apache/juneau/parser/Parser.html" title="class in org.apache.juneau.parser">Parser</a> parser,
T def,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Type.html?is-external=true" title="class or interface in java.lang.reflect">Type</a> type,
@@ -2112,7 +2115,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getObjectMap</h4>
-<pre>public <a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau">ObjectMap</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1219">getObjectMap</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)
+<pre>public <a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau">ObjectMap</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1225">getObjectMap</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)
throws <a href="../../../../org/apache/juneau/parser/ParseException.html" title="class in org.apache.juneau.parser">ParseException</a></pre>
<div class="block">Convenience method for returning a config entry as an <a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau"><code>ObjectMap</code></a>.</div>
<dl>
@@ -2131,7 +2134,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getObjectMap</h4>
-<pre>public <a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau">ObjectMap</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1231">getObjectMap</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public <a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau">ObjectMap</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1237">getObjectMap</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
<a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau">ObjectMap</a> def)
throws <a href="../../../../org/apache/juneau/parser/ParseException.html" title="class in org.apache.juneau.parser">ParseException</a></pre>
<div class="block">Convenience method for returning a config entry as an <a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau"><code>ObjectMap</code></a>.</div>
@@ -2152,7 +2155,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getObjectList</h4>
-<pre>public <a href="../../../../org/apache/juneau/ObjectList.html" title="class in org.apache.juneau">ObjectList</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1242">getObjectList</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)
+<pre>public <a href="../../../../org/apache/juneau/ObjectList.html" title="class in org.apache.juneau">ObjectList</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1248">getObjectList</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)
throws <a href="../../../../org/apache/juneau/parser/ParseException.html" title="class in org.apache.juneau.parser">ParseException</a></pre>
<div class="block">Convenience method for returning a config entry as an <a href="../../../../org/apache/juneau/ObjectList.html" title="class in org.apache.juneau"><code>ObjectList</code></a>.</div>
<dl>
@@ -2171,7 +2174,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getObjectList</h4>
-<pre>public <a href="../../../../org/apache/juneau/ObjectList.html" title="class in org.apache.juneau">ObjectList</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1254">getObjectList</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre>public <a href="../../../../org/apache/juneau/ObjectList.html" title="class in org.apache.juneau">ObjectList</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1260">getObjectList</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
<a href="../../../../org/apache/juneau/ObjectList.html" title="class in org.apache.juneau">ObjectList</a> def)
throws <a href="../../../../org/apache/juneau/parser/ParseException.html" title="class in org.apache.juneau.parser">ParseException</a></pre>
<div class="block">Convenience method for returning a config entry as an <a href="../../../../org/apache/juneau/ObjectList.html" title="class in org.apache.juneau"><code>ObjectList</code></a>.</div>
@@ -2192,7 +2195,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getKeys</h4>
-<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1268">getKeys</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title=" [...]
+<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1274">getKeys</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title=" [...]
<div class="block">Returns the keys of the entries in the specified section.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -2210,7 +2213,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>writeProperties</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1290">writeProperties</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> section,
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1296">writeProperties</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> section,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> bean,
boolean ignoreUnknownProperties)
throws <a href="../../../../org/apache/juneau/parser/ParseException.html" title="class in org.apache.juneau.parser">ParseException</a>,
@@ -2243,7 +2246,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getSectionAsBean</h4>
-<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1324">getSectionAsBean</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> section,
+<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1330">getSectionAsBean</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> section,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><T> c)
throws <a href="../../../../org/apache/juneau/parser/ParseException.html" title="class in org.apache.juneau.parser">ParseException</a></pre>
<div class="block">Shortcut for calling <code>getSectionAsBean(sectionName, c, <jk>false</jk>)</code>.</div>
@@ -2266,7 +2269,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getSectionAsBean</h4>
-<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1370">getSectionAsBean</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> section,
+<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1376">getSectionAsBean</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> section,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><T> c,
boolean ignoreUnknownProperties)
throws <a href="../../../../org/apache/juneau/parser/ParseException.html" title="class in org.apache.juneau.parser">ParseException</a></pre>
@@ -2320,7 +2323,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getSectionAsMap</h4>
-<pre>public <a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau">ObjectMap</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1403">getSectionAsMap</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> section)
+<pre>public <a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau">ObjectMap</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1409">getSectionAsMap</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> section)
throws <a href="../../../../org/apache/juneau/parser/ParseException.html" title="class in org.apache.juneau.parser">ParseException</a></pre>
<div class="block">Returns a section of this config copied into an <a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau"><code>ObjectMap</code></a>.</div>
<dl>
@@ -2341,7 +2344,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getSectionAsInterface</h4>
-<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1483">getSectionAsInterface</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> section,
+<pre>public <T> T <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1489">getSectionAsInterface</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> section,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><T> c)</pre>
<div class="block">Wraps a config file section inside a Java interface so that values in the section can be read and
write using getters and setters.
@@ -2415,7 +2418,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>exists</h4>
-<pre>public boolean <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1515">exists</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
+<pre>public boolean <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1521">exists</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key)</pre>
<div class="block">Returns <jk>true</jk> if this section contains the specified key and the key has a non-blank value.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -2431,7 +2434,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>setSection</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1535">setSection</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name,
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1541">setSection</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name,
<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> preLines)</pre>
<div class="block">Creates the specified section if it doesn't exist.
@@ -2457,7 +2460,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>setSection</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1560">setSection</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name,
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1566">setSection</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name,
<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> preLines,
<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>> contents)
throws <a href="../../../../org/apache/juneau/serializer/SerializeException.html" title="class in org.apache.juneau.serializer">SerializeException</a></pre>
@@ -2485,7 +2488,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>removeSection</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1578">removeSection</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</pre>
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1584">removeSection</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</pre>
<div class="block">Removes the section with the specified name.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -2503,7 +2506,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>setImport</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1600">setImport</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> sectionName,
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1606">setImport</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> sectionName,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> importName,
<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> preLines)</pre>
<div class="block">Creates the specified import statement if it doesn't exist.</div>
@@ -2529,7 +2532,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>removeImport</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1619">removeImport</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> sectionName,
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1625">removeImport</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> sectionName,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> importName)</pre>
<div class="block">Removes the import statement with the specified name from the specified section.</div>
<dl>
@@ -2552,7 +2555,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>load</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1632">load</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">Str [...]
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1638">load</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">Str [...]
throws <a href="../../../../org/apache/juneau/serializer/SerializeException.html" title="class in org.apache.juneau.serializer">SerializeException</a></pre>
<div class="block">Loads the contents of the specified map of maps into this config.</div>
<dl>
@@ -2571,7 +2574,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>commit</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1647">commit</a>()
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1653">commit</a>()
throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Commit the changes in this config to the store.</div>
<dl>
@@ -2589,7 +2592,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>writeTo</h4>
-<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1664">writeTo</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a> w)
+<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1670">writeTo</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a> w)
throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Saves this config file to the specified writer as an INI file.
@@ -2613,7 +2616,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>addListener</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1677">addListener</a>(<a href="../../../../org/apache/juneau/config/event/ConfigEventListener.html" title="interface in org.apache.juneau.config.event">ConfigEventListener</a> listener)</pre>
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1683">addListener</a>(<a href="../../../../org/apache/juneau/config/event/ConfigEventListener.html" title="interface in org.apache.juneau.config.event">ConfigEventListener</a> listener)</pre>
<div class="block">Add a listener to this config to react to modification events.
<p>
@@ -2632,7 +2635,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>removeListener</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1688">removeListener</a>(<a href="../../../../org/apache/juneau/config/event/ConfigEventListener.html" title="interface in org.apache.juneau.config.event">ConfigEventListener</a> listener)</pre>
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1694">removeListener</a>(<a href="../../../../org/apache/juneau/config/event/ConfigEventListener.html" title="interface in org.apache.juneau.config.event">ConfigEventListener</a> listener)</pre>
<div class="block">Removes a listener from this config.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -2648,7 +2651,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>close</h4>
-<pre>public void <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1698">close</a>()
+<pre>public void <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1704">close</a>()
throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Closes this configuration object by unregistering it from the underlying config map.</div>
<dl>
@@ -2663,7 +2666,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>load</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1712">load</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</a> contents,
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1718">load</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</a> contents,
boolean synchronous)
throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -2687,7 +2690,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>load</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1728">load</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> contents,
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1734">load</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> contents,
boolean synchronous)
throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -2711,7 +2714,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>rollback</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1740">rollback</a>()</pre>
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1746">rollback</a>()</pre>
<div class="block">Does a rollback of any changes on this config currently in memory.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -2727,7 +2730,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>asMap</h4>
-<pre>public <a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau">ObjectMap</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1758">asMap</a>()</pre>
+<pre>public <a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau">ObjectMap</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1764">asMap</a>()</pre>
<div class="block">Returns the values in this config map as a map of maps.
<p>
@@ -2749,7 +2752,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>createSession</h4>
-<pre>public <a href="../../../../org/apache/juneau/Session.html" title="class in org.apache.juneau">Session</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1784">createSession</a>(<a href="../../../../org/apache/juneau/SessionArgs.html" title="class in org.apache.juneau">SessionArgs</a> args)</pre>
+<pre>public <a href="../../../../org/apache/juneau/Session.html" title="class in org.apache.juneau">Session</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1790">createSession</a>(<a href="../../../../org/apache/juneau/SessionArgs.html" title="class in org.apache.juneau">SessionArgs</a> args)</pre>
<div class="block">Unused.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -2767,7 +2770,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>createDefaultSessionArgs</h4>
-<pre>public <a href="../../../../org/apache/juneau/SessionArgs.html" title="class in org.apache.juneau">SessionArgs</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1792">createDefaultSessionArgs</a>()</pre>
+<pre>public <a href="../../../../org/apache/juneau/SessionArgs.html" title="class in org.apache.juneau">SessionArgs</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1798">createDefaultSessionArgs</a>()</pre>
<div class="block">Unused.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -2783,7 +2786,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>onConfigChange</h4>
-<pre>public void <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1797">onConfigChange</a>(<a href="../../../../org/apache/juneau/config/event/ConfigEvents.html" title="class in org.apache.juneau.config.event">ConfigEvents</a> events)</pre>
+<pre>public void <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1803">onConfigChange</a>(<a href="../../../../org/apache/juneau/config/event/ConfigEvents.html" title="class in org.apache.juneau.config.event">ConfigEvents</a> events)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../org/apache/juneau/config/event/ConfigEventListener.html#onConfigChange-org.apache.juneau.config.event.ConfigEvents-">ConfigEventListener</a></code></span></div>
<div class="block">Gets called immediately after a config file has been loaded.</div>
<dl>
@@ -2800,7 +2803,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getMediaType</h4>
-<pre>public <a href="../../../../org/apache/juneau/http/MediaType.html" title="class in org.apache.juneau.http">MediaType</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1803">getMediaType</a>()</pre>
+<pre>public <a href="../../../../org/apache/juneau/http/MediaType.html" title="class in org.apache.juneau.http">MediaType</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1809">getMediaType</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../org/apache/juneau/Writable.html#getMediaType--">Writable</a></code></span></div>
<div class="block">Returns the serialized media type for this resource (e.g. <js>"text/html"</js>)</div>
<dl>
@@ -2817,7 +2820,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>toString</h4>
-<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1943">toString</a>()</pre>
+<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1949">toString</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../org/apache/juneau/Context.html#toString--">toString</a></code> in class <code><a href="../../../../org/apache/juneau/Context.html" title="class in org.apache.juneau">Context</a></code></dd>
@@ -2830,7 +2833,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockListLast">
<li class="blockList">
<h4>finalize</h4>
-<pre>protected void <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1948">finalize</a>()
+<pre>protected void <a href="../../../../src-html/org/apache/juneau/config/Config.html#line.1954">finalize</a>()
throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/DtoExample.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/DtoExample.html
index 7ce8492..83b18bf 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/DtoExample.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/DtoExample.html
@@ -115,7 +115,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/dto/DtoExample.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/dto/DtoExample.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/atom/AtomFeed.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/atom/AtomFeed.html
index ce9d6a9..68e9f46 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/atom/AtomFeed.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/atom/AtomFeed.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/dto/atom/AtomFeed.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/dto/atom/AtomFeed.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/atom/AtomHtmlExample.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/atom/AtomHtmlExample.html
index 79a0085..ebc45c5 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/atom/AtomHtmlExample.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/atom/AtomHtmlExample.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/dto/atom/AtomHtmlExample.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/dto/atom/AtomHtmlExample.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/atom/AtomJsonExample.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/atom/AtomJsonExample.html
index 3a0f821..86a85cc 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/atom/AtomJsonExample.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/atom/AtomJsonExample.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/dto/atom/AtomJsonExample.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/dto/atom/AtomJsonExample.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/atom/AtomXmlExample.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/atom/AtomXmlExample.html
index 71c67b7..74f39e7 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/atom/AtomXmlExample.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/dto/atom/AtomXmlExample.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/dto/atom/AtomXmlExample.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/dto/atom/AtomXmlExample.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/html/HtmlComplexExample.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/html/HtmlComplexExample.html
index 367e00b..b52c9fb 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/html/HtmlComplexExample.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/html/HtmlComplexExample.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/html/HtmlComplexExample.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/html/HtmlComplexExample.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/html/HtmlSimpleExample.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/html/HtmlSimpleExample.html
index 8931c6e..3cb7498 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/html/HtmlSimpleExample.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/html/HtmlSimpleExample.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/html/HtmlSimpleExample.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/html/HtmlSimpleExample.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/json/JsonComplexExample.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/json/JsonComplexExample.html
index 47fd79f..63fdfaf 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/json/JsonComplexExample.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/json/JsonComplexExample.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/json/JsonComplexExample.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/json/JsonComplexExample.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/json/JsonConfigurationExample.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/json/JsonConfigurationExample.html
index 3be0e59..4f0db46 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/json/JsonConfigurationExample.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/json/JsonConfigurationExample.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/json/JsonConfigurationExample.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/json/JsonConfigurationExample.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/json/JsonSimpleExample.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/json/JsonSimpleExample.html
index dd10765..9e30b79 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/json/JsonSimpleExample.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/json/JsonSimpleExample.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/json/JsonSimpleExample.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/json/JsonSimpleExample.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/oapi/OapiExample.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/oapi/OapiExample.html
index c88afce..c93093e 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/oapi/OapiExample.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/oapi/OapiExample.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/oapi/OapiExample.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/oapi/OapiExample.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/pojo/Pojo.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/pojo/Pojo.html
index 67631bc..c7a23b5 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/pojo/Pojo.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/pojo/Pojo.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/pojo/Pojo.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/pojo/Pojo.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/pojo/PojoComplex.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/pojo/PojoComplex.html
index 46a1973..5217f9c 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/pojo/PojoComplex.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/pojo/PojoComplex.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/pojo/PojoComplex.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/pojo/PojoComplex.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/rdf/RdfComplexExample.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/rdf/RdfComplexExample.html
index d25367b..f122723 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/rdf/RdfComplexExample.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/rdf/RdfComplexExample.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/rdf/RdfComplexExample.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/rdf/RdfComplexExample.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/rdf/RdfExample.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/rdf/RdfExample.html
index 8234d1c..b4034ce 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/rdf/RdfExample.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/rdf/RdfExample.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/rdf/RdfExample.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/rdf/RdfExample.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/svl/SvlExample.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/svl/SvlExample.html
index 1fa8fec..3119777 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/svl/SvlExample.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/svl/SvlExample.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/svl/SvlExample.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/svl/SvlExample.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/uon/UONComplexExample.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/uon/UONComplexExample.html
index d804ec8..4cbc8ee 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/uon/UONComplexExample.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/uon/UONComplexExample.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/uon/UONComplexExample.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/uon/UONComplexExample.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/uon/UONExample.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/uon/UONExample.html
index d879503..8aaf574 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/uon/UONExample.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/uon/UONExample.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/uon/UONExample.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/uon/UONExample.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/xml/XmlComplexExample.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/xml/XmlComplexExample.html
index bb377f6..a156ac7 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/xml/XmlComplexExample.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/xml/XmlComplexExample.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/xml/XmlComplexExample.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/xml/XmlComplexExample.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/xml/XmlConfigurationExample.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/xml/XmlConfigurationExample.html
index f3de4c0..f8ed408 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/xml/XmlConfigurationExample.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/xml/XmlConfigurationExample.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/xml/XmlConfigurationExample.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/xml/XmlConfigurationExample.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/xml/XmlSimpleExample.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/xml/XmlSimpleExample.html
index 5cfe0a0..e85b463 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/xml/XmlSimpleExample.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/core/xml/XmlSimpleExample.html
@@ -114,7 +114,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/xml/XmlSimpleExample.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/xml/XmlSimpleExample.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/AdminGuard.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/AdminGuard.html
index d4a069e..f681475 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/AdminGuard.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/AdminGuard.html
@@ -119,7 +119,7 @@ extends <a href="../../../../../org/apache/juneau/rest/RestGuard.html" title="cl
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AdminGuard.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AdminGuard.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/HelloWorldResource.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/HelloWorldResource.html
index 4305216..f5747c8 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/HelloWorldResource.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/HelloWorldResource.html
@@ -123,7 +123,7 @@ implements <a href="../../../../../org/apache/juneau/rest/BasicRestConfig.html"
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/RequestEchoResource.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/RequestEchoResource.html
index 08fed82..1925ad2 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/RequestEchoResource.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/RequestEchoResource.html
@@ -124,7 +124,7 @@ extends <a href="../../../../../org/apache/juneau/rest/BasicRest.html" title="cl
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/RootResources.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/RootResources.html
index cb81c1d..9ee4466 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/RootResources.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/RootResources.html
@@ -148,7 +148,7 @@ extends <a href="../../../../../org/apache/juneau/rest/BasicRestServletJenaGroup
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java'>Source</a>
</ul></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/command/EchoCommand.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/command/EchoCommand.html
index b195ce2..6cbabc3 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/command/EchoCommand.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/command/EchoCommand.html
@@ -119,7 +119,7 @@ extends <a href="../../../../../../org/apache/juneau/microservice/console/Consol
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/command/EchoCommand.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/command/EchoCommand.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/dto/AtomFeedResource.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/dto/AtomFeedResource.html
index 0ff76f7..b0c6128 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/dto/AtomFeedResource.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/dto/AtomFeedResource.html
@@ -144,7 +144,7 @@ extends <a href="../../../../../../org/apache/juneau/rest/BasicRestServletJena.h
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/AtomFeedResource.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/AtomFeedResource.java'>Source</a>
</ul></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/dto/DtoExamples.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/dto/DtoExamples.html
index 3ed9c3d..53fe6ec 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/dto/DtoExamples.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/dto/DtoExamples.html
@@ -148,7 +148,7 @@ extends <a href="../../../../../../org/apache/juneau/rest/BasicRestServletJenaGr
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/DtoExamples.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/DtoExamples.java'>Source</a>
</ul></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/dto/JsonSchemaResource.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/dto/JsonSchemaResource.html
index f9a08e6..54eadb9 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/dto/JsonSchemaResource.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/dto/JsonSchemaResource.html
@@ -150,7 +150,7 @@ extends <a href="../../../../../../org/apache/juneau/rest/BasicRestServletJena.h
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/JsonSchemaResource.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/JsonSchemaResource.java'>Source</a>
</ul></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/dto/PredefinedLabelsResource.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/dto/PredefinedLabelsResource.html
index c744a1b..d7da707 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/dto/PredefinedLabelsResource.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/dto/PredefinedLabelsResource.html
@@ -143,7 +143,7 @@ extends <a href="../../../../../../org/apache/juneau/rest/BasicRestServlet.html"
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/PredefinedLabelsResource.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/PredefinedLabelsResource.java'>Source</a>
</ul></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/jetty/App.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/jetty/App.html
index 5091575..e7b152a 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/jetty/App.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/jetty/App.html
@@ -122,7 +122,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest-jetty/src/main/java/org/apache/juneau/examples/rest/jetty/App.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest-jetty/src/main/java/org/apache/juneau/examples/rest/jetty/App.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/AbstractPersistenceService.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/AbstractPersistenceService.html
index c753fbd..7d617e2 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/AbstractPersistenceService.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/AbstractPersistenceService.html
@@ -118,7 +118,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/AbstractPersistenceService.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/AbstractPersistenceService.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/ExpiresAfter.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/ExpiresAfter.html
index 2770da4..b23e2d6 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/ExpiresAfter.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/ExpiresAfter.html
@@ -119,7 +119,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/ExpiresAfter.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/ExpiresAfter.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/IdConflict.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/IdConflict.html
index 02ecca9..715519b 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/IdConflict.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/IdConflict.html
@@ -138,7 +138,7 @@ extends <a href="../../../../../../org/apache/juneau/rest/exception/Conflict.htm
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/IdConflict.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/IdConflict.java'>Source</a>
</ul></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/IdNotFound.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/IdNotFound.html
index 66cfe4a..56e284c 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/IdNotFound.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/IdNotFound.html
@@ -138,7 +138,7 @@ extends <a href="../../../../../../org/apache/juneau/rest/exception/NotFound.htm
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/IdNotFound.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/IdNotFound.java'>Source</a>
</ul></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidId.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidId.html
index 4b4378b..38793a0 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidId.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidId.html
@@ -138,7 +138,7 @@ extends <a href="../../../../../../org/apache/juneau/rest/exception/BadRequest.h
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/InvalidId.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/InvalidId.java'>Source</a>
</ul></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidLogin.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidLogin.html
index efc7956..09db6ef 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidLogin.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidLogin.html
@@ -138,7 +138,7 @@ extends <a href="../../../../../../org/apache/juneau/rest/exception/Unauthorized
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/InvalidLogin.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/InvalidLogin.java'>Source</a>
</ul></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidSpecies.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidSpecies.html
index 6788131..2da773a 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidSpecies.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidSpecies.html
@@ -138,7 +138,7 @@ extends <a href="../../../../../../org/apache/juneau/rest/exception/BadRequest.h
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/InvalidSpecies.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/InvalidSpecies.java'>Source</a>
</ul></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidTag.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidTag.html
index 7981ef2..86b7a45 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidTag.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidTag.html
@@ -138,7 +138,7 @@ extends <a href="../../../../../../org/apache/juneau/rest/exception/BadRequest.h
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/InvalidTag.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/InvalidTag.java'>Source</a>
</ul></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidUsername.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidUsername.html
index 7d16b72..6917e46 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidUsername.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/InvalidUsername.html
@@ -138,7 +138,7 @@ extends <a href="../../../../../../org/apache/juneau/rest/exception/BadRequest.h
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/InvalidUsername.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/InvalidUsername.java'>Source</a>
</ul></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/PetStoreService.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/PetStoreService.html
index 15e285c..a1a68f8 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/PetStoreService.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/PetStoreService.html
@@ -122,7 +122,7 @@ extends <a href="../../../../../../org/apache/juneau/examples/rest/petstore/Abst
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/PetStoreService.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/PetStoreService.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/CreateOrder.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/CreateOrder.html
index f46f91b..a1b5e67 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/CreateOrder.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/CreateOrder.html
@@ -116,7 +116,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/CreateOrder.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/CreateOrder.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/CreatePet.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/CreatePet.html
index aa8472e..f0dafc6 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/CreatePet.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/CreatePet.html
@@ -120,7 +120,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/CreatePet.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/CreatePet.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/Order.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/Order.html
index 3a9db1f..65e831f 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/Order.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/Order.html
@@ -118,7 +118,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/Order.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/Order.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/OrderStatus.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/OrderStatus.html
index 97bfc18..4c38e30 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/OrderStatus.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/OrderStatus.html
@@ -124,7 +124,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/OrderStatus.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/OrderStatus.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/Pet.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/Pet.html
index 6437a2c..22a9fdb 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/Pet.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/Pet.html
@@ -118,7 +118,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/Pet.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/Pet.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/PetStatus.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/PetStatus.html
index 7f808b5..1d5f749 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/PetStatus.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/PetStatus.html
@@ -124,7 +124,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/PetStatus.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/PetStatus.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/PetTag.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/PetTag.html
index e8a6ea2..b83abc8 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/PetTag.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/PetTag.html
@@ -117,7 +117,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/PetTag.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/PetTag.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/PetTagNameSwap.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/PetTagNameSwap.html
index eeaa190..3fa2744 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/PetTagNameSwap.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/PetTagNameSwap.html
@@ -119,7 +119,7 @@ extends <a href="../../../../../../../org/apache/juneau/transform/PojoSwap.html"
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/PetTagNameSwap.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/PetTagNameSwap.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/Species.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/Species.html
index a9d5455..501c978 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/Species.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/Species.html
@@ -124,7 +124,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/Species.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/Species.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/UpdatePet.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/UpdatePet.html
index 1b6c825..9a0b62e 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/UpdatePet.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/UpdatePet.html
@@ -121,7 +121,7 @@ extends <a href="../../../../../../../org/apache/juneau/examples/rest/petstore/d
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/UpdatePet.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/UpdatePet.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/User.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/User.html
index 6ae5250..0ad224c 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/User.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/User.html
@@ -118,7 +118,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/User.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/User.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/UserStatus.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/UserStatus.html
index ef9c0e7..c5b81eb 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/UserStatus.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/dto/UserStatus.html
@@ -124,7 +124,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/UserStatus.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/dto/UserStatus.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/AddOrderMenuItem.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/AddOrderMenuItem.html
index 6ebff2e..9ba1228 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/AddOrderMenuItem.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/AddOrderMenuItem.html
@@ -124,7 +124,7 @@ extends <a href="../../../../../../../org/apache/juneau/rest/widget/MenuItemWidg
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/rest/AddOrderMenuItem.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/rest/AddOrderMenuItem.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/AddPetMenuItem.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/AddPetMenuItem.html
index bfbad57..d2b6824 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/AddPetMenuItem.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/AddPetMenuItem.html
@@ -124,7 +124,7 @@ extends <a href="../../../../../../../org/apache/juneau/rest/widget/MenuItemWidg
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/rest/AddPetMenuItem.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/rest/AddPetMenuItem.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/PetStore.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/PetStore.html
index 4f3e8d4..438225b 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/PetStore.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/PetStore.html
@@ -110,7 +110,7 @@ public interface <a href="../../../../../../../src-html/org/apache/juneau/exampl
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/rest/PetStore.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/rest/PetStore.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/PetStoreResource.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/PetStoreResource.html
index 60f2c5a..6bf3b80 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/PetStoreResource.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/PetStoreResource.html
@@ -152,7 +152,7 @@ implements <a href="../../../../../../../org/apache/juneau/examples/rest/petstor
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/rest/PetStoreResource.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/rest/PetStoreResource.java'>Source</a>
</ul></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/PhotosResource.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/PhotosResource.html
index 4e463bb..a42013f 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/PhotosResource.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/PhotosResource.html
@@ -145,7 +145,7 @@ extends <a href="../../../../../../../org/apache/juneau/rest/BasicRestServlet.ht
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/rest/PhotosResource.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/rest/PhotosResource.java'>Source</a>
</ul></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/SqlQueryResource.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/SqlQueryResource.html
index b63f579..74b6646 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/SqlQueryResource.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/SqlQueryResource.html
@@ -143,7 +143,7 @@ extends <a href="../../../../../../../org/apache/juneau/rest/BasicRestServlet.ht
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/rest/SqlQueryResource.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/rest/SqlQueryResource.java'>Source</a>
</ul></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/UploadPhotoMenuItem.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/UploadPhotoMenuItem.html
index 43d3e07..ebdf2c5 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/UploadPhotoMenuItem.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/petstore/rest/UploadPhotoMenuItem.html
@@ -124,7 +124,7 @@ extends <a href="../../../../../../../org/apache/juneau/rest/widget/MenuItemWidg
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/rest/UploadPhotoMenuItem.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/rest/UploadPhotoMenuItem.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/springboot/App.html b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/springboot/App.html
index 8f188d9..0bc92a4 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/springboot/App.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/examples/rest/springboot/App.html
@@ -116,7 +116,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
<h5 class='section'>See Also:</h5>
<ul class='doctree'>
- <li class='extlink'><a class='doclink' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest-springboot/src/main/java/org/apache/juneau/examples/rest/springboot/App.java'>Source</a>
+ <li class='extlink'><a class='doclink' target='_blank' href='https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest-springboot/src/main/java/org/apache/juneau/examples/rest/springboot/App.java'>Source</a>
</ul></div>
</li>
</ul>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/microservice/Microservice.html b/content/site/apidocs-8.0.1/org/apache/juneau/microservice/Microservice.html
index 1933579..a770aa0 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/microservice/Microservice.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/microservice/Microservice.html
@@ -439,7 +439,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>init</h4>
-<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.309">init</a>()
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.308">init</a>()
throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Initializes this microservice.
@@ -462,7 +462,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>start</h4>
-<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.376">start</a>()
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.375">start</a>()
throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Start this application.
@@ -482,7 +482,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>startConsole</h4>
-<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.408">startConsole</a>()
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.407">startConsole</a>()
throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Starts the console thread for this microservice.</div>
<dl>
@@ -499,7 +499,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>stopConsole</h4>
-<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.420">stopConsole</a>()
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.419">stopConsole</a>()
throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Stops the console thread for this microservice.</div>
<dl>
@@ -516,7 +516,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getArgs</h4>
-<pre>public <a href="../../../../org/apache/juneau/utils/Args.html" title="class in org.apache.juneau.utils">Args</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.437">getArgs</a>()</pre>
+<pre>public <a href="../../../../org/apache/juneau/utils/Args.html" title="class in org.apache.juneau.utils">Args</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.436">getArgs</a>()</pre>
<div class="block">Returns the command-line arguments passed into the application.
<p>
@@ -536,7 +536,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getConfig</h4>
-<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.538">getConfig</a>()</pre>
+<pre>public <a href="../../../../org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config">Config</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.537">getConfig</a>()</pre>
<div class="block">Returns the external INI-style configuration file that can be used to configure your microservice.
<p>
@@ -642,7 +642,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getManifest</h4>
-<pre>public <a href="../../../../org/apache/juneau/utils/ManifestFile.html" title="class in org.apache.juneau.utils">ManifestFile</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.562">getManifest</a>()</pre>
+<pre>public <a href="../../../../org/apache/juneau/utils/ManifestFile.html" title="class in org.apache.juneau.utils">ManifestFile</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.561">getManifest</a>()</pre>
<div class="block">Returns the main jar manifest file contents as a simple <a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau"><code>ObjectMap</code></a>.
<p>
@@ -671,7 +671,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getVarResolver</h4>
-<pre>public <a href="../../../../org/apache/juneau/svl/VarResolver.html" title="class in org.apache.juneau.svl">VarResolver</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.578">getVarResolver</a>()</pre>
+<pre>public <a href="../../../../org/apache/juneau/svl/VarResolver.html" title="class in org.apache.juneau.svl">VarResolver</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.577">getVarResolver</a>()</pre>
<div class="block">Returns the variable resolver for resolving variables in strings and files.
<p>
@@ -692,7 +692,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getLogger</h4>
-<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/util/logging/Logger.html?is-external=true" title="class or interface in java.util.logging">Logger</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.587">getLogger</a>()</pre>
+<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/util/logging/Logger.html?is-external=true" title="class or interface in java.util.logging">Logger</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.586">getLogger</a>()</pre>
<div class="block">Returns the logger for this microservice.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -706,7 +706,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>executeCommand</h4>
-<pre>public boolean <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.601">executeCommand</a>(<a href="../../../../org/apache/juneau/utils/Args.html" title="class in org.apache.juneau.utils">Args</a> args,
+<pre>public boolean <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.600">executeCommand</a>(<a href="../../../../org/apache/juneau/utils/Args.html" title="class in org.apache.juneau.utils">Args</a> args,
<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html?is-external=true" title="class or interface in java.util">Scanner</a> in,
<a href="http://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a> out)</pre>
<div class="block">Executes a console command.</div>
@@ -727,7 +727,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>executeCommand</h4>
-<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.626">executeCommand</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> command,
+<pre>public <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.625">executeCommand</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> command,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> input,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>... args)</pre>
<div class="block">Convenience method for executing a console command directly.
@@ -750,7 +750,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>join</h4>
-<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.648">join</a>()
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.647">join</a>()
throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Joins the application with the current thread.
@@ -770,7 +770,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>stop</h4>
-<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.661">stop</a>()
+<pre>public <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.660">stop</a>()
throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Stop this application.
@@ -790,7 +790,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>exit</h4>
-<pre>public void <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.671">exit</a>()
+<pre>public void <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.670">exit</a>()
throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Stops the console (if it's started) and calls <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/System.html?is-external=true#exit-int-" title="class or interface in java.lang"><code>System.exit(int)</code></a>.</div>
<dl>
@@ -805,7 +805,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>kill</h4>
-<pre>public void <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.683">kill</a>()</pre>
+<pre>public void <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.682">kill</a>()</pre>
<div class="block">Kill the JVM by calling <code>System.exit(2);</code>.</div>
</li>
</ul>
@@ -815,7 +815,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getConsoleCommands</h4>
-<pre>public final <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../org/apache/juneau/microservice/console/ConsoleCommand.html" title="class in org.apache.juneau.microservice.console">ConsoleCommand</a>> <a href="../../../../src- [...]
+<pre>public final <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../org/apache/juneau/microservice/console/ConsoleCommand.html" title="class in org.apache.juneau.microservice.console">ConsoleCommand</a>> <a href="../../../../src- [...]
<div class="block">Returns the console commands associated with this microservice.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -829,7 +829,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getConsoleReader</h4>
-<pre>protected <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html?is-external=true" title="class or interface in java.util">Scanner</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.710">getConsoleReader</a>()</pre>
+<pre>protected <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html?is-external=true" title="class or interface in java.util">Scanner</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.709">getConsoleReader</a>()</pre>
<div class="block">Returns the console reader.
<p>
@@ -846,7 +846,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>getConsoleWriter</h4>
-<pre>protected <a href="http://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.722">getConsoleWriter</a>()</pre>
+<pre>protected <a href="http://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a> <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.721">getConsoleWriter</a>()</pre>
<div class="block">Returns the console writer.
<p>
@@ -863,7 +863,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>out</h4>
-<pre>public void <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.736">out</a>(<a href="../../../../org/apache/juneau/utils/MessageBundle.html" title="class in org.apache.juneau.utils">MessageBundle</a> mb,
+<pre>public void <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.735">out</a>(<a href="../../../../org/apache/juneau/utils/MessageBundle.html" title="class in org.apache.juneau.utils">MessageBundle</a> mb,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> messageKey,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>... args)</pre>
<div class="block">Prints a localized message to the console writer.
@@ -884,7 +884,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>err</h4>
-<pre>public void <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.753">err</a>(<a href="../../../../org/apache/juneau/utils/MessageBundle.html" title="class in org.apache.juneau.utils">MessageBundle</a> mb,
+<pre>public void <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.752">err</a>(<a href="../../../../org/apache/juneau/utils/MessageBundle.html" title="class in org.apache.juneau.utils">MessageBundle</a> mb,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> messageKey,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>... args)</pre>
<div class="block">Prints a localized message to STDERR.
@@ -905,7 +905,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockList">
<li class="blockList">
<h4>log</h4>
-<pre>protected void <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.767">log</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/logging/Level.html?is-external=true" title="class or interface in java.util.logging">Level</a> level,
+<pre>protected void <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.766">log</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/logging/Level.html?is-external=true" title="class or interface in java.util.logging">Level</a> level,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message,
<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>... args)</pre>
<div class="block">Logs a message to the log file.</div>
@@ -923,7 +923,7 @@ implements <a href="../../../../org/apache/juneau/config/event/ConfigEventListen
<ul class="blockListLast">
<li class="blockList">
<h4>onConfigChange</h4>
-<pre>public void <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.773">onConfigChange</a>(<a href="../../../../org/apache/juneau/config/event/ConfigEvents.html" title="class in org.apache.juneau.config.event">ConfigEvents</a> events)</pre>
+<pre>public void <a href="../../../../src-html/org/apache/juneau/microservice/Microservice.html#line.772">onConfigChange</a>(<a href="../../../../org/apache/juneau/config/event/ConfigEvents.html" title="class in org.apache.juneau.config.event">ConfigEvents</a> events)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../org/apache/juneau/config/event/ConfigEventListener.html#onConfigChange-org.apache.juneau.config.event.ConfigEvents-">ConfigEventListener</a></code></span></div>
<div class="block">Gets called immediately after a config file has been loaded.</div>
<dl>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRest.html b/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRest.html
index 99608c3..9429e90 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRest.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRest.html
@@ -118,12 +118,14 @@ var activeTableTab = "activeTableTab";
<br>
<pre><a href="../../../../org/apache/juneau/rest/annotation/RestResource.html" title="annotation in org.apache.juneau.rest.annotation">@RestResource</a>(<a href="../../../../org/apache/juneau/rest/annotation/RestResource.html#allowedMethodParams--">allowedMethodParams</a>="OPTIONS",
<a href="../../../../org/apache/juneau/rest/annotation/RestResource.html#htmldoc--">htmldoc</a>=)
-public abstract class <a href="../../../../src-html/org/apache/juneau/rest/BasicRest.html#line.44">BasicRest</a>
+public abstract class <a href="../../../../src-html/org/apache/juneau/rest/BasicRest.html#line.46">BasicRest</a>
extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="../../../../org/apache/juneau/rest/BasicRestConfig.html" title="interface in org.apache.juneau.rest">BasicRestConfig</a></pre>
-<div class="block"><h5 class='section'>See Also:</h5>
+<div class="block">Identical to <a href="../../../../org/apache/juneau/rest/BasicRestServlet.html" title="class in org.apache.juneau.rest"><code>BasicRestServlet</code></a> but doesn't extend from <code>HttpServlet</code>
+
+ <h5 class='section'>See Also:</h5>
<ul>
- <li class='link'><a class='doclink' href='../../../../overview-summary.html#juneau-rest-server.Instantiation.BasicRestServlet'>Overview > juneau-rest-server > Instantiation > BasicRestServlet</a>
+ <li class='link'><a class='doclink' href='../../../../overview-summary.html#juneau-rest-server.Instantiation.BasicRest'>Overview > juneau-rest-server > Instantiation > BasicRest</a>
</ul></div>
</li>
</ul>
@@ -194,7 +196,7 @@ implements <a href="../../../../org/apache/juneau/rest/BasicRestConfig.html" tit
<ul class="blockListLast">
<li class="blockList">
<h4>BasicRest</h4>
-<pre>public <a href="../../../../src-html/org/apache/juneau/rest/BasicRest.html#line.44">BasicRest</a>()</pre>
+<pre>public <a href="../../../../src-html/org/apache/juneau/rest/BasicRest.html#line.46">BasicRest</a>()</pre>
</li>
</ul>
</li>
@@ -212,7 +214,7 @@ implements <a href="../../../../org/apache/juneau/rest/BasicRestConfig.html" tit
<li class="blockList">
<h4>getOptions</h4>
<pre><a href="../../../../org/apache/juneau/rest/annotation/RestMethod.html" title="annotation in org.apache.juneau.rest.annotation">@RestMethod</a>(<a href="../../../../org/apache/juneau/rest/annotation/RestMethod.html#name--">name</a>="OPTIONS",<a href="../../../../org/apache/juneau/rest/annotation/RestMethod.html#path--">path</a>="/*",<a href="../../../../org/apache/juneau/rest/annotation/RestMethod.html#summary--">summary</a>="Swagger documentation",<a href="../../../../org/apache/ju [...]
-public <a href="../../../../org/apache/juneau/dto/swagger/Swagger.html" title="class in org.apache.juneau.dto.swagger">Swagger</a> <a href="../../../../src-html/org/apache/juneau/rest/BasicRest.html#line.95">getOptions</a>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a> req)</pre>
+public <a href="../../../../org/apache/juneau/dto/swagger/Swagger.html" title="class in org.apache.juneau.dto.swagger">Swagger</a> <a href="../../../../src-html/org/apache/juneau/rest/BasicRest.html#line.97">getOptions</a>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a> req)</pre>
<div class="block">[OPTIONS /*] - Show resource options.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRestGroup.html b/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRestGroup.html
index 44ca7ef..4244463 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRestGroup.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRestGroup.html
@@ -118,20 +118,13 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre><a href="../../../../org/apache/juneau/rest/annotation/RestResource.html" title="annotation in org.apache.juneau.rest.annotation">@RestResource</a>
-public abstract class <a href="../../../../src-html/org/apache/juneau/rest/BasicRestGroup.html#line.36">BasicRestGroup</a>
+public abstract class <a href="../../../../src-html/org/apache/juneau/rest/BasicRestGroup.html#line.31">BasicRestGroup</a>
extends <a href="../../../../org/apache/juneau/rest/BasicRest.html" title="class in org.apache.juneau.rest">BasicRest</a></pre>
-<div class="block">Specialized subclass of <a href="../../../../org/apache/juneau/rest/BasicRestServlet.html" title="class in org.apache.juneau.rest"><code>BasicRestServlet</code></a> for showing "group" pages.
-
- <p>
- Group pages consist of simple lists of child resource URLs and their labels.
- They're meant to be used as jumping-off points for child resources.
-
- <p>
- Child resources are specified using the <a href="../../../../org/apache/juneau/rest/annotation/RestResource.html#children--"><code>@RestResource(children)</code></a> annotation.
+<div class="block">Identical to <a href="../../../../org/apache/juneau/rest/BasicRestServletGroup.html" title="class in org.apache.juneau.rest"><code>BasicRestServletGroup</code></a> but doesn't extend from <code>HttpServlet</code>
<h5 class='section'>See Also:</h5>
<ul>
- <li class='link'>juneau-rest-server.Instantiation.RouterPages
+ <li class='link'><a class='doclink' href='../../../../overview-summary.html#juneau-rest-server.Instantiation.BasicRestGroup'>Overview > juneau-rest-server > Instantiation > BasicRestGroup</a>
</ul></div>
</li>
</ul>
@@ -209,7 +202,7 @@ extends <a href="../../../../org/apache/juneau/rest/BasicRest.html" title="class
<ul class="blockListLast">
<li class="blockList">
<h4>BasicRestGroup</h4>
-<pre>public <a href="../../../../src-html/org/apache/juneau/rest/BasicRestGroup.html#line.36">BasicRestGroup</a>()</pre>
+<pre>public <a href="../../../../src-html/org/apache/juneau/rest/BasicRestGroup.html#line.31">BasicRestGroup</a>()</pre>
</li>
</ul>
</li>
@@ -229,7 +222,7 @@ extends <a href="../../../../org/apache/juneau/rest/BasicRest.html" title="class
<pre><a href="../../../../org/apache/juneau/rest/annotation/RestMethod.html" title="annotation in org.apache.juneau.rest.annotation">@RestMethod</a>(<a href="../../../../org/apache/juneau/rest/annotation/RestMethod.html#name--">name</a>="GET",
<a href="../../../../org/apache/juneau/rest/annotation/RestMethod.html#path--">path</a>="/",
<a href="../../../../org/apache/juneau/rest/annotation/RestMethod.html#summary--">summary</a>="Navigation page")
-public <a href="../../../../org/apache/juneau/rest/helper/ChildResourceDescriptions.html" title="class in org.apache.juneau.rest.helper">ChildResourceDescriptions</a> <a href="../../../../src-html/org/apache/juneau/rest/BasicRestGroup.html#line.46">getChildren</a>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a> req)
+public <a href="../../../../org/apache/juneau/rest/helper/ChildResourceDescriptions.html" title="class in org.apache.juneau.rest.helper">ChildResourceDescriptions</a> <a href="../../../../src-html/org/apache/juneau/rest/BasicRestGroup.html#line.41">getChildren</a>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a> req)
throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">[GET /] - Get child resources.</div>
<dl>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRestJena.html b/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRestJena.html
index 5600cbd..0840825 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRestJena.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRestJena.html
@@ -132,9 +132,9 @@
<br>
<pre><a href="../../../../org/apache/juneau/rest/annotation/RestResource.html" title="annotation in org.apache.juneau.rest.annotation">@RestResource</a>(<a href="../../../../org/apache/juneau/rest/annotation/RestResource.html#serializers--">serializers</a>={<a href="../../../../org/apache/juneau/rest/Inherit.html" title="class in org.apache.juneau.rest">Inherit.class</a>,<a href="../../../../org/apache/juneau/jena/RdfXmlSerializer.html" title="class in org.apache.juneau.jena">RdfXmlSeria [...]
<a href="../../../../org/apache/juneau/rest/annotation/RestResource.html#parsers--">parsers</a>={<a href="../../../../org/apache/juneau/rest/Inherit.html" title="class in org.apache.juneau.rest">Inherit.class</a>,<a href="../../../../org/apache/juneau/jena/RdfXmlParser.html" title="class in org.apache.juneau.jena">RdfXmlParser.class</a>,<a href="../../../../org/apache/juneau/jena/TurtleParser.html" title="class in org.apache.juneau.jena">TurtleParser.class</a>,<a href="../. [...]
-public abstract class <a href="../../../../src-html/org/apache/juneau/rest/BasicRestJena.html#line.39">BasicRestJena</a>
+public abstract class <a href="../../../../src-html/org/apache/juneau/rest/BasicRestJena.html#line.41">BasicRestJena</a>
extends <a href="../../../../org/apache/juneau/rest/BasicRestServlet.html" title="class in org.apache.juneau.rest">BasicRestServlet</a></pre>
-<div class="block">Resource servlet with additional RDF support.</div>
+<div class="block">Identical to <a href="../../../../org/apache/juneau/rest/BasicRestServletJena.html" title="class in org.apache.juneau.rest"><code>BasicRestServletJena</code></a> but doesn't extend from <code>HttpServlet</code></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../serialized-form.html#org.apache.juneau.rest.BasicRestJena">Serialized Form</a></dd>
@@ -223,7 +223,7 @@ extends <a href="../../../../org/apache/juneau/rest/BasicRestServlet.html" title
<ul class="blockListLast">
<li class="blockList">
<h4>BasicRestJena</h4>
-<pre>public <a href="../../../../src-html/org/apache/juneau/rest/BasicRestJena.html#line.39">BasicRestJena</a>()</pre>
+<pre>public <a href="../../../../src-html/org/apache/juneau/rest/BasicRestJena.html#line.41">BasicRestJena</a>()</pre>
</li>
</ul>
</li>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRestJenaGroup.html b/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRestJenaGroup.html
index 21ac5e0..f52e239 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRestJenaGroup.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRestJenaGroup.html
@@ -133,9 +133,9 @@
<br>
<pre><a href="../../../../org/apache/juneau/rest/annotation/RestResource.html" title="annotation in org.apache.juneau.rest.annotation">@RestResource</a>(<a href="../../../../org/apache/juneau/rest/annotation/RestResource.html#serializers--">serializers</a>={<a href="../../../../org/apache/juneau/rest/Inherit.html" title="class in org.apache.juneau.rest">Inherit.class</a>,<a href="../../../../org/apache/juneau/jena/RdfXmlSerializer.html" title="class in org.apache.juneau.jena">RdfXmlSeria [...]
<a href="../../../../org/apache/juneau/rest/annotation/RestResource.html#parsers--">parsers</a>={<a href="../../../../org/apache/juneau/rest/Inherit.html" title="class in org.apache.juneau.rest">Inherit.class</a>,<a href="../../../../org/apache/juneau/jena/RdfXmlParser.html" title="class in org.apache.juneau.jena">RdfXmlParser.class</a>,<a href="../../../../org/apache/juneau/jena/TurtleParser.html" title="class in org.apache.juneau.jena">TurtleParser.class</a>,<a href="../. [...]
-public abstract class <a href="../../../../src-html/org/apache/juneau/rest/BasicRestJenaGroup.html#line.39">BasicRestJenaGroup</a>
+public abstract class <a href="../../../../src-html/org/apache/juneau/rest/BasicRestJenaGroup.html#line.41">BasicRestJenaGroup</a>
extends <a href="../../../../org/apache/juneau/rest/BasicRestServletGroup.html" title="class in org.apache.juneau.rest">BasicRestServletGroup</a></pre>
-<div class="block">Resource group with additional RDF support.</div>
+<div class="block">Identical to <a href="../../../../org/apache/juneau/rest/BasicRestServletJenaGroup.html" title="class in org.apache.juneau.rest"><code>BasicRestServletJenaGroup</code></a> but doesn't extend from <code>HttpServlet</code></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../serialized-form.html#org.apache.juneau.rest.BasicRestJenaGroup">Serialized Form</a></dd>
@@ -231,7 +231,7 @@ extends <a href="../../../../org/apache/juneau/rest/BasicRestServletGroup.html"
<ul class="blockListLast">
<li class="blockList">
<h4>BasicRestJenaGroup</h4>
-<pre>public <a href="../../../../src-html/org/apache/juneau/rest/BasicRestJenaGroup.html#line.39">BasicRestJenaGroup</a>()</pre>
+<pre>public <a href="../../../../src-html/org/apache/juneau/rest/BasicRestJenaGroup.html#line.41">BasicRestJenaGroup</a>()</pre>
</li>
</ul>
</li>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRestServletGroup.html b/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRestServletGroup.html
index b744819..1612411 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRestServletGroup.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/rest/BasicRestServletGroup.html
@@ -150,7 +150,7 @@ extends <a href="../../../../org/apache/juneau/rest/BasicRestServlet.html" title
<h5 class='section'>See Also:</h5>
<ul>
- <li class='link'>juneau-rest-server.Instantiation.RouterPages
+ <li class='link'><a class='doclink' href='../../../../overview-summary.html#juneau-rest-server.Instantiation.BasicRestServletGroup'>Overview > juneau-rest-server > Instantiation > BasicRestServletGroup</a>
</ul></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
diff --git a/content/site/apidocs-8.0.1/org/apache/juneau/rest/package-summary.html b/content/site/apidocs-8.0.1/org/apache/juneau/rest/package-summary.html
index fd9c3c8..0c55b8b 100644
--- a/content/site/apidocs-8.0.1/org/apache/juneau/rest/package-summary.html
+++ b/content/site/apidocs-8.0.1/org/apache/juneau/rest/package-summary.html
@@ -165,7 +165,9 @@
<tr class="altColor">
<td class="colFirst"><a href="../../../../org/apache/juneau/rest/BasicRest.html" title="class in org.apache.juneau.rest">BasicRest</a></td>
<td class="colLast">
-<div class="block"><h5 class='section'>See Also:</div>
+<div class="block">Identical to <a href="../../../../org/apache/juneau/rest/BasicRestServlet.html" title="class in org.apache.juneau.rest"><code>BasicRestServlet</code></a> but doesn't extend from <code>HttpServlet</code>
+
+ <h5 class='section'>See Also:</div>
</td>
</tr>
<tr class="rowColor">
@@ -177,7 +179,9 @@
<tr class="altColor">
<td class="colFirst"><a href="../../../../org/apache/juneau/rest/BasicRestGroup.html" title="class in org.apache.juneau.rest">BasicRestGroup</a></td>
<td class="colLast">
-<div class="block">Specialized subclass of <a href="../../../../org/apache/juneau/rest/BasicRestServlet.html" title="class in org.apache.juneau.rest"><code>BasicRestServlet</code></a> for showing "group" pages.</div>
+<div class="block">Identical to <a href="../../../../org/apache/juneau/rest/BasicRestServletGroup.html" title="class in org.apache.juneau.rest"><code>BasicRestServletGroup</code></a> but doesn't extend from <code>HttpServlet</code>
+
+ <h5 class='section'>See Also:</div>
</td>
</tr>
<tr class="rowColor">
@@ -189,13 +193,13 @@
<tr class="altColor">
<td class="colFirst"><a href="../../../../org/apache/juneau/rest/BasicRestJena.html" title="class in org.apache.juneau.rest">BasicRestJena</a></td>
<td class="colLast">
-<div class="block">Resource servlet with additional RDF support.</div>
+<div class="block">Identical to <a href="../../../../org/apache/juneau/rest/BasicRestServletJena.html" title="class in org.apache.juneau.rest"><code>BasicRestServletJena</code></a> but doesn't extend from <code>HttpServlet</code></div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../../org/apache/juneau/rest/BasicRestJenaGroup.html" title="class in org.apache.juneau.rest">BasicRestJenaGroup</a></td>
<td class="colLast">
-<div class="block">Resource group with additional RDF support.</div>
+<div class="block">Identical to <a href="../../../../org/apache/juneau/rest/BasicRestServletJenaGroup.html" title="class in org.apache.juneau.rest"><code>BasicRestServletJenaGroup</code></a> but doesn't extend from <code>HttpServlet</code></div>
</td>
</tr>
<tr class="altColor">
diff --git a/content/site/apidocs-8.0.1/overview-summary.html b/content/site/apidocs-8.0.1/overview-summary.html
index 55e9682..9ea0b91 100644
--- a/content/site/apidocs-8.0.1/overview-summary.html
+++ b/content/site/apidocs-8.0.1/overview-summary.html
@@ -73,7 +73,7 @@
</div>
<div class="header">
<div class="subTitle">
-<div class="block"><h1 class='title'>Apache Juneau 8.0.0 Documentation</div>
+<div class="block"><h1 class='title'>Apache Juneau 8.0.1 Documentation</div>
</div>
<p>See: <a href="#overview.description">Description</a></p>
</div>
@@ -655,11 +655,11 @@
<div class="contentContainer"><a name="overview.description">
<!-- -->
</a>
-<div class="block"><h1 class='title'>Apache Juneau 8.0.0 Documentation</h1>
-<h1 class='preview-title'>Apache Juneau 8.0.0 Documentation Preview</h1>
+<div class="block"><h1 class='title'>Apache Juneau 8.0.1 Documentation</h1>
+<h1 class='preview-title'>Apache Juneau 8.0.1 Documentation Preview</h1>
<h2 class='preview-section todo'>Documentation in progress</h2>
-<h2 class='preview-section new'>New documentation in 8.0.0</h2>
-<h2 class='preview-section updated'>Updated documentation in 8.0.0</h2>
+<h2 class='preview-section new'>New documentation in 8.0.1</h2>
+<h2 class='preview-section updated'>Updated documentation in 8.0.1</h2>
<script type='text/javascript'>
function toggle(x) {
@@ -1424,18 +1424,18 @@
</table>
<p>
- The current version of Juneau is <code>8.0.0</code>.
+ The current version of Juneau is <code>8.0.1</code>.
The easiest way to pull in the library is through the following maven dependency:
</p>
<p class='bpcode w800'>
<xt><dependency></xt>
<xt><groupId></xt>org.apache.juneau<xt></groupId></xt>
<xt><artifactId></xt>juneau-all<xt></artifactId></xt>
- <xt><version></xt>8.0.0<xt></version></xt>
+ <xt><version></xt>8.0.1<xt></version></xt>
<xt></dependency></xt>
</p>
<p>
- If you would like to work with the bleeding-edge code, you can access the <code>8.0.1</code>
+ If you would like to work with the bleeding-edge code, you can access the <code>8.0.2</code>
version through the following repository:
</p>
<p class='bpcode w800'>
@@ -1465,18 +1465,18 @@
<xt><dependency></xt>
<xt><groupId></xt>org.apache.juneau<xt></groupId></xt>
<xt><artifactId></xt>juneau-marshall<xt></artifactId></xt>
- <xt><version></xt>8.0.0<xt></version></xt>
+ <xt><version></xt>8.0.1<xt></version></xt>
<xt></dependency></xt>
</p>
<h5 class='figure'>Java Library</h5>
<p class='bpcode w500'>
- juneau-marshall-8.0.0.jar
+ juneau-marshall-8.0.1.jar
</p>
<h5 class='figure'>OSGi Module</h5>
<p class='bpcode w500'>
- org.apache.juneau.marshall_8.0.0.jar
+ org.apache.juneau.marshall_8.0.1.jar
</p>
<p>
@@ -10389,16 +10389,16 @@
<xt><dependency></xt>
<xt><groupId></xt>org.apache.juneau<xt></groupId></xt>
<xt><artifactId></xt>juneau-marshall-rdf<xt></artifactId></xt>
- <xt><version></xt>8.0.0<xt></version></xt>
+ <xt><version></xt>8.0.1<xt></version></xt>
<xt></dependency></xt>
</p>
<h5 class='figure'>Java Library</h5>
<p class='bpcode w500'>
- juneau-marshall-rdf-8.0.0.jar
+ juneau-marshall-rdf-8.0.1.jar
</p>
<h5 class='figure'>OSGi Module</h5>
<p class='bpcode w500'>
- org.apache.juneau.marshall.rdf_8.0.0.jar
+ org.apache.juneau.marshall.rdf_8.0.1.jar
</p>
<p>
The <code>juneau-marshall-rdf</code> library provides additional serializers and parsers for RDF.
@@ -11004,16 +11004,16 @@
<xt><dependency></xt>
<xt><groupId></xt>org.apache.juneau<xt></groupId></xt>
<xt><artifactId></xt>juneau-dto<xt></artifactId></xt>
- <xt><version></xt>8.0.0<xt></version></xt>
+ <xt><version></xt>8.0.1<xt></version></xt>
<xt></dependency></xt>
</p>
<h5 class='figure'>Java Library</h5>
<p class='bpcode w500'>
- juneau-dto-8.0.0.jar
+ juneau-dto-8.0.1.jar
</p>
<h5 class='figure'>OSGi Module</h5>
<p class='bpcode w500'>
- org.apache.juneau.dto_8.0.0.jar
+ org.apache.juneau.dto_8.0.1.jar
</p>
<p>
The <code>juneau-dto</code> library contains several predefined POJOs for generating commonly-used document types.
@@ -11529,18 +11529,18 @@
<xt><dependency></xt>
<xt><groupId></xt>org.apache.juneau<xt></groupId></xt>
<xt><artifactId></xt>juneau-svl<xt></artifactId></xt>
- <xt><version></xt>8.0.0<xt></version></xt>
+ <xt><version></xt>8.0.1<xt></version></xt>
<xt></dependency></xt>
</p>
<h5 class='figure'>Java Library</h5>
<p class='bpcode w500'>
- juneau-svl-8.0.0.jar
+ juneau-svl-8.0.1.jar
</p>
<h5 class='figure'>OSGi Module</h5>
<p class='bpcode w500'>
- org.apache.juneau.svl_8.0.0.jar
+ org.apache.juneau.svl_8.0.1.jar
</p>
<!-- ==================================================================================================== -->
@@ -11882,18 +11882,18 @@
<xt><dependency></xt>
<xt><groupId></xt>org.apache.juneau<xt></groupId></xt>
<xt><artifactId></xt>juneau-config<xt></artifactId></xt>
- <xt><version></xt>8.0.0<xt></version></xt>
+ <xt><version></xt>8.0.1<xt></version></xt>
<xt></dependency></xt>
</p>
<h5 class='figure'>Java Library</h5>
<p class='bpcode w500'>
- juneau-config-8.0.0.jar
+ juneau-config-8.0.1.jar
</p>
<h5 class='figure'>OSGi Module</h5>
<p class='bpcode w500'>
- org.apache.juneau.config_8.0.0.jar
+ org.apache.juneau.config_8.0.1.jar
</p>
<!-- ==================================================================================================== -->
@@ -11921,7 +11921,7 @@
<ck>key4</ck> = <cv>http://bar</cv>
</p>
<p>
- Config files are access through the <a href="org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config"><code>Config</code></a> class which
+ Config files are accessed through the <a href="org/apache/juneau/config/Config.html" title="class in org.apache.juneau.config"><code>Config</code></a> class which
are created through the <a href="org/apache/juneau/config/ConfigBuilder.html" title="class in org.apache.juneau.config"><code>ConfigBuilder</code></a> class.
Builder creator methods are provided on the <code>Config</code> class:
</p>
@@ -12267,7 +12267,7 @@
<ck>key1</ck> = <cv>['foo','bar','baz']</cv>
</p>
<p class='bpcode w800'>
- String[] key1 = c.getObject(<js>"key1"</js>, String.<jk>class</jk>);
+ String[] key1 = c.getObject(<js>"key1"</js>, String[].<jk>class</jk>);
</p>
<p>
Primitive arrays can also be retrieved using the <code>getObject()</code> methods:
@@ -13240,7 +13240,7 @@
<jk>public synchronized</jk> String write(String name, String expectedContents, String newContents) {
<jc>// This is a no-op.</jc>
- <jk>if</jk> (isEquals(expectedContents, newContents))
+ <jk>if</jk> (<jsm>isEquals</jsm>(expectedContents, newContents))
<jk>return null</jk>;
String currentContents = read(name);
@@ -13333,7 +13333,7 @@
<jk>this</jk>.<jf>nameColumn</jf> = getStringProperty(<jsf>CONFIGSQLSTORE_nameColumn</jsf>);
<jk>this</jk>.<jf>valueColumn</jf> = getStringProperty(<jsf>CONFIGSQLSTORE_valueColumn</jsf>);
- <jk>int</jk> pollInterval = getStringProperty(<jsf>CONFIGSQLSTORE_pollInterval</jsf>, 600);
+ <jk>int</jk> pollInterval = getStringProperty(<jsf>CONFIGSQLSTORE_pollInterval</jsf>, 600); <jc>// Time in seconds.</jc>
TimerTask timerTask = <jk>new</jk> TimerTask() {
<ja>@Override</ja>
@@ -13343,7 +13343,7 @@
};
<jk>this</jk>.<jf>watcher</jf> = <jk>new</jk> Timer(<js>"MyTimer"</js>);
- <jf>watcher</jf>.scheduleAtFixedRate(timerTask, 0, pollInterval * 10000);
+ <jf>watcher</jf>.scheduleAtFixedRate(timerTask, 0, pollInterval * 1000);
}
<jk>private synchronized void</jk> poll() {
@@ -13380,7 +13380,7 @@
<jk>public synchronized</jk> String write(String name, String expectedContents, String newContents) {
<jc>// This is a no-op.</jc>
- <jk>if</jk> (isEquals(expectedContents, newContents))
+ <jk>if</jk> (<jsm>isEquals</jsm>(expectedContents, newContents))
<jk>return null</jk>;
String currentContents = read(name);
@@ -13559,11 +13559,14 @@
<li>Any file that end with <code>.cfg</code>. First one matched alphabetically is used.
</ol>
<li>
- In the context classpath (i.e. inside the jar itself):
+ In the context classpath root package (i.e. inside the jar itself):
<ol>
<li><code><jar-name>.cfg</code>
<li><code>juneau.cfg</code>
<li><code>default.cfg</code>
+ <li><code>application.cfg</code>
+ <li><code>app.cfg</code>
+ <li><code>settings.cfg</code>
</ol>
</ol>
<p>
@@ -13590,18 +13593,18 @@
<xt><dependency></xt>
<xt><groupId></xt>org.apache.juneau<xt></groupId></xt>
<xt><artifactId></xt>juneau-rest-server<xt></artifactId></xt>
- <xt><version></xt>8.0.0<xt></version></xt>
+ <xt><version></xt>8.0.1<xt></version></xt>
<xt></dependency></xt>
</p>
<h5 class='figure'>Java Library</h5>
<p class='bpcode w500'>
- juneau-rest-server-8.0.0.jar
+ juneau-rest-server-8.0.1.jar
</p>
<h5 class='figure'>OSGi Module</h5>
<p class='bpcode w500'>
- org.apache.juneau.rest.server_8.0.0.jar
+ org.apache.juneau.rest.server_8.0.1.jar
</p>
<p>
@@ -14133,14 +14136,14 @@
<h4 class='topic new' onclick='toggle(this)'><a href='#juneau-rest-server.Instantiation.BasicRest' id='juneau-rest-server.Instantiation.BasicRest'>7.3.3 - BasicRest</a></h4>
<div class='topic'><!-- START: 7.3.3 - juneau-rest-server.Instantiation.BasicRest -->
<p>
- The <a href="org/apache/juneau/rest/BasicRest.html" title="class in org.apache.juneau.rest"><code>BasicRest</code></a> class is identical to the <code>org.apache.juneau.BasicRestServlet</code> class except that
+ The <a href="org/apache/juneau/rest/BasicRest.html" title="class in org.apache.juneau.rest"><code>BasicRest</code></a> class is identical to the <a href="org/apache/juneau/rest/BasicRestServlet.html" title="class in org.apache.juneau.rest"><code>BasicRestServlet</code></a> class except that
it does not extend from <code>HttpServlet</code>.
It defines the exact same set of serializers, parsers, etc., but it cannot be deployed as a top-level
servlet. It can however be used for child resources registered via the <a href="org/apache/juneau/rest/annotation/RestResource.html#children--"><code>@RestResource(children)</code></a>
annotation.
</p>
<p>
- The code for this class is virtually identical to <code>org.apache.juneau.BasicRestServlet</code> but lacks a parent class:
+ The code for this class is virtually identical to <a href="org/apache/juneau/rest/BasicRestServlet.html" title="class in org.apache.juneau.rest"><code>BasicRestServlet</code></a> but lacks a parent class:
</p>
<p class='bpcode w800'>
<ja>@RestResource</ja>(
@@ -14274,12 +14277,9 @@
children={
HelloWorldResource.<jk>class</jk>,
PetStoreResource.<jk>class</jk>,
- PhotosResource.<jk>class</jk>,
DtoExamples.<jk>class</jk>,
- SqlQueryResource.<jk>class</jk>,
ConfigResource.<jk>class</jk>,
LogsResource.<jk>class</jk>,
- DebugResource.<jk>class</jk>,
ShutdownResource.<jk>class</jk>
}
)
@@ -14319,7 +14319,7 @@
<h4 class='topic new' onclick='toggle(this)'><a href='#juneau-rest-server.Instantiation.BasicRestGroup' id='juneau-rest-server.Instantiation.BasicRestGroup'>7.3.6 - BasicRestGroup</a></h4>
<div class='topic'><!-- START: 7.3.6 - juneau-rest-server.Instantiation.BasicRestGroup -->
<p>
- The <a href="org/apache/juneau/rest/BasicRestGroup.html" title="class in org.apache.juneau.rest"><code>BasicRestGroup</code></a> class is identical to the <code>org.apache.juneau.BasicRestServletGroup</code> class except that
+ The <a href="org/apache/juneau/rest/BasicRestGroup.html" title="class in org.apache.juneau.rest"><code>BasicRestGroup</code></a> class is identical to the <a href="org/apache/juneau/rest/BasicRestServletGroup.html" title="class in org.apache.juneau.rest"><code>BasicRestServletGroup</code></a> class except that
it does not extend from <code>HttpServlet</code>.
It defines the exact same set of serializers, parsers, etc., but it cannot be deployed as a top-level
servlet. It can however be used for child resources registered via the <a href="org/apache/juneau/rest/annotation/RestResource.html#children--"><code>@RestResource(children)</code></a>
@@ -22242,18 +22242,18 @@
<xt><dependency></xt>
<xt><groupId></xt>org.apache.juneau<xt></groupId></xt>
<xt><artifactId></xt>juneau-rest-server-jaxrs<xt></artifactId></xt>
- <xt><version></xt>8.0.0<xt></version></xt>
+ <xt><version></xt>8.0.1<xt></version></xt>
<xt></dependency></xt>
</p>
<h5 class='figure'>Java Library</h5>
<p class='bpcode w500'>
- juneau-rest-server-jaxrs-8.0.0.jar
+ juneau-rest-server-jaxrs-8.0.1.jar
</p>
<h5 class='figure'>OSGi Module</h5>
<p class='bpcode w500'>
- org.apache.juneau.rest.server_8.0.0.jar
+ org.apache.juneau.rest.server_8.0.1.jar
</p>
<p>
@@ -22339,18 +22339,18 @@
<xt><dependency></xt>
<xt><groupId></xt>org.apache.juneau<xt></groupId></xt>
<xt><artifactId></xt>juneau-rest-server-springboot<xt></artifactId></xt>
- <xt><version></xt>8.0.0<xt></version></xt>
+ <xt><version></xt>8.0.1<xt></version></xt>
<xt></dependency></xt>
</p>
<h5 class='figure'>Java Library</h5>
<p class='bpcode w500'>
- juneau-rest-server-springboot-8.0.0.jar
+ juneau-rest-server-springboot-8.0.1.jar
</p>
<h5 class='figure'>OSGi Module</h5>
<p class='bpcode w500'>
- org.apache.juneau.rest.server.springboot_8.0.0.jar
+ org.apache.juneau.rest.server.springboot_8.0.1.jar
</p>
<p>
@@ -22505,18 +22505,18 @@
<xt><dependency></xt>
<xt><groupId></xt>org.apache.juneau<xt></groupId></xt>
<xt><artifactId></xt>juneau-rest-client<xt></artifactId></xt>
- <xt><version></xt>8.0.0<xt></version></xt>
+ <xt><version></xt>8.0.1<xt></version></xt>
<xt></dependency></xt>
</p>
<h5 class='figure'>Java Library</h5>
<p class='bpcode w500'>
- juneau-rest-client-8.0.0.jar
+ juneau-rest-client-8.0.1.jar
</p>
<h5 class='figure'>OSGi Module</h5>
<p class='bpcode w500'>
- org.apache.juneau.rest.client_8.0.0.jar
+ org.apache.juneau.rest.client_8.0.1.jar
</p>
<p>
@@ -23715,7 +23715,7 @@
title=<js>"Petstore application"</js>,
...
)
- <jk>public class</jk> PetStoreResource <jk>extends</jk> BasicRestServletJena <jk>implements</jk> PetStore {
+ <jk>public class</jk> PetStoreResource <jk>extends</jk> BasicRestJena <jk>implements</jk> PetStore {
...
@@ -24505,18 +24505,18 @@
<xt><dependency></xt>
<xt><groupId></xt>org.apache.juneau<xt></groupId></xt>
<xt><artifactId></xt>juneau-microservice-core<xt></artifactId></xt>
- <xt><version></xt>8.0.0<xt></version></xt>
+ <xt><version></xt>8.0.1<xt></version></xt>
<xt></dependency></xt>
</p>
<h5 class='figure'>Java Library</h5>
<p class='bpcode w500'>
- juneau-microservice-core-8.0.0.jar
+ juneau-microservice-core-8.0.1.jar
</p>
<h5 class='figure'>OSGi Module</h5>
<p class='bpcode w500'>
- org.apache.juneau.microservice.core_8.0.0.jar
+ org.apache.juneau.microservice.core_8.0.1.jar
</p>
<p>
@@ -24854,7 +24854,14 @@
<li>
Resolve any <js>"*.cfg"</js> file that can be found in the working directory.
<li>
- Resolve any of the following files in the classpath: <js>"juneau.cfg"</js>, <js>"system.cfg"</js>
+ Resolve any of the following files in the classpath:
+ <ol>
+ <li><code>juneau.cfg</code>
+ <li><code>default.cfg</code>
+ <li><code>application.cfg</code>
+ <li><code>app.cfg</code>
+ <li><code>settings.cfg</code>
+ </ol>
</ol>
<p>
If no configuration file is found, and empty in-memory configuration is used.
@@ -25325,18 +25332,18 @@
<xt><dependency></xt>
<xt><groupId></xt>org.apache.juneau<xt></groupId></xt>
<xt><artifactId></xt>juneau-microservice-jetty<xt></artifactId></xt>
- <xt><version></xt>8.0.0<xt></version></xt>
+ <xt><version></xt>8.0.1<xt></version></xt>
<xt></dependency></xt>
</p>
<h5 class='figure'>Java Library</h5>
<p class='bpcode w500'>
- juneau-microservice-jetty-8.0.0.jar
+ juneau-microservice-jetty-8.0.1.jar
</p>
<h5 class='figure'>OSGi Module</h5>
<p class='bpcode w500'>
- org.apache.juneau.microservice.jetty_8.0.0.jar
+ org.apache.juneau.microservice.jetty_8.0.1.jar
</p>
<p>
@@ -26150,7 +26157,7 @@
<div class='topic'><!-- START: 13 - my-jetty-microservice -->
<h5 class='figure'>Starter Project Zip</h5>
<p class='bpcode w500'>
- my-jetty-microservice-8.0.0.zip
+ my-jetty-microservice-8.0.1.zip
</p>
<p>
@@ -26170,7 +26177,7 @@
</p>
<ol class='spaced-list'>
<li>
- Download the <code>my-jetty-microservice-8.0.0.zip</code> file from the downloads page
+ Download the <code>my-jetty-microservice-8.0.1.zip</code> file from the downloads page
(located in the binaries) and import it into your workspace as an existing project:
<br><br>
<img class='bordered' src='doc-files/my-jetty-microservice.Installing.1.png' style='width:524px'>
@@ -26508,7 +26515,7 @@
<div class='topic'><!-- START: 14 - my-springboot-microservice -->
<h5 class='figure'>Starter Project Zip</h5>
<p class='bpcode w500'>
- my-springboot-microservice-8.0.0.zip
+ my-springboot-microservice-8.0.1.zip
</p>
<p>
@@ -26532,7 +26539,7 @@
</p>
<ol class='spaced-list'>
<li>
- Download the <code>my-springboot-microservice-8.0.0.zip</code> file from the downloads page
+ Download the <code>my-springboot-microservice-8.0.1.zip</code> file from the downloads page
(located in the binaries) and import it into your workspace as an existing project:
<br><br>
<img class='bordered' src='doc-files/my-springboot-microservice.Installing.1.png' style='width:524px'>
@@ -26742,7 +26749,7 @@
<div class='topic'><!-- START: 15 - juneau-examples-core -->
<h5 class='figure'>Archive File</h5>
<p class='bpcode w500'>
- juneau-examples-core-8.0.0.zip
+ juneau-examples-core-8.0.1.zip
</p>
<p>
@@ -26758,7 +26765,7 @@
</p>
<ol class='spaced-list'>
<li>
- Download the <code>juneau-examples-core-8.0.0.zip</code> file from the downloads page
+ Download the <code>juneau-examples-core-8.0.1.zip</code> file from the downloads page
(located in the binaries) and import it into your workspace as an existing project:
<br><br>
<img class='bordered' src='doc-files/juneau-examples-core.Installing.1.png' style='width:524px'>
@@ -26829,18 +26836,18 @@
<xt><dependency></xt>
<xt><groupId></xt>org.apache.juneau<xt></groupId></xt>
<xt><artifactId></xt>juneau-examples-rest<xt></artifactId></xt>
- <xt><version></xt>8.0.0<xt></version></xt>
+ <xt><version></xt>8.0.1<xt></version></xt>
<xt></dependency></xt>
</p>
<h5 class='figure'>Java Library</h5>
<p class='bpcode w500'>
- juneau-examples-rest-8.0.0.jar
+ juneau-examples-rest-8.0.1.jar
</p>
<h5 class='figure'>OSGi Module</h5>
<p class='bpcode w500'>
- org.apache.juneau.examples.rest_8.0.0.jar
+ org.apache.juneau.examples.rest_8.0.1.jar
</p>
<p>
@@ -27141,7 +27148,7 @@
PhotosResource.<jk>class</jk>
}
)
- <jk>public class</jk> PetStoreResource <jk>extends</jk> BasicRestServletJena {
+ <jk>public class</jk> PetStoreResource <jk>extends</jk> BasicRestJena {
</p>
<p>
The inner contents of the page are generated from this method which is used to define a jumping-off
@@ -27307,7 +27314,7 @@
</p>
<h5 class='figure'>PetStoreResource.java</h5>
<p class='bpcode w800'>
- <jk>public class</jk> PetStoreResource <jk>extends</jk> BasicRestServletJena <jk>implements</jk> PetStore {
+ <jk>public class</jk> PetStoreResource <jk>extends</jk> BasicRestJena <jk>implements</jk> PetStore {
<jk>private</jk> PetStoreService <jf>store</jf>;
@@ -27507,7 +27514,7 @@
</p>
<h5 class='figure'>PetStoreResource.java</h5>
<p class='bpcode w800'>
- <jk>public class</jk> PetStoreResource <jk>extends</jk> BasicRestServletJena <jk>implements</jk> PetStore {
+ <jk>public class</jk> PetStoreResource <jk>extends</jk> BasicRestJena <jk>implements</jk> PetStore {
<ja>@Override</ja> <jc>/* PetStore */</jc>
<ja>@RestMethod</ja>(
@@ -28841,7 +28848,7 @@
<div class='topic'><!-- START: 17 - juneau-examples-rest-jetty -->
<h5 class='figure'>Starter Project Zip</h5>
<p class='bpcode w500'>
- juneau-examples-rest-jetty-8.0.0.zip
+ juneau-examples-rest-jetty-8.0.1.zip
</p>
<p>
@@ -28858,7 +28865,7 @@
</p>
<ol class='spaced-list'>
<li>
- Download the <code>juneau-examples-rest-jetty-8.0.0.zip</code> file from the downloads page
+ Download the <code>juneau-examples-rest-jetty-8.0.1.zip</code> file from the downloads page
(located in the binaries) and import it into your workspace as an existing project:
<br><br>
<img class='bordered' src='doc-files/juneau-examples-rest-jetty.Installing.1.png' style='width:524px'>
@@ -29218,7 +29225,7 @@
<div class='topic'><!-- START: 18 - juneau-examples-rest-springboot -->
<h5 class='figure'>Starter Project Zip</h5>
<p class='bpcode w500'>
- juneau-examples-rest-springboot-8.0.0.zip
+ juneau-examples-rest-springboot-8.0.1.zip
</p>
<p>
@@ -29245,7 +29252,7 @@
</p>
<ol class='spaced-list'>
<li>
- Download the <code>juneau-examples-rest-springboot-8.0.0.zip</code> file from the downloads page
+ Download the <code>juneau-examples-rest-springboot-8.0.1.zip</code> file from the downloads page
(located in the binaries) and import it into your workspace as an existing project:
<br><br>
<img class='bordered' src='doc-files/juneau-examples-rest-springboot.Installing.1.png' style='width:524px'>
diff --git a/content/site/apidocs-8.0.1/src-html/org/apache/juneau/BeanMeta.html b/content/site/apidocs-8.0.1/src-html/org/apache/juneau/BeanMeta.html
index 8a371b9..01660e5 100644
--- a/content/site/apidocs-8.0.1/src-html/org/apache/juneau/BeanMeta.html
+++ b/content/site/apidocs-8.0.1/src-html/org/apache/juneau/BeanMeta.html
@@ -26,898 +26,900 @@
<span class="sourceLineNo">018</span>import static org.apache.juneau.internal.StringUtils.*;<a name="line.18"></a>
<span class="sourceLineNo">019</span>import static org.apache.juneau.BeanMeta.MethodType.*;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.beans.*;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.io.*;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.lang.reflect.*;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.*;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.juneau.annotation.*;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.juneau.transform.*;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.juneau.utils.*;<a name="line.28"></a>
-<span class="sourceLineNo">029</span><a name="line.29"></a>
-<span class="sourceLineNo">030</span>/**<a name="line.30"></a>
-<span class="sourceLineNo">031</span> * Encapsulates all access to the properties of a bean class (like a souped-up {@link java.beans.BeanInfo}).<a name="line.31"></a>
-<span class="sourceLineNo">032</span> *<a name="line.32"></a>
-<span class="sourceLineNo">033</span> * <h5 class='topic'>Description</h5><a name="line.33"></a>
+<span class="sourceLineNo">021</span>import java.beans.BeanInfo;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.beans.Introspector;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.beans.PropertyDescriptor;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.io.*;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.lang.reflect.*;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.*;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.juneau.annotation.*;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.juneau.transform.*;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.juneau.utils.*;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>/**<a name="line.32"></a>
+<span class="sourceLineNo">033</span> * Encapsulates all access to the properties of a bean class (like a souped-up {@link java.beans.BeanInfo}).<a name="line.33"></a>
<span class="sourceLineNo">034</span> *<a name="line.34"></a>
-<span class="sourceLineNo">035</span> * Uses introspection to find all the properties associated with this class. If the {@link Bean @Bean} annotation<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * is present on the class, or the class has a {@link BeanFilter} registered with it in the bean context,<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * then that information is used to determine the properties on the class.<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * Otherwise, the {@code BeanInfo} functionality in Java is used to determine the properties on the class.<a name="line.38"></a>
-<span class="sourceLineNo">039</span> *<a name="line.39"></a>
-<span class="sourceLineNo">040</span> * <h5 class='topic'>Bean property ordering</h5><a name="line.40"></a>
+<span class="sourceLineNo">035</span> * <h5 class='topic'>Description</h5><a name="line.35"></a>
+<span class="sourceLineNo">036</span> *<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * Uses introspection to find all the properties associated with this class. If the {@link Bean @Bean} annotation<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * is present on the class, or the class has a {@link BeanFilter} registered with it in the bean context,<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * then that information is used to determine the properties on the class.<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * Otherwise, the {@code BeanInfo} functionality in Java is used to determine the properties on the class.<a name="line.40"></a>
<span class="sourceLineNo">041</span> *<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * The order of the properties are as follows:<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * <ul class='spaced-list'><a name="line.43"></a>
-<span class="sourceLineNo">044</span> * <li><a name="line.44"></a>
-<span class="sourceLineNo">045</span> * If {@link Bean @Bean} annotation is specified on class, then the order is the same as the list of properties<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * in the annotation.<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * <li><a name="line.47"></a>
-<span class="sourceLineNo">048</span> * If {@link Bean @Bean} annotation is not specified on the class, then the order is based on the following.<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * <ul><a name="line.49"></a>
-<span class="sourceLineNo">050</span> * <li>Public fields (same order as {@code Class.getFields()}).<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * <li>Properties returned by {@code BeanInfo.getPropertyDescriptors()}.<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * <li>Non-standard getters/setters with {@link BeanProperty @BeanProperty} annotation defined on them.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * </ul><a name="line.53"></a>
-<span class="sourceLineNo">054</span> * </ul><a name="line.54"></a>
-<span class="sourceLineNo">055</span> *<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * <p><a name="line.56"></a>
-<span class="sourceLineNo">057</span> * The order can also be overridden through the use of an {@link BeanFilter}.<a name="line.57"></a>
-<span class="sourceLineNo">058</span> *<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * @param <T> The class type that this metadata applies to.<a name="line.59"></a>
-<span class="sourceLineNo">060</span> */<a name="line.60"></a>
-<span class="sourceLineNo">061</span>public class BeanMeta<T> {<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span> /** The target class type that this meta object describes. */<a name="line.63"></a>
-<span class="sourceLineNo">064</span> protected final ClassMeta<T> classMeta;<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span> /** The target class that this meta object describes. */<a name="line.66"></a>
-<span class="sourceLineNo">067</span> protected final Class<T> c;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span> /** The properties on the target class. */<a name="line.69"></a>
-<span class="sourceLineNo">070</span> protected final Map<String,BeanPropertyMeta> properties;<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span> /** The getter properties on the target class. */<a name="line.72"></a>
-<span class="sourceLineNo">073</span> protected final Map<Method,String> getterProps;<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span> /** The setter properties on the target class. */<a name="line.75"></a>
-<span class="sourceLineNo">076</span> protected final Map<Method,String> setterProps;<a name="line.76"></a>
-<span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span> /** The bean context that created this metadata object. */<a name="line.78"></a>
-<span class="sourceLineNo">079</span> protected final BeanContext ctx;<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span> /** Optional bean filter associated with the target class. */<a name="line.81"></a>
-<span class="sourceLineNo">082</span> protected final BeanFilter beanFilter;<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span> /** Type variables implemented by this bean. */<a name="line.84"></a>
-<span class="sourceLineNo">085</span> protected final Map<Class<?>,Class<?>[]> typeVarImpls;<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span> /** The constructor for this bean. */<a name="line.87"></a>
-<span class="sourceLineNo">088</span> protected final Constructor<T> constructor;<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span> /** For beans with constructors with BeanConstructor annotation, this is the list of constructor arg properties. */<a name="line.90"></a>
-<span class="sourceLineNo">091</span> protected final String[] constructorArgs;<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span> private final MetadataMap extMeta; // Extended metadata<a name="line.93"></a>
+<span class="sourceLineNo">042</span> * <h5 class='topic'>Bean property ordering</h5><a name="line.42"></a>
+<span class="sourceLineNo">043</span> *<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * The order of the properties are as follows:<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * <ul class='spaced-list'><a name="line.45"></a>
+<span class="sourceLineNo">046</span> * <li><a name="line.46"></a>
+<span class="sourceLineNo">047</span> * If {@link Bean @Bean} annotation is specified on class, then the order is the same as the list of properties<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * in the annotation.<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * <li><a name="line.49"></a>
+<span class="sourceLineNo">050</span> * If {@link Bean @Bean} annotation is not specified on the class, then the order is based on the following.<a name="line.50"></a>
+<span class="sourceLineNo">051</span> * <ul><a name="line.51"></a>
+<span class="sourceLineNo">052</span> * <li>Public fields (same order as {@code Class.getFields()}).<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * <li>Properties returned by {@code BeanInfo.getPropertyDescriptors()}.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * <li>Non-standard getters/setters with {@link BeanProperty @BeanProperty} annotation defined on them.<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * </ul><a name="line.55"></a>
+<span class="sourceLineNo">056</span> * </ul><a name="line.56"></a>
+<span class="sourceLineNo">057</span> *<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * <p><a name="line.58"></a>
+<span class="sourceLineNo">059</span> * The order can also be overridden through the use of an {@link BeanFilter}.<a name="line.59"></a>
+<span class="sourceLineNo">060</span> *<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * @param <T> The class type that this metadata applies to.<a name="line.61"></a>
+<span class="sourceLineNo">062</span> */<a name="line.62"></a>
+<span class="sourceLineNo">063</span>public class BeanMeta<T> {<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span> /** The target class type that this meta object describes. */<a name="line.65"></a>
+<span class="sourceLineNo">066</span> protected final ClassMeta<T> classMeta;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span> /** The target class that this meta object describes. */<a name="line.68"></a>
+<span class="sourceLineNo">069</span> protected final Class<T> c;<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span> /** The properties on the target class. */<a name="line.71"></a>
+<span class="sourceLineNo">072</span> protected final Map<String,BeanPropertyMeta> properties;<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span> /** The getter properties on the target class. */<a name="line.74"></a>
+<span class="sourceLineNo">075</span> protected final Map<Method,String> getterProps;<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span> /** The setter properties on the target class. */<a name="line.77"></a>
+<span class="sourceLineNo">078</span> protected final Map<Method,String> setterProps;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span> /** The bean context that created this metadata object. */<a name="line.80"></a>
+<span class="sourceLineNo">081</span> protected final BeanContext ctx;<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span> /** Optional bean filter associated with the target class. */<a name="line.83"></a>
+<span class="sourceLineNo">084</span> protected final BeanFilter beanFilter;<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span> /** Type variables implemented by this bean. */<a name="line.86"></a>
+<span class="sourceLineNo">087</span> protected final Map<Class<?>,Class<?>[]> typeVarImpls;<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span> /** The constructor for this bean. */<a name="line.89"></a>
+<span class="sourceLineNo">090</span> protected final Constructor<T> constructor;<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span> /** For beans with constructors with BeanConstructor annotation, this is the list of constructor arg properties. */<a name="line.92"></a>
+<span class="sourceLineNo">093</span> protected final String[] constructorArgs;<a name="line.93"></a>
<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span> // Other fields<a name="line.95"></a>
-<span class="sourceLineNo">096</span> final String typePropertyName; // "_type" property actual name.<a name="line.96"></a>
-<span class="sourceLineNo">097</span> private final BeanPropertyMeta typeProperty; // "_type" mock bean property.<a name="line.97"></a>
-<span class="sourceLineNo">098</span> final BeanPropertyMeta dynaProperty; // "extras" property.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> private final String dictionaryName; // The @Bean(typeName) annotation defined on this bean class.<a name="line.99"></a>
-<span class="sourceLineNo">100</span> final String notABeanReason; // Readable string explaining why this class wasn't a bean.<a name="line.100"></a>
-<span class="sourceLineNo">101</span> final BeanRegistry beanRegistry;<a name="line.101"></a>
-<span class="sourceLineNo">102</span> final boolean sortProperties;<a name="line.102"></a>
-<span class="sourceLineNo">103</span> final boolean fluentSetters;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span> /**<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * Constructor.<a name="line.106"></a>
-<span class="sourceLineNo">107</span> *<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * @param classMeta The target class.<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * @param ctx The bean context that created this object.<a name="line.109"></a>
-<span class="sourceLineNo">110</span> * @param beanFilter Optional bean filter associated with the target class. Can be <jk>null</jk>.<a name="line.110"></a>
-<span class="sourceLineNo">111</span> * @param pNames Explicit list of property names and order of properties. If <jk>null</jk>, determine automatically.<a name="line.111"></a>
-<span class="sourceLineNo">112</span> */<a name="line.112"></a>
-<span class="sourceLineNo">113</span> protected BeanMeta(final ClassMeta<T> classMeta, BeanContext ctx, BeanFilter beanFilter, String[] pNames) {<a name="line.113"></a>
-<span class="sourceLineNo">114</span> this.classMeta = classMeta;<a name="line.114"></a>
-<span class="sourceLineNo">115</span> this.ctx = ctx;<a name="line.115"></a>
-<span class="sourceLineNo">116</span> this.c = classMeta.getInnerClass();<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span> Builder<T> b = new Builder<>(classMeta, ctx, beanFilter, pNames);<a name="line.118"></a>
-<span class="sourceLineNo">119</span> this.notABeanReason = b.init(this);<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span> this.beanFilter = beanFilter;<a name="line.121"></a>
-<span class="sourceLineNo">122</span> this.dictionaryName = b.dictionaryName;<a name="line.122"></a>
-<span class="sourceLineNo">123</span> this.properties = unmodifiableMap(b.properties);<a name="line.123"></a>
-<span class="sourceLineNo">124</span> this.getterProps = unmodifiableMap(b.getterProps);<a name="line.124"></a>
-<span class="sourceLineNo">125</span> this.setterProps = unmodifiableMap(b.setterProps);<a name="line.125"></a>
-<span class="sourceLineNo">126</span> this.dynaProperty = b.dynaProperty;<a name="line.126"></a>
-<span class="sourceLineNo">127</span> this.typeVarImpls = unmodifiableMap(b.typeVarImpls);<a name="line.127"></a>
-<span class="sourceLineNo">128</span> this.constructor = b.constructor;<a name="line.128"></a>
-<span class="sourceLineNo">129</span> this.constructorArgs = b.constructorArgs;<a name="line.129"></a>
-<span class="sourceLineNo">130</span> this.extMeta = b.extMeta;<a name="line.130"></a>
-<span class="sourceLineNo">131</span> this.beanRegistry = b.beanRegistry;<a name="line.131"></a>
-<span class="sourceLineNo">132</span> this.typePropertyName = b.typePropertyName;<a name="line.132"></a>
-<span class="sourceLineNo">133</span> this.typeProperty = BeanPropertyMeta.builder(this, typePropertyName).canRead().canWrite().rawMetaType(ctx.string()).beanRegistry(beanRegistry).build();<a name="line.133"></a>
-<span class="sourceLineNo">134</span> this.sortProperties = b.sortProperties;<a name="line.134"></a>
-<span class="sourceLineNo">135</span> this.fluentSetters = b.fluentSetters;<a name="line.135"></a>
-<span class="sourceLineNo">136</span> }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span> private static final class Builder<T> {<a name="line.138"></a>
-<span class="sourceLineNo">139</span> ClassMeta<T> classMeta;<a name="line.139"></a>
-<span class="sourceLineNo">140</span> BeanContext ctx;<a name="line.140"></a>
-<span class="sourceLineNo">141</span> BeanFilter beanFilter;<a name="line.141"></a>
-<span class="sourceLineNo">142</span> String[] pNames;<a name="line.142"></a>
-<span class="sourceLineNo">143</span> Map<String,BeanPropertyMeta> properties;<a name="line.143"></a>
-<span class="sourceLineNo">144</span> Map<Method,String> getterProps = new HashMap<>();<a name="line.144"></a>
-<span class="sourceLineNo">145</span> Map<Method,String> setterProps = new HashMap<>();<a name="line.145"></a>
-<span class="sourceLineNo">146</span> BeanPropertyMeta dynaProperty;<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span> Map<Class<?>,Class<?>[]> typeVarImpls;<a name="line.148"></a>
-<span class="sourceLineNo">149</span> Constructor<T> constructor;<a name="line.149"></a>
-<span class="sourceLineNo">150</span> String[] constructorArgs = new String[0];<a name="line.150"></a>
-<span class="sourceLineNo">151</span> MetadataMap extMeta = new MetadataMap();<a name="line.151"></a>
-<span class="sourceLineNo">152</span> PropertyNamer propertyNamer;<a name="line.152"></a>
-<span class="sourceLineNo">153</span> BeanRegistry beanRegistry;<a name="line.153"></a>
-<span class="sourceLineNo">154</span> String dictionaryName, typePropertyName;<a name="line.154"></a>
-<span class="sourceLineNo">155</span> boolean sortProperties, fluentSetters;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span> Builder(ClassMeta<T> classMeta, BeanContext ctx, BeanFilter beanFilter, String[] pNames) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span> this.classMeta = classMeta;<a name="line.158"></a>
-<span class="sourceLineNo">159</span> this.ctx = ctx;<a name="line.159"></a>
-<span class="sourceLineNo">160</span> this.beanFilter = beanFilter;<a name="line.160"></a>
-<span class="sourceLineNo">161</span> this.pNames = pNames;<a name="line.161"></a>
-<span class="sourceLineNo">162</span> }<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span> @SuppressWarnings("unchecked")<a name="line.164"></a>
-<span class="sourceLineNo">165</span> String init(BeanMeta<T> beanMeta) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span> Class<?> c = classMeta.getInnerClass();<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span> try {<a name="line.168"></a>
-<span class="sourceLineNo">169</span> Visibility<a name="line.169"></a>
-<span class="sourceLineNo">170</span> conVis = ctx.getBeanConstructorVisibility(),<a name="line.170"></a>
-<span class="sourceLineNo">171</span> cVis = ctx.getBeanClassVisibility(),<a name="line.171"></a>
-<span class="sourceLineNo">172</span> mVis = ctx.getBeanMethodVisibility(),<a name="line.172"></a>
-<span class="sourceLineNo">173</span> fVis = ctx.getBeanFieldVisibility();<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span> List<Class<?>> bdClasses = new ArrayList<>();<a name="line.175"></a>
-<span class="sourceLineNo">176</span> if (beanFilter != null && beanFilter.getBeanDictionary() != null)<a name="line.176"></a>
-<span class="sourceLineNo">177</span> bdClasses.addAll(Arrays.asList(beanFilter.getBeanDictionary()));<a name="line.177"></a>
-<span class="sourceLineNo">178</span> Bean bean = classMeta.innerClass.getAnnotation(Bean.class);<a name="line.178"></a>
-<span class="sourceLineNo">179</span> if (bean != null) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> if (! bean.typeName().isEmpty())<a name="line.180"></a>
-<span class="sourceLineNo">181</span> bdClasses.add(classMeta.innerClass);<a name="line.181"></a>
-<span class="sourceLineNo">182</span> }<a name="line.182"></a>
-<span class="sourceLineNo">183</span> this.beanRegistry = new BeanRegistry(ctx, null, bdClasses.toArray(new Class<?>[bdClasses.size()]));<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> for (Bean b : getAnnotationsParentFirst(Bean.class, classMeta.innerClass))<a name="line.185"></a>
-<span class="sourceLineNo">186</span> if (! b.typePropertyName().isEmpty())<a name="line.186"></a>
-<span class="sourceLineNo">187</span> typePropertyName = b.typePropertyName();<a name="line.187"></a>
-<span class="sourceLineNo">188</span> if (typePropertyName == null)<a name="line.188"></a>
-<span class="sourceLineNo">189</span> typePropertyName = ctx.getBeanTypePropertyName();<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span> fluentSetters = (ctx.isFluentSetters() || (beanFilter != null && beanFilter.isFluentSetters()));<a name="line.191"></a>
+<span class="sourceLineNo">095</span> private final MetadataMap extMeta; // Extended metadata<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span> // Other fields<a name="line.97"></a>
+<span class="sourceLineNo">098</span> final String typePropertyName; // "_type" property actual name.<a name="line.98"></a>
+<span class="sourceLineNo">099</span> private final BeanPropertyMeta typeProperty; // "_type" mock bean property.<a name="line.99"></a>
+<span class="sourceLineNo">100</span> final BeanPropertyMeta dynaProperty; // "extras" property.<a name="line.100"></a>
+<span class="sourceLineNo">101</span> private final String dictionaryName; // The @Bean(typeName) annotation defined on this bean class.<a name="line.101"></a>
+<span class="sourceLineNo">102</span> final String notABeanReason; // Readable string explaining why this class wasn't a bean.<a name="line.102"></a>
+<span class="sourceLineNo">103</span> final BeanRegistry beanRegistry;<a name="line.103"></a>
+<span class="sourceLineNo">104</span> final boolean sortProperties;<a name="line.104"></a>
+<span class="sourceLineNo">105</span> final boolean fluentSetters;<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span> /**<a name="line.107"></a>
+<span class="sourceLineNo">108</span> * Constructor.<a name="line.108"></a>
+<span class="sourceLineNo">109</span> *<a name="line.109"></a>
+<span class="sourceLineNo">110</span> * @param classMeta The target class.<a name="line.110"></a>
+<span class="sourceLineNo">111</span> * @param ctx The bean context that created this object.<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * @param beanFilter Optional bean filter associated with the target class. Can be <jk>null</jk>.<a name="line.112"></a>
+<span class="sourceLineNo">113</span> * @param pNames Explicit list of property names and order of properties. If <jk>null</jk>, determine automatically.<a name="line.113"></a>
+<span class="sourceLineNo">114</span> */<a name="line.114"></a>
+<span class="sourceLineNo">115</span> protected BeanMeta(final ClassMeta<T> classMeta, BeanContext ctx, BeanFilter beanFilter, String[] pNames) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span> this.classMeta = classMeta;<a name="line.116"></a>
+<span class="sourceLineNo">117</span> this.ctx = ctx;<a name="line.117"></a>
+<span class="sourceLineNo">118</span> this.c = classMeta.getInnerClass();<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span> Builder<T> b = new Builder<>(classMeta, ctx, beanFilter, pNames);<a name="line.120"></a>
+<span class="sourceLineNo">121</span> this.notABeanReason = b.init(this);<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span> this.beanFilter = beanFilter;<a name="line.123"></a>
+<span class="sourceLineNo">124</span> this.dictionaryName = b.dictionaryName;<a name="line.124"></a>
+<span class="sourceLineNo">125</span> this.properties = unmodifiableMap(b.properties);<a name="line.125"></a>
+<span class="sourceLineNo">126</span> this.getterProps = unmodifiableMap(b.getterProps);<a name="line.126"></a>
+<span class="sourceLineNo">127</span> this.setterProps = unmodifiableMap(b.setterProps);<a name="line.127"></a>
+<span class="sourceLineNo">128</span> this.dynaProperty = b.dynaProperty;<a name="line.128"></a>
+<span class="sourceLineNo">129</span> this.typeVarImpls = unmodifiableMap(b.typeVarImpls);<a name="line.129"></a>
+<span class="sourceLineNo">130</span> this.constructor = b.constructor;<a name="line.130"></a>
+<span class="sourceLineNo">131</span> this.constructorArgs = b.constructorArgs;<a name="line.131"></a>
+<span class="sourceLineNo">132</span> this.extMeta = b.extMeta;<a name="line.132"></a>
+<span class="sourceLineNo">133</span> this.beanRegistry = b.beanRegistry;<a name="line.133"></a>
+<span class="sourceLineNo">134</span> this.typePropertyName = b.typePropertyName;<a name="line.134"></a>
+<span class="sourceLineNo">135</span> this.typeProperty = BeanPropertyMeta.builder(this, typePropertyName).canRead().canWrite().rawMetaType(ctx.string()).beanRegistry(beanRegistry).build();<a name="line.135"></a>
+<span class="sourceLineNo">136</span> this.sortProperties = b.sortProperties;<a name="line.136"></a>
+<span class="sourceLineNo">137</span> this.fluentSetters = b.fluentSetters;<a name="line.137"></a>
+<span class="sourceLineNo">138</span> }<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span> private static final class Builder<T> {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> ClassMeta<T> classMeta;<a name="line.141"></a>
+<span class="sourceLineNo">142</span> BeanContext ctx;<a name="line.142"></a>
+<span class="sourceLineNo">143</span> BeanFilter beanFilter;<a name="line.143"></a>
+<span class="sourceLineNo">144</span> String[] pNames;<a name="line.144"></a>
+<span class="sourceLineNo">145</span> Map<String,BeanPropertyMeta> properties;<a name="line.145"></a>
+<span class="sourceLineNo">146</span> Map<Method,String> getterProps = new HashMap<>();<a name="line.146"></a>
+<span class="sourceLineNo">147</span> Map<Method,String> setterProps = new HashMap<>();<a name="line.147"></a>
+<span class="sourceLineNo">148</span> BeanPropertyMeta dynaProperty;<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span> Map<Class<?>,Class<?>[]> typeVarImpls;<a name="line.150"></a>
+<span class="sourceLineNo">151</span> Constructor<T> constructor;<a name="line.151"></a>
+<span class="sourceLineNo">152</span> String[] constructorArgs = new String[0];<a name="line.152"></a>
+<span class="sourceLineNo">153</span> MetadataMap extMeta = new MetadataMap();<a name="line.153"></a>
+<span class="sourceLineNo">154</span> PropertyNamer propertyNamer;<a name="line.154"></a>
+<span class="sourceLineNo">155</span> BeanRegistry beanRegistry;<a name="line.155"></a>
+<span class="sourceLineNo">156</span> String dictionaryName, typePropertyName;<a name="line.156"></a>
+<span class="sourceLineNo">157</span> boolean sortProperties, fluentSetters;<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span> Builder(ClassMeta<T> classMeta, BeanContext ctx, BeanFilter beanFilter, String[] pNames) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span> this.classMeta = classMeta;<a name="line.160"></a>
+<span class="sourceLineNo">161</span> this.ctx = ctx;<a name="line.161"></a>
+<span class="sourceLineNo">162</span> this.beanFilter = beanFilter;<a name="line.162"></a>
+<span class="sourceLineNo">163</span> this.pNames = pNames;<a name="line.163"></a>
+<span class="sourceLineNo">164</span> }<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span> @SuppressWarnings("unchecked")<a name="line.166"></a>
+<span class="sourceLineNo">167</span> String init(BeanMeta<T> beanMeta) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span> Class<?> c = classMeta.getInnerClass();<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span> try {<a name="line.170"></a>
+<span class="sourceLineNo">171</span> Visibility<a name="line.171"></a>
+<span class="sourceLineNo">172</span> conVis = ctx.getBeanConstructorVisibility(),<a name="line.172"></a>
+<span class="sourceLineNo">173</span> cVis = ctx.getBeanClassVisibility(),<a name="line.173"></a>
+<span class="sourceLineNo">174</span> mVis = ctx.getBeanMethodVisibility(),<a name="line.174"></a>
+<span class="sourceLineNo">175</span> fVis = ctx.getBeanFieldVisibility();<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span> List<Class<?>> bdClasses = new ArrayList<>();<a name="line.177"></a>
+<span class="sourceLineNo">178</span> if (beanFilter != null && beanFilter.getBeanDictionary() != null)<a name="line.178"></a>
+<span class="sourceLineNo">179</span> bdClasses.addAll(Arrays.asList(beanFilter.getBeanDictionary()));<a name="line.179"></a>
+<span class="sourceLineNo">180</span> Bean bean = classMeta.innerClass.getAnnotation(Bean.class);<a name="line.180"></a>
+<span class="sourceLineNo">181</span> if (bean != null) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span> if (! bean.typeName().isEmpty())<a name="line.182"></a>
+<span class="sourceLineNo">183</span> bdClasses.add(classMeta.innerClass);<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span> this.beanRegistry = new BeanRegistry(ctx, null, bdClasses.toArray(new Class<?>[bdClasses.size()]));<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span> for (Bean b : getAnnotationsParentFirst(Bean.class, classMeta.innerClass))<a name="line.187"></a>
+<span class="sourceLineNo">188</span> if (! b.typePropertyName().isEmpty())<a name="line.188"></a>
+<span class="sourceLineNo">189</span> typePropertyName = b.typePropertyName();<a name="line.189"></a>
+<span class="sourceLineNo">190</span> if (typePropertyName == null)<a name="line.190"></a>
+<span class="sourceLineNo">191</span> typePropertyName = ctx.getBeanTypePropertyName();<a name="line.191"></a>
<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span> // If @Bean.interfaceClass is specified on the parent class, then we want<a name="line.193"></a>
-<span class="sourceLineNo">194</span> // to use the properties defined on that class, not the subclass.<a name="line.194"></a>
-<span class="sourceLineNo">195</span> Class<?> c2 = (beanFilter != null && beanFilter.getInterfaceClass() != null ? beanFilter.getInterfaceClass() : c);<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span> Class<?> stopClass = (beanFilter != null ? beanFilter.getStopClass() : Object.class);<a name="line.197"></a>
-<span class="sourceLineNo">198</span> if (stopClass == null)<a name="line.198"></a>
-<span class="sourceLineNo">199</span> stopClass = Object.class;<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span> Map<String,BeanPropertyMeta.Builder> normalProps = new LinkedHashMap<>();<a name="line.201"></a>
+<span class="sourceLineNo">193</span> fluentSetters = (ctx.isFluentSetters() || (beanFilter != null && beanFilter.isFluentSetters()));<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span> // If @Bean.interfaceClass is specified on the parent class, then we want<a name="line.195"></a>
+<span class="sourceLineNo">196</span> // to use the properties defined on that class, not the subclass.<a name="line.196"></a>
+<span class="sourceLineNo">197</span> Class<?> c2 = (beanFilter != null && beanFilter.getInterfaceClass() != null ? beanFilter.getInterfaceClass() : c);<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span> Class<?> stopClass = (beanFilter != null ? beanFilter.getStopClass() : Object.class);<a name="line.199"></a>
+<span class="sourceLineNo">200</span> if (stopClass == null)<a name="line.200"></a>
+<span class="sourceLineNo">201</span> stopClass = Object.class;<a name="line.201"></a>
<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span> /// See if this class matches one the patterns in the exclude-class list.<a name="line.203"></a>
-<span class="sourceLineNo">204</span> if (ctx.isNotABean(c))<a name="line.204"></a>
-<span class="sourceLineNo">205</span> return "Class matches exclude-class list";<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span> if (! (cVis.isVisible(c.getModifiers()) || c.isAnonymousClass()))<a name="line.207"></a>
-<span class="sourceLineNo">208</span> return "Class is not public";<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span> if (c.isAnnotationPresent(BeanIgnore.class))<a name="line.210"></a>
-<span class="sourceLineNo">211</span> return "Class is annotated with @BeanIgnore";<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span> // Make sure it's serializable.<a name="line.213"></a>
-<span class="sourceLineNo">214</span> if (beanFilter == null && ctx.isBeansRequireSerializable() && ! isParentClass(Serializable.class, c))<a name="line.214"></a>
-<span class="sourceLineNo">215</span> return "Class is not serializable";<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span> // Look for @BeanConstructor constructor.<a name="line.217"></a>
-<span class="sourceLineNo">218</span> for (Constructor<?> x : c.getConstructors()) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span> if (x.isAnnotationPresent(BeanConstructor.class)) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span> if (constructor != null)<a name="line.220"></a>
-<span class="sourceLineNo">221</span> throw new BeanRuntimeException(c, "Multiple instances of '@BeanConstructor' found.");<a name="line.221"></a>
-<span class="sourceLineNo">222</span> constructor = (Constructor<T>)x;<a name="line.222"></a>
-<span class="sourceLineNo">223</span> constructorArgs = split(x.getAnnotation(BeanConstructor.class).properties());<a name="line.223"></a>
-<span class="sourceLineNo">224</span> if (constructorArgs.length != x.getParameterTypes().length)<a name="line.224"></a>
-<span class="sourceLineNo">225</span> throw new BeanRuntimeException(c, "Number of properties defined in '@BeanConstructor' annotation does not match number of parameters in constructor.");<a name="line.225"></a>
-<span class="sourceLineNo">226</span> setAccessible(constructor, false);<a name="line.226"></a>
-<span class="sourceLineNo">227</span> }<a name="line.227"></a>
-<span class="sourceLineNo">228</span> }<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span> // If this is an interface, look for impl classes defined in the context.<a name="line.230"></a>
-<span class="sourceLineNo">231</span> if (constructor == null)<a name="line.231"></a>
-<span class="sourceLineNo">232</span> constructor = (Constructor<T>)ctx.getImplClassConstructor(c, conVis);<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span> if (constructor == null)<a name="line.234"></a>
-<span class="sourceLineNo">235</span> constructor = (Constructor<T>)findNoArgConstructor(c, conVis);<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span> if (constructor == null && beanFilter == null && ctx.isBeansRequireDefaultConstructor())<a name="line.237"></a>
-<span class="sourceLineNo">238</span> return "Class does not have the required no-arg constructor";<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span> setAccessible(constructor, false);<a name="line.240"></a>
+<span class="sourceLineNo">203</span> Map<String,BeanPropertyMeta.Builder> normalProps = new LinkedHashMap<>();<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span> /// See if this class matches one the patterns in the exclude-class list.<a name="line.205"></a>
+<span class="sourceLineNo">206</span> if (ctx.isNotABean(c))<a name="line.206"></a>
+<span class="sourceLineNo">207</span> return "Class matches exclude-class list";<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span> if (! (cVis.isVisible(c.getModifiers()) || c.isAnonymousClass()))<a name="line.209"></a>
+<span class="sourceLineNo">210</span> return "Class is not public";<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span> if (c.isAnnotationPresent(BeanIgnore.class))<a name="line.212"></a>
+<span class="sourceLineNo">213</span> return "Class is annotated with @BeanIgnore";<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span> // Make sure it's serializable.<a name="line.215"></a>
+<span class="sourceLineNo">216</span> if (beanFilter == null && ctx.isBeansRequireSerializable() && ! isParentClass(Serializable.class, c))<a name="line.216"></a>
+<span class="sourceLineNo">217</span> return "Class is not serializable";<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span> // Look for @BeanConstructor constructor.<a name="line.219"></a>
+<span class="sourceLineNo">220</span> for (Constructor<?> x : c.getConstructors()) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span> if (x.isAnnotationPresent(BeanConstructor.class)) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span> if (constructor != null)<a name="line.222"></a>
+<span class="sourceLineNo">223</span> throw new BeanRuntimeException(c, "Multiple instances of '@BeanConstructor' found.");<a name="line.223"></a>
+<span class="sourceLineNo">224</span> constructor = (Constructor<T>)x;<a name="line.224"></a>
+<span class="sourceLineNo">225</span> constructorArgs = split(x.getAnnotation(BeanConstructor.class).properties());<a name="line.225"></a>
+<span class="sourceLineNo">226</span> if (constructorArgs.length != x.getParameterTypes().length)<a name="line.226"></a>
+<span class="sourceLineNo">227</span> throw new BeanRuntimeException(c, "Number of properties defined in '@BeanConstructor' annotation does not match number of parameters in constructor.");<a name="line.227"></a>
+<span class="sourceLineNo">228</span> setAccessible(constructor, false);<a name="line.228"></a>
+<span class="sourceLineNo">229</span> }<a name="line.229"></a>
+<span class="sourceLineNo">230</span> }<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span> // If this is an interface, look for impl classes defined in the context.<a name="line.232"></a>
+<span class="sourceLineNo">233</span> if (constructor == null)<a name="line.233"></a>
+<span class="sourceLineNo">234</span> constructor = (Constructor<T>)ctx.getImplClassConstructor(c, conVis);<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span> if (constructor == null)<a name="line.236"></a>
+<span class="sourceLineNo">237</span> constructor = (Constructor<T>)findNoArgConstructor(c, conVis);<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span> if (constructor == null && beanFilter == null && ctx.isBeansRequireDefaultConstructor())<a name="line.239"></a>
+<span class="sourceLineNo">240</span> return "Class does not have the required no-arg constructor";<a name="line.240"></a>
<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span> // Explicitly defined property names in @Bean annotation.<a name="line.242"></a>
-<span class="sourceLineNo">243</span> Set<String> fixedBeanProps = new LinkedHashSet<>();<a name="line.243"></a>
-<span class="sourceLineNo">244</span> String[] includeProperties = ctx.getIncludeProperties(c);<a name="line.244"></a>
-<span class="sourceLineNo">245</span> String[] excludeProperties = ctx.getExcludeProperties(c);<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span> Set<String> filterProps = new HashSet<>(); // Names of properties defined in @Bean(properties)<a name="line.247"></a>
+<span class="sourceLineNo">242</span> setAccessible(constructor, false);<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span> // Explicitly defined property names in @Bean annotation.<a name="line.244"></a>
+<span class="sourceLineNo">245</span> Set<String> fixedBeanProps = new LinkedHashSet<>();<a name="line.245"></a>
+<span class="sourceLineNo">246</span> String[] includeProperties = ctx.getIncludeProperties(c);<a name="line.246"></a>
+<span class="sourceLineNo">247</span> String[] excludeProperties = ctx.getExcludeProperties(c);<a name="line.247"></a>
<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> if (beanFilter != null) {<a name="line.249"></a>
+<span class="sourceLineNo">249</span> Set<String> filterProps = new HashSet<>(); // Names of properties defined in @Bean(properties)<a name="line.249"></a>
<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> if (beanFilter.getProperties() != null)<a name="line.251"></a>
-<span class="sourceLineNo">252</span> filterProps.addAll(Arrays.asList(beanFilter.getProperties()));<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span> // Get the 'properties' attribute if specified.<a name="line.254"></a>
-<span class="sourceLineNo">255</span> if (beanFilter.getProperties() != null && includeProperties == null)<a name="line.255"></a>
-<span class="sourceLineNo">256</span> for (String p : beanFilter.getProperties())<a name="line.256"></a>
-<span class="sourceLineNo">257</span> fixedBeanProps.add(p);<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span> if (beanFilter.getPropertyNamer() != null)<a name="line.259"></a>
-<span class="sourceLineNo">260</span> propertyNamer = beanFilter.getPropertyNamer();<a name="line.260"></a>
-<span class="sourceLineNo">261</span> }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> if (includeProperties != null)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> fixedBeanProps.addAll(Arrays.asList(includeProperties));<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span> if (propertyNamer == null)<a name="line.266"></a>
-<span class="sourceLineNo">267</span> propertyNamer = ctx.getPropertyNamer();<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span> // First populate the properties with those specified in the bean annotation to<a name="line.269"></a>
-<span class="sourceLineNo">270</span> // ensure that ordering first.<a name="line.270"></a>
-<span class="sourceLineNo">271</span> for (String name : fixedBeanProps)<a name="line.271"></a>
-<span class="sourceLineNo">272</span> normalProps.put(name, BeanPropertyMeta.builder(beanMeta, name));<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span> if (ctx.isUseJavaBeanIntrospector()) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span> BeanInfo bi = null;<a name="line.275"></a>
-<span class="sourceLineNo">276</span> if (! c2.isInterface())<a name="line.276"></a>
-<span class="sourceLineNo">277</span> bi = Introspector.getBeanInfo(c2, stopClass);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> else<a name="line.278"></a>
-<span class="sourceLineNo">279</span> bi = Introspector.getBeanInfo(c2, null);<a name="line.279"></a>
-<span class="sourceLineNo">280</span> if (bi != null) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span> for (PropertyDescriptor pd : bi.getPropertyDescriptors()) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span> String name = pd.getName();<a name="line.282"></a>
-<span class="sourceLineNo">283</span> if (! normalProps.containsKey(name))<a name="line.283"></a>
-<span class="sourceLineNo">284</span> normalProps.put(name, BeanPropertyMeta.builder(beanMeta, name));<a name="line.284"></a>
-<span class="sourceLineNo">285</span> normalProps.get(name).setGetter(pd.getReadMethod()).setSetter(pd.getWriteMethod());<a name="line.285"></a>
-<span class="sourceLineNo">286</span> }<a name="line.286"></a>
-<span class="sourceLineNo">287</span> }<a name="line.287"></a>
-<span class="sourceLineNo">288</span><a name="line.288"></a>
-<span class="sourceLineNo">289</span> } else /* Use 'better' introspection */ {<a name="line.289"></a>
+<span class="sourceLineNo">251</span> if (beanFilter != null) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> if (beanFilter.getProperties() != null)<a name="line.253"></a>
+<span class="sourceLineNo">254</span> filterProps.addAll(Arrays.asList(beanFilter.getProperties()));<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span> // Get the 'properties' attribute if specified.<a name="line.256"></a>
+<span class="sourceLineNo">257</span> if (beanFilter.getProperties() != null && includeProperties == null)<a name="line.257"></a>
+<span class="sourceLineNo">258</span> for (String p : beanFilter.getProperties())<a name="line.258"></a>
+<span class="sourceLineNo">259</span> fixedBeanProps.add(p);<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span> if (beanFilter.getPropertyNamer() != null)<a name="line.261"></a>
+<span class="sourceLineNo">262</span> propertyNamer = beanFilter.getPropertyNamer();<a name="line.262"></a>
+<span class="sourceLineNo">263</span> }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span> if (includeProperties != null)<a name="line.265"></a>
+<span class="sourceLineNo">266</span> fixedBeanProps.addAll(Arrays.asList(includeProperties));<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span> if (propertyNamer == null)<a name="line.268"></a>
+<span class="sourceLineNo">269</span> propertyNamer = ctx.getPropertyNamer();<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span> // First populate the properties with those specified in the bean annotation to<a name="line.271"></a>
+<span class="sourceLineNo">272</span> // ensure that ordering first.<a name="line.272"></a>
+<span class="sourceLineNo">273</span> for (String name : fixedBeanProps)<a name="line.273"></a>
+<span class="sourceLineNo">274</span> normalProps.put(name, BeanPropertyMeta.builder(beanMeta, name));<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span> if (ctx.isUseJavaBeanIntrospector()) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> BeanInfo bi = null;<a name="line.277"></a>
+<span class="sourceLineNo">278</span> if (! c2.isInterface())<a name="line.278"></a>
+<span class="sourceLineNo">279</span> bi = Introspector.getBeanInfo(c2, stopClass);<a name="line.279"></a>
+<span class="sourceLineNo">280</span> else<a name="line.280"></a>
+<span class="sourceLineNo">281</span> bi = Introspector.getBeanInfo(c2, null);<a name="line.281"></a>
+<span class="sourceLineNo">282</span> if (bi != null) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span> for (PropertyDescriptor pd : bi.getPropertyDescriptors()) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span> String name = pd.getName();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> if (! normalProps.containsKey(name))<a name="line.285"></a>
+<span class="sourceLineNo">286</span> normalProps.put(name, BeanPropertyMeta.builder(beanMeta, name));<a name="line.286"></a>
+<span class="sourceLineNo">287</span> normalProps.get(name).setGetter(pd.getReadMethod()).setSetter(pd.getWriteMethod());<a name="line.287"></a>
+<span class="sourceLineNo">288</span> }<a name="line.288"></a>
+<span class="sourceLineNo">289</span> }<a name="line.289"></a>
<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span> for (Field f : findBeanFields(c2, stopClass, fVis, filterProps)) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span> String name = findPropertyName(f, fixedBeanProps);<a name="line.292"></a>
-<span class="sourceLineNo">293</span> if (name != null) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> if (! normalProps.containsKey(name))<a name="line.294"></a>
-<span class="sourceLineNo">295</span> normalProps.put(name, BeanPropertyMeta.builder(beanMeta, name));<a name="line.295"></a>
-<span class="sourceLineNo">296</span> normalProps.get(name).setField(f);<a name="line.296"></a>
-<span class="sourceLineNo">297</span> }<a name="line.297"></a>
-<span class="sourceLineNo">298</span> }<a name="line.298"></a>
-<span class="sourceLineNo">299</span><a name="line.299"></a>
-<span class="sourceLineNo">300</span> List<BeanMethod> bms = findBeanMethods(c2, stopClass, mVis, fixedBeanProps, filterProps, propertyNamer, fluentSetters);<a name="line.300"></a>
+<span class="sourceLineNo">291</span> } else /* Use 'better' introspection */ {<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span> for (Field f : findBeanFields(c2, stopClass, fVis, filterProps)) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span> String name = findPropertyName(f, fixedBeanProps);<a name="line.294"></a>
+<span class="sourceLineNo">295</span> if (name != null) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span> if (! normalProps.containsKey(name))<a name="line.296"></a>
+<span class="sourceLineNo">297</span> normalProps.put(name, BeanPropertyMeta.builder(beanMeta, name));<a name="line.297"></a>
+<span class="sourceLineNo">298</span> normalProps.get(name).setField(f);<a name="line.298"></a>
+<span class="sourceLineNo">299</span> }<a name="line.299"></a>
+<span class="sourceLineNo">300</span> }<a name="line.300"></a>
<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span> // Iterate through all the getters.<a name="line.302"></a>
-<span class="sourceLineNo">303</span> for (BeanMethod bm : bms) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span> String pn = bm.propertyName;<a name="line.304"></a>
-<span class="sourceLineNo">305</span> Method m = bm.method;<a name="line.305"></a>
-<span class="sourceLineNo">306</span> if (! normalProps.containsKey(pn))<a name="line.306"></a>
-<span class="sourceLineNo">307</span> normalProps.put(pn, new BeanPropertyMeta.Builder(beanMeta, pn));<a name="line.307"></a>
-<span class="sourceLineNo">308</span> BeanPropertyMeta.Builder bpm = normalProps.get(pn);<a name="line.308"></a>
-<span class="sourceLineNo">309</span> if (bm.methodType == GETTER) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span> // Two getters. Pick the best.<a name="line.310"></a>
-<span class="sourceLineNo">311</span> if (bpm.getter != null) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span> if (m.getAnnotation(BeanProperty.class) == null && bpm.getter.getAnnotation(BeanProperty.class) != null)<a name="line.313"></a>
-<span class="sourceLineNo">314</span> m = bpm.getter; // @BeanProperty annotated method takes precedence.<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span> else if (m.getName().startsWith("is") && bpm.getter.getName().startsWith("get"))<a name="line.316"></a>
-<span class="sourceLineNo">317</span> m = bpm.getter; // getX() overrides isX().<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> bpm.setGetter(m);<a name="line.319"></a>
-<span class="sourceLineNo">320</span> }<a name="line.320"></a>
-<span class="sourceLineNo">321</span> }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span> // Now iterate through all the setters.<a name="line.323"></a>
-<span class="sourceLineNo">324</span> for (BeanMethod bm : bms) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span> if (bm.methodType == SETTER) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span> BeanPropertyMeta.Builder bpm = normalProps.get(bm.propertyName);<a name="line.326"></a>
-<span class="sourceLineNo">327</span> if (bm.matchesPropertyType(bpm))<a name="line.327"></a>
-<span class="sourceLineNo">328</span> bpm.setSetter(bm.method);<a name="line.328"></a>
-<span class="sourceLineNo">329</span> }<a name="line.329"></a>
-<span class="sourceLineNo">330</span> }<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span> // Now iterate through all the extraKeys.<a name="line.332"></a>
-<span class="sourceLineNo">333</span> for (BeanMethod bm : bms) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span> if (bm.methodType == EXTRAKEYS) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span> BeanPropertyMeta.Builder bpm = normalProps.get(bm.propertyName);<a name="line.335"></a>
-<span class="sourceLineNo">336</span> bpm.setExtraKeys(bm.method);<a name="line.336"></a>
-<span class="sourceLineNo">337</span> }<a name="line.337"></a>
-<span class="sourceLineNo">338</span> }<a name="line.338"></a>
-<span class="sourceLineNo">339</span> }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span> typeVarImpls = new HashMap<>();<a name="line.341"></a>
-<span class="sourceLineNo">342</span> findTypeVarImpls(c, typeVarImpls);<a name="line.342"></a>
-<span class="sourceLineNo">343</span> if (typeVarImpls.isEmpty())<a name="line.343"></a>
-<span class="sourceLineNo">344</span> typeVarImpls = null;<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span> // Eliminate invalid properties, and set the contents of getterProps and setterProps.<a name="line.346"></a>
-<span class="sourceLineNo">347</span> for (Iterator<BeanPropertyMeta.Builder> i = normalProps.values().iterator(); i.hasNext();) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span> BeanPropertyMeta.Builder p = i.next();<a name="line.348"></a>
-<span class="sourceLineNo">349</span> try {<a name="line.349"></a>
-<span class="sourceLineNo">350</span> if (p.field == null)<a name="line.350"></a>
-<span class="sourceLineNo">351</span> p.setInnerField(findInnerBeanField(c, stopClass, p.name));<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span> if (p.validate(ctx, beanRegistry, typeVarImpls)) {<a name="line.353"></a>
+<span class="sourceLineNo">302</span> List<BeanMethod> bms = findBeanMethods(c2, stopClass, mVis, fixedBeanProps, filterProps, propertyNamer, fluentSetters);<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> // Iterate through all the getters.<a name="line.304"></a>
+<span class="sourceLineNo">305</span> for (BeanMethod bm : bms) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span> String pn = bm.propertyName;<a name="line.306"></a>
+<span class="sourceLineNo">307</span> Method m = bm.method;<a name="line.307"></a>
+<span class="sourceLineNo">308</span> if (! normalProps.containsKey(pn))<a name="line.308"></a>
+<span class="sourceLineNo">309</span> normalProps.put(pn, new BeanPropertyMeta.Builder(beanMeta, pn));<a name="line.309"></a>
+<span class="sourceLineNo">310</span> BeanPropertyMeta.Builder bpm = normalProps.get(pn);<a name="line.310"></a>
+<span class="sourceLineNo">311</span> if (bm.methodType == GETTER) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span> // Two getters. Pick the best.<a name="line.312"></a>
+<span class="sourceLineNo">313</span> if (bpm.getter != null) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span> if (m.getAnnotation(BeanProperty.class) == null && bpm.getter.getAnnotation(BeanProperty.class) != null)<a name="line.315"></a>
+<span class="sourceLineNo">316</span> m = bpm.getter; // @BeanProperty annotated method takes precedence.<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span> else if (m.getName().startsWith("is") && bpm.getter.getName().startsWith("get"))<a name="line.318"></a>
+<span class="sourceLineNo">319</span> m = bpm.getter; // getX() overrides isX().<a name="line.319"></a>
+<span class="sourceLineNo">320</span> }<a name="line.320"></a>
+<span class="sourceLineNo">321</span> bpm.setGetter(m);<a name="line.321"></a>
+<span class="sourceLineNo">322</span> }<a name="line.322"></a>
+<span class="sourceLineNo">323</span> }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span> // Now iterate through all the setters.<a name="line.325"></a>
+<span class="sourceLineNo">326</span> for (BeanMethod bm : bms) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span> if (bm.methodType == SETTER) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span> BeanPropertyMeta.Builder bpm = normalProps.get(bm.propertyName);<a name="line.328"></a>
+<span class="sourceLineNo">329</span> if (bm.matchesPropertyType(bpm))<a name="line.329"></a>
+<span class="sourceLineNo">330</span> bpm.setSetter(bm.method);<a name="line.330"></a>
+<span class="sourceLineNo">331</span> }<a name="line.331"></a>
+<span class="sourceLineNo">332</span> }<a name="line.332"></a>
+<span class="sourceLineNo">333</span><a name="line.333"></a>
+<span class="sourceLineNo">334</span> // Now iterate through all the extraKeys.<a name="line.334"></a>
+<span class="sourceLineNo">335</span> for (BeanMethod bm : bms) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span> if (bm.methodType == EXTRAKEYS) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span> BeanPropertyMeta.Builder bpm = normalProps.get(bm.propertyName);<a name="line.337"></a>
+<span class="sourceLineNo">338</span> bpm.setExtraKeys(bm.method);<a name="line.338"></a>
+<span class="sourceLineNo">339</span> }<a name="line.339"></a>
+<span class="sourceLineNo">340</span> }<a name="line.340"></a>
+<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span> typeVarImpls = new HashMap<>();<a name="line.343"></a>
+<span class="sourceLineNo">344</span> findTypeVarImpls(c, typeVarImpls);<a name="line.344"></a>
+<span class="sourceLineNo">345</span> if (typeVarImpls.isEmpty())<a name="line.345"></a>
+<span class="sourceLineNo">346</span> typeVarImpls = null;<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span> // Eliminate invalid properties, and set the contents of getterProps and setterProps.<a name="line.348"></a>
+<span class="sourceLineNo">349</span> for (Iterator<BeanPropertyMeta.Builder> i = normalProps.values().iterator(); i.hasNext();) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> BeanPropertyMeta.Builder p = i.next();<a name="line.350"></a>
+<span class="sourceLineNo">351</span> try {<a name="line.351"></a>
+<span class="sourceLineNo">352</span> if (p.field == null)<a name="line.352"></a>
+<span class="sourceLineNo">353</span> p.setInnerField(findInnerBeanField(c, stopClass, p.name));<a name="line.353"></a>
<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span> if (p.getter != null)<a name="line.355"></a>
-<span class="sourceLineNo">356</span> getterProps.put(p.getter, p.name);<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span> if (p.setter != null)<a name="line.358"></a>
-<span class="sourceLineNo">359</span> setterProps.put(p.setter, p.name);<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span> } else {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> i.remove();<a name="line.362"></a>
-<span class="sourceLineNo">363</span> }<a name="line.363"></a>
-<span class="sourceLineNo">364</span> } catch (ClassNotFoundException e) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span> throw new BeanRuntimeException(c, e.getLocalizedMessage());<a name="line.365"></a>
-<span class="sourceLineNo">366</span> }<a name="line.366"></a>
-<span class="sourceLineNo">367</span> }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span> // Check for missing properties.<a name="line.369"></a>
-<span class="sourceLineNo">370</span> for (String fp : fixedBeanProps)<a name="line.370"></a>
-<span class="sourceLineNo">371</span> if (! normalProps.containsKey(fp))<a name="line.371"></a>
-<span class="sourceLineNo">372</span> throw new BeanRuntimeException(c, "The property ''{0}'' was defined on the @Bean(properties=X) annotation but was not found on the class definition.", fp);<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span> // Mark constructor arg properties.<a name="line.374"></a>
-<span class="sourceLineNo">375</span> for (String fp : constructorArgs) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span> BeanPropertyMeta.Builder m = normalProps.get(fp);<a name="line.376"></a>
-<span class="sourceLineNo">377</span> if (m == null)<a name="line.377"></a>
-<span class="sourceLineNo">378</span> throw new BeanRuntimeException(c, "The property ''{0}'' was defined on the @BeanConstructor(properties=X) annotation but was not found on the class definition.", fp);<a name="line.378"></a>
-<span class="sourceLineNo">379</span> m.setAsConstructorArg();<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> // Make sure at least one property was found.<a name="line.382"></a>
-<span class="sourceLineNo">383</span> if (beanFilter == null && ctx.isBeansRequireSomeProperties() && normalProps.size() == 0)<a name="line.383"></a>
-<span class="sourceLineNo">384</span> return "No properties detected on bean class";<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span> sortProperties = (ctx.isSortProperties() || (beanFilter != null && beanFilter.isSortProperties())) && fixedBeanProps.isEmpty();<a name="line.386"></a>
+<span class="sourceLineNo">355</span> if (p.validate(ctx, beanRegistry, typeVarImpls)) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span> if (p.getter != null)<a name="line.357"></a>
+<span class="sourceLineNo">358</span> getterProps.put(p.getter, p.name);<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span> if (p.setter != null)<a name="line.360"></a>
+<span class="sourceLineNo">361</span> setterProps.put(p.setter, p.name);<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span> } else {<a name="line.363"></a>
+<span class="sourceLineNo">364</span> i.remove();<a name="line.364"></a>
+<span class="sourceLineNo">365</span> }<a name="line.365"></a>
+<span class="sourceLineNo">366</span> } catch (ClassNotFoundException e) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span> throw new BeanRuntimeException(c, e.getLocalizedMessage());<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span> }<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span> // Check for missing properties.<a name="line.371"></a>
+<span class="sourceLineNo">372</span> for (String fp : fixedBeanProps)<a name="line.372"></a>
+<span class="sourceLineNo">373</span> if (! normalProps.containsKey(fp))<a name="line.373"></a>
+<span class="sourceLineNo">374</span> throw new BeanRuntimeException(c, "The property ''{0}'' was defined on the @Bean(properties=X) annotation but was not found on the class definition.", fp);<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span> // Mark constructor arg properties.<a name="line.376"></a>
+<span class="sourceLineNo">377</span> for (String fp : constructorArgs) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span> BeanPropertyMeta.Builder m = normalProps.get(fp);<a name="line.378"></a>
+<span class="sourceLineNo">379</span> if (m == null)<a name="line.379"></a>
+<span class="sourceLineNo">380</span> throw new BeanRuntimeException(c, "The property ''{0}'' was defined on the @BeanConstructor(properties=X) annotation but was not found on the class definition.", fp);<a name="line.380"></a>
+<span class="sourceLineNo">381</span> m.setAsConstructorArg();<a name="line.381"></a>
+<span class="sourceLineNo">382</span> }<a name="line.382"></a>
+<span class="sourceLineNo">383</span><a name="line.383"></a>
+<span class="sourceLineNo">384</span> // Make sure at least one property was found.<a name="line.384"></a>
+<span class="sourceLineNo">385</span> if (beanFilter == null && ctx.isBeansRequireSomeProperties() && normalProps.size() == 0)<a name="line.385"></a>
+<span class="sourceLineNo">386</span> return "No properties detected on bean class";<a name="line.386"></a>
<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span> if (sortProperties)<a name="line.388"></a>
-<span class="sourceLineNo">389</span> properties = new TreeMap<>();<a name="line.389"></a>
-<span class="sourceLineNo">390</span> else<a name="line.390"></a>
-<span class="sourceLineNo">391</span> properties = new LinkedHashMap<>();<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span> if (beanFilter != null && beanFilter.getTypeName() != null)<a name="line.393"></a>
-<span class="sourceLineNo">394</span> dictionaryName = beanFilter.getTypeName();<a name="line.394"></a>
-<span class="sourceLineNo">395</span> if (dictionaryName == null)<a name="line.395"></a>
-<span class="sourceLineNo">396</span> dictionaryName = findDictionaryName(this.classMeta);<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span> for (Map.Entry<String,BeanPropertyMeta.Builder> e : normalProps.entrySet()) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> BeanPropertyMeta pMeta = e.getValue().build();<a name="line.399"></a>
-<span class="sourceLineNo">400</span> if (pMeta.isDyna())<a name="line.400"></a>
-<span class="sourceLineNo">401</span> dynaProperty = pMeta;<a name="line.401"></a>
-<span class="sourceLineNo">402</span> properties.put(e.getKey(), pMeta);<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span> // If a beanFilter is defined, look for inclusion and exclusion lists.<a name="line.405"></a>
-<span class="sourceLineNo">406</span> if (beanFilter != null) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span> // Eliminated excluded properties if BeanFilter.excludeKeys is specified.<a name="line.408"></a>
-<span class="sourceLineNo">409</span> String[] includeKeys = beanFilter.getProperties();<a name="line.409"></a>
-<span class="sourceLineNo">410</span> String[] excludeKeys = beanFilter.getExcludeProperties();<a name="line.410"></a>
-<span class="sourceLineNo">411</span> if (excludeKeys != null && excludeProperties == null) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span> for (String k : excludeKeys)<a name="line.412"></a>
-<span class="sourceLineNo">413</span> properties.remove(k);<a name="line.413"></a>
-<span class="sourceLineNo">414</span><a name="line.414"></a>
-<span class="sourceLineNo">415</span> // Only include specified properties if BeanFilter.includeKeys is specified.<a name="line.415"></a>
-<span class="sourceLineNo">416</span> // Note that the order must match includeKeys.<a name="line.416"></a>
-<span class="sourceLineNo">417</span> } else if (includeKeys != null) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span> Map<String,BeanPropertyMeta> properties2 = new LinkedHashMap<>();<a name="line.418"></a>
-<span class="sourceLineNo">419</span> for (String k : includeKeys) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span> if (properties.containsKey(k))<a name="line.420"></a>
-<span class="sourceLineNo">421</span> properties2.put(k, properties.get(k));<a name="line.421"></a>
-<span class="sourceLineNo">422</span> }<a name="line.422"></a>
-<span class="sourceLineNo">423</span> properties = properties2;<a name="line.423"></a>
-<span class="sourceLineNo">424</span> }<a name="line.424"></a>
-<span class="sourceLineNo">425</span> }<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span> if (excludeProperties != null)<a name="line.427"></a>
-<span class="sourceLineNo">428</span> for (String ep : excludeProperties)<a name="line.428"></a>
-<span class="sourceLineNo">429</span> properties.remove(ep);<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> if (pNames != null) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span> Map<String,BeanPropertyMeta> properties2 = new LinkedHashMap<>();<a name="line.432"></a>
-<span class="sourceLineNo">433</span> for (String k : pNames) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span> if (properties.containsKey(k))<a name="line.434"></a>
-<span class="sourceLineNo">435</span> properties2.put(k, properties.get(k));<a name="line.435"></a>
-<span class="sourceLineNo">436</span> }<a name="line.436"></a>
-<span class="sourceLineNo">437</span> properties = properties2;<a name="line.437"></a>
-<span class="sourceLineNo">438</span> }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span> } catch (BeanRuntimeException e) {<a name="line.440"></a>
-<span class="sourceLineNo">441</span> throw e;<a name="line.441"></a>
-<span class="sourceLineNo">442</span> } catch (Exception e) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> return "Exception: " + getStackTrace(e);<a name="line.443"></a>
-<span class="sourceLineNo">444</span> }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span> return null;<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span> private String findDictionaryName(ClassMeta<?> cm) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span> BeanRegistry br = cm.getBeanRegistry();<a name="line.450"></a>
-<span class="sourceLineNo">451</span> if (br != null) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> String s = br.getTypeName(this.classMeta);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> if (s != null)<a name="line.453"></a>
-<span class="sourceLineNo">454</span> return s;<a name="line.454"></a>
-<span class="sourceLineNo">455</span> }<a name="line.455"></a>
-<span class="sourceLineNo">456</span> Class<?> pcm = cm.innerClass.getSuperclass();<a name="line.456"></a>
-<span class="sourceLineNo">457</span> if (pcm != null) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span> String s = findDictionaryName(ctx.getClassMeta(pcm));<a name="line.458"></a>
-<span class="sourceLineNo">459</span> if (s != null)<a name="line.459"></a>
-<span class="sourceLineNo">460</span> return s;<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span> for (Class<?> icm : cm.innerClass.getInterfaces()) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> String s = findDictionaryName(ctx.getClassMeta(icm));<a name="line.463"></a>
-<span class="sourceLineNo">464</span> if (s != null)<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return s;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span> return null;<a name="line.467"></a>
-<span class="sourceLineNo">468</span> }<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span> /*<a name="line.470"></a>
-<span class="sourceLineNo">471</span> * Returns the property name of the specified field if it's a valid property.<a name="line.471"></a>
-<span class="sourceLineNo">472</span> * Returns null if the field isn't a valid property.<a name="line.472"></a>
-<span class="sourceLineNo">473</span> */<a name="line.473"></a>
-<span class="sourceLineNo">474</span> private String findPropertyName(Field f, Set<String> fixedBeanProps) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span> BeanProperty bp = f.getAnnotation(BeanProperty.class);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> String name = bpName(bp);<a name="line.476"></a>
-<span class="sourceLineNo">477</span> if (isNotEmpty(name)) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span> if (fixedBeanProps.isEmpty() || fixedBeanProps.contains(name))<a name="line.478"></a>
-<span class="sourceLineNo">479</span> return name;<a name="line.479"></a>
-<span class="sourceLineNo">480</span> return null; // Could happen if filtered via BEAN_includeProperties/BEAN_excludeProperties.<a name="line.480"></a>
-<span class="sourceLineNo">481</span> }<a name="line.481"></a>
-<span class="sourceLineNo">482</span> name = propertyNamer.getPropertyName(f.getName());<a name="line.482"></a>
-<span class="sourceLineNo">483</span> if (fixedBeanProps.isEmpty() || fixedBeanProps.contains(name))<a name="line.483"></a>
-<span class="sourceLineNo">484</span> return name;<a name="line.484"></a>
-<span class="sourceLineNo">485</span> return null;<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span> }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> /**<a name="line.489"></a>
-<span class="sourceLineNo">490</span> * Returns the {@link ClassMeta} of this bean.<a name="line.490"></a>
-<span class="sourceLineNo">491</span> *<a name="line.491"></a>
-<span class="sourceLineNo">492</span> * @return The {@link ClassMeta} of this bean.<a name="line.492"></a>
-<span class="sourceLineNo">493</span> */<a name="line.493"></a>
-<span class="sourceLineNo">494</span> @BeanIgnore<a name="line.494"></a>
-<span class="sourceLineNo">495</span> public final ClassMeta<T> getClassMeta() {<a name="line.495"></a>
-<span class="sourceLineNo">496</span> return classMeta;<a name="line.496"></a>
-<span class="sourceLineNo">497</span> }<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span> /**<a name="line.499"></a>
-<span class="sourceLineNo">500</span> * Returns the dictionary name for this bean as defined through the {@link Bean#typeName() @Bean(typeName)} annotation.<a name="line.500"></a>
-<span class="sourceLineNo">501</span> *<a name="line.501"></a>
-<span class="sourceLineNo">502</span> * @return The dictionary name for this bean, or <jk>null</jk> if it has no dictionary name defined.<a name="line.502"></a>
-<span class="sourceLineNo">503</span> */<a name="line.503"></a>
-<span class="sourceLineNo">504</span> public final String getDictionaryName() {<a name="line.504"></a>
-<span class="sourceLineNo">505</span> return dictionaryName;<a name="line.505"></a>
-<span class="sourceLineNo">506</span> }<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span> /**<a name="line.508"></a>
-<span class="sourceLineNo">509</span> * Returns a mock bean property that resolves to the name <js>"_type"</js> and whose value always resolves to the<a name="line.509"></a>
-<span class="sourceLineNo">510</span> * dictionary name of the bean.<a name="line.510"></a>
-<span class="sourceLineNo">511</span> *<a name="line.511"></a>
-<span class="sourceLineNo">512</span> * @return The type name property.<a name="line.512"></a>
-<span class="sourceLineNo">513</span> */<a name="line.513"></a>
-<span class="sourceLineNo">514</span> public final BeanPropertyMeta getTypeProperty() {<a name="line.514"></a>
-<span class="sourceLineNo">515</span> return typeProperty;<a name="line.515"></a>
-<span class="sourceLineNo">516</span> }<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> /**<a name="line.518"></a>
-<span class="sourceLineNo">519</span> * Possible property method types.<a name="line.519"></a>
-<span class="sourceLineNo">520</span> */<a name="line.520"></a>
-<span class="sourceLineNo">521</span> static enum MethodType {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> UNKNOWN,<a name="line.522"></a>
-<span class="sourceLineNo">523</span> GETTER,<a name="line.523"></a>
-<span class="sourceLineNo">524</span> SETTER,<a name="line.524"></a>
-<span class="sourceLineNo">525</span> EXTRAKEYS;<a name="line.525"></a>
-<span class="sourceLineNo">526</span> }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span> /*<a name="line.528"></a>
-<span class="sourceLineNo">529</span> * Temporary getter/setter method struct.<a name="line.529"></a>
-<span class="sourceLineNo">530</span> */<a name="line.530"></a>
-<span class="sourceLineNo">531</span> private static final class BeanMethod {<a name="line.531"></a>
-<span class="sourceLineNo">532</span> String propertyName;<a name="line.532"></a>
-<span class="sourceLineNo">533</span> MethodType methodType;<a name="line.533"></a>
-<span class="sourceLineNo">534</span> Method method;<a name="line.534"></a>
-<span class="sourceLineNo">535</span> Class<?> type;<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span> BeanMethod(String propertyName, MethodType type, Method method) {<a name="line.537"></a>
-<span class="sourceLineNo">538</span> this.propertyName = propertyName;<a name="line.538"></a>
-<span class="sourceLineNo">539</span> this.methodType = type;<a name="line.539"></a>
-<span class="sourceLineNo">540</span> this.method = method;<a name="line.540"></a>
-<span class="sourceLineNo">541</span> if (type == MethodType.SETTER)<a name="line.541"></a>
-<span class="sourceLineNo">542</span> this.type = method.getParameterTypes()[0];<a name="line.542"></a>
-<span class="sourceLineNo">543</span> else<a name="line.543"></a>
-<span class="sourceLineNo">544</span> this.type = method.getReturnType();<a name="line.544"></a>
-<span class="sourceLineNo">545</span> }<a name="line.545"></a>
-<span class="sourceLineNo">546</span><a name="line.546"></a>
-<span class="sourceLineNo">547</span> /*<a name="line.547"></a>
-<span class="sourceLineNo">548</span> * Returns true if this method matches the class type of the specified property.<a name="line.548"></a>
-<span class="sourceLineNo">549</span> * Only meant to be used for setters.<a name="line.549"></a>
-<span class="sourceLineNo">550</span> */<a name="line.550"></a>
-<span class="sourceLineNo">551</span> boolean matchesPropertyType(BeanPropertyMeta.Builder b) {<a name="line.551"></a>
-<span class="sourceLineNo">552</span> if (b == null)<a name="line.552"></a>
-<span class="sourceLineNo">553</span> return false;<a name="line.553"></a>
-<span class="sourceLineNo">554</span><a name="line.554"></a>
-<span class="sourceLineNo">555</span> // Don't do further validation if this is the "*" bean property.<a name="line.555"></a>
-<span class="sourceLineNo">556</span> if ("*".equals(b.name))<a name="line.556"></a>
-<span class="sourceLineNo">557</span> return true;<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span> // Get the bean property type from the getter/field.<a name="line.559"></a>
-<span class="sourceLineNo">560</span> Class<?> pt = null;<a name="line.560"></a>
-<span class="sourceLineNo">561</span> if (b.getter != null)<a name="line.561"></a>
-<span class="sourceLineNo">562</span> pt = b.getter.getReturnType();<a name="line.562"></a>
-<span class="sourceLineNo">563</span> else if (b.field != null)<a name="line.563"></a>
-<span class="sourceLineNo">564</span> pt = b.field.getType();<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span> // Matches if only a setter is defined.<a name="line.566"></a>
-<span class="sourceLineNo">567</span> if (pt == null)<a name="line.567"></a>
-<span class="sourceLineNo">568</span> return true;<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span> // Doesn't match if not same type or super type as getter/field.<a name="line.570"></a>
-<span class="sourceLineNo">571</span> if (! isParentClass(type, pt))<a name="line.571"></a>
-<span class="sourceLineNo">572</span> return false;<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span> // If a setter was previously set, only use this setter if it's a closer<a name="line.574"></a>
-<span class="sourceLineNo">575</span> // match (e.g. prev type is a superclass of this type).<a name="line.575"></a>
-<span class="sourceLineNo">576</span> if (b.setter == null)<a name="line.576"></a>
-<span class="sourceLineNo">577</span> return true;<a name="line.577"></a>
-<span class="sourceLineNo">578</span><a name="line.578"></a>
-<span class="sourceLineNo">579</span> Class<?> prevType = b.setter.getParameterTypes()[0];<a name="line.579"></a>
-<span class="sourceLineNo">580</span> return isParentClass(prevType, type, true);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span> @Override /* Object */<a name="line.583"></a>
-<span class="sourceLineNo">584</span> public String toString() {<a name="line.584"></a>
-<span class="sourceLineNo">585</span> return method.toString();<a name="line.585"></a>
-<span class="sourceLineNo">586</span> }<a name="line.586"></a>
-<span class="sourceLineNo">587</span> }<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span> /*<a name="line.589"></a>
-<span class="sourceLineNo">590</span> * Find all the bean methods on this class.<a name="line.590"></a>
-<span class="sourceLineNo">591</span> *<a name="line.591"></a>
-<span class="sourceLineNo">592</span> * @param c The transformed class.<a name="line.592"></a>
-<span class="sourceLineNo">593</span> * @param stopClass Don't look above this class in the hierarchy.<a name="line.593"></a>
-<span class="sourceLineNo">594</span> * @param v The minimum method visibility.<a name="line.594"></a>
-<span class="sourceLineNo">595</span> * @param fixedBeanProps Only include methods whose properties are in this list.<a name="line.595"></a>
-<span class="sourceLineNo">596</span> * @param pn Use this property namer to determine property names from the method names.<a name="line.596"></a>
-<span class="sourceLineNo">597</span> */<a name="line.597"></a>
-<span class="sourceLineNo">598</span> static final List<BeanMethod> findBeanMethods(Class<?> c, Class<?> stopClass, Visibility v, Set<String> fixedBeanProps, Set<String> filterProps, PropertyNamer pn, boolean fluentSetters) {<a name="line.598"></a>
-<span class="sourceLineNo">599</span> List<BeanMethod> l = new LinkedList<>();<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span> for (Class<?> c2 : findClasses(c, stopClass)) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span> for (Method m : c2.getDeclaredMethods()) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span> if (isStatic(m))<a name="line.603"></a>
-<span class="sourceLineNo">604</span> continue;<a name="line.604"></a>
-<span class="sourceLineNo">605</span> if (m.isBridge()) // This eliminates methods with covariant return types from parent classes on child classes.<a name="line.605"></a>
+<span class="sourceLineNo">388</span> sortProperties = (ctx.isSortProperties() || (beanFilter != null && beanFilter.isSortProperties())) && fixedBeanProps.isEmpty();<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span> if (sortProperties)<a name="line.390"></a>
+<span class="sourceLineNo">391</span> properties = new TreeMap<>();<a name="line.391"></a>
+<span class="sourceLineNo">392</span> else<a name="line.392"></a>
+<span class="sourceLineNo">393</span> properties = new LinkedHashMap<>();<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span> if (beanFilter != null && beanFilter.getTypeName() != null)<a name="line.395"></a>
+<span class="sourceLineNo">396</span> dictionaryName = beanFilter.getTypeName();<a name="line.396"></a>
+<span class="sourceLineNo">397</span> if (dictionaryName == null)<a name="line.397"></a>
+<span class="sourceLineNo">398</span> dictionaryName = findDictionaryName(this.classMeta);<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span> for (Map.Entry<String,BeanPropertyMeta.Builder> e : normalProps.entrySet()) {<a name="line.400"></a>
+<span class="sourceLineNo">401</span> BeanPropertyMeta pMeta = e.getValue().build();<a name="line.401"></a>
+<span class="sourceLineNo">402</span> if (pMeta.isDyna())<a name="line.402"></a>
+<span class="sourceLineNo">403</span> dynaProperty = pMeta;<a name="line.403"></a>
+<span class="sourceLineNo">404</span> properties.put(e.getKey(), pMeta);<a name="line.404"></a>
+<span class="sourceLineNo">405</span> }<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span> // If a beanFilter is defined, look for inclusion and exclusion lists.<a name="line.407"></a>
+<span class="sourceLineNo">408</span> if (beanFilter != null) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span> // Eliminated excluded properties if BeanFilter.excludeKeys is specified.<a name="line.410"></a>
+<span class="sourceLineNo">411</span> String[] includeKeys = beanFilter.getProperties();<a name="line.411"></a>
+<span class="sourceLineNo">412</span> String[] excludeKeys = beanFilter.getExcludeProperties();<a name="line.412"></a>
+<span class="sourceLineNo">413</span> if (excludeKeys != null && excludeProperties == null) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span> for (String k : excludeKeys)<a name="line.414"></a>
+<span class="sourceLineNo">415</span> properties.remove(k);<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span> // Only include specified properties if BeanFilter.includeKeys is specified.<a name="line.417"></a>
+<span class="sourceLineNo">418</span> // Note that the order must match includeKeys.<a name="line.418"></a>
+<span class="sourceLineNo">419</span> } else if (includeKeys != null) {<a name="line.419"></a>
+<span class="sourceLineNo">420</span> Map<String,BeanPropertyMeta> properties2 = new LinkedHashMap<>();<a name="line.420"></a>
+<span class="sourceLineNo">421</span> for (String k : includeKeys) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span> if (properties.containsKey(k))<a name="line.422"></a>
+<span class="sourceLineNo">423</span> properties2.put(k, properties.get(k));<a name="line.423"></a>
+<span class="sourceLineNo">424</span> }<a name="line.424"></a>
+<span class="sourceLineNo">425</span> properties = properties2;<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
+<span class="sourceLineNo">427</span> }<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span> if (excludeProperties != null)<a name="line.429"></a>
+<span class="sourceLineNo">430</span> for (String ep : excludeProperties)<a name="line.430"></a>
+<span class="sourceLineNo">431</span> properties.remove(ep);<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span> if (pNames != null) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span> Map<String,BeanPropertyMeta> properties2 = new LinkedHashMap<>();<a name="line.434"></a>
+<span class="sourceLineNo">435</span> for (String k : pNames) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span> if (properties.containsKey(k))<a name="line.436"></a>
+<span class="sourceLineNo">437</span> properties2.put(k, properties.get(k));<a name="line.437"></a>
+<span class="sourceLineNo">438</span> }<a name="line.438"></a>
+<span class="sourceLineNo">439</span> properties = properties2;<a name="line.439"></a>
+<span class="sourceLineNo">440</span> }<a name="line.440"></a>
+<span class="sourceLineNo">441</span><a name="line.441"></a>
+<span class="sourceLineNo">442</span> } catch (BeanRuntimeException e) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span> throw e;<a name="line.443"></a>
+<span class="sourceLineNo">444</span> } catch (Exception e) {<a name="line.444"></a>
+<span class="sourceLineNo">445</span> return "Exception: " + getStackTrace(e);<a name="line.445"></a>
+<span class="sourceLineNo">446</span> }<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span> return null;<a name="line.448"></a>
+<span class="sourceLineNo">449</span> }<a name="line.449"></a>
+<span class="sourceLineNo">450</span><a name="line.450"></a>
+<span class="sourceLineNo">451</span> private String findDictionaryName(ClassMeta<?> cm) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span> BeanRegistry br = cm.getBeanRegistry();<a name="line.452"></a>
+<span class="sourceLineNo">453</span> if (br != null) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span> String s = br.getTypeName(this.classMeta);<a name="line.454"></a>
+<span class="sourceLineNo">455</span> if (s != null)<a name="line.455"></a>
+<span class="sourceLineNo">456</span> return s;<a name="line.456"></a>
+<span class="sourceLineNo">457</span> }<a name="line.457"></a>
+<span class="sourceLineNo">458</span> Class<?> pcm = cm.innerClass.getSuperclass();<a name="line.458"></a>
+<span class="sourceLineNo">459</span> if (pcm != null) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span> String s = findDictionaryName(ctx.getClassMeta(pcm));<a name="line.460"></a>
+<span class="sourceLineNo">461</span> if (s != null)<a name="line.461"></a>
+<span class="sourceLineNo">462</span> return s;<a name="line.462"></a>
+<span class="sourceLineNo">463</span> }<a name="line.463"></a>
+<span class="sourceLineNo">464</span> for (Class<?> icm : cm.innerClass.getInterfaces()) {<a name="line.464"></a>
+<span class="sourceLineNo">465</span> String s = findDictionaryName(ctx.getClassMeta(icm));<a name="line.465"></a>
+<span class="sourceLineNo">466</span> if (s != null)<a name="line.466"></a>
+<span class="sourceLineNo">467</span> return s;<a name="line.467"></a>
+<span class="sourceLineNo">468</span> }<a name="line.468"></a>
+<span class="sourceLineNo">469</span> return null;<a name="line.469"></a>
+<span class="sourceLineNo">470</span> }<a name="line.470"></a>
+<span class="sourceLineNo">471</span><a name="line.471"></a>
+<span class="sourceLineNo">472</span> /*<a name="line.472"></a>
+<span class="sourceLineNo">473</span> * Returns the property name of the specified field if it's a valid property.<a name="line.473"></a>
+<span class="sourceLineNo">474</span> * Returns null if the field isn't a valid property.<a name="line.474"></a>
+<span class="sourceLineNo">475</span> */<a name="line.475"></a>
+<span class="sourceLineNo">476</span> private String findPropertyName(Field f, Set<String> fixedBeanProps) {<a name="line.476"></a>
+<span class="sourceLineNo">477</span> BeanProperty bp = f.getAnnotation(BeanProperty.class);<a name="line.477"></a>
+<span class="sourceLineNo">478</span> String name = bpName(bp);<a name="line.478"></a>
+<span class="sourceLineNo">479</span> if (isNotEmpty(name)) {<a name="line.479"></a>
+<span class="sourceLineNo">480</span> if (fixedBeanProps.isEmpty() || fixedBeanProps.contains(name))<a name="line.480"></a>
+<span class="sourceLineNo">481</span> return name;<a name="line.481"></a>
+<span class="sourceLineNo">482</span> return null; // Could happen if filtered via BEAN_includeProperties/BEAN_excludeProperties.<a name="line.482"></a>
+<span class="sourceLineNo">483</span> }<a name="line.483"></a>
+<span class="sourceLineNo">484</span> name = propertyNamer.getPropertyName(f.getName());<a name="line.484"></a>
+<span class="sourceLineNo">485</span> if (fixedBeanProps.isEmpty() || fixedBeanProps.contains(name))<a name="line.485"></a>
+<span class="sourceLineNo">486</span> return name;<a name="line.486"></a>
+<span class="sourceLineNo">487</span> return null;<a name="line.487"></a>
+<span class="sourceLineNo">488</span> }<a name="line.488"></a>
+<span class="sourceLineNo">489</span> }<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span> /**<a name="line.491"></a>
+<span class="sourceLineNo">492</span> * Returns the {@link ClassMeta} of this bean.<a name="line.492"></a>
+<span class="sourceLineNo">493</span> *<a name="line.493"></a>
+<span class="sourceLineNo">494</span> * @return The {@link ClassMeta} of this bean.<a name="line.494"></a>
+<span class="sourceLineNo">495</span> */<a name="line.495"></a>
+<span class="sourceLineNo">496</span> @BeanIgnore<a name="line.496"></a>
+<span class="sourceLineNo">497</span> public final ClassMeta<T> getClassMeta() {<a name="line.497"></a>
+<span class="sourceLineNo">498</span> return classMeta;<a name="line.498"></a>
+<span class="sourceLineNo">499</span> }<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span> /**<a name="line.501"></a>
+<span class="sourceLineNo">502</span> * Returns the dictionary name for this bean as defined through the {@link Bean#typeName() @Bean(typeName)} annotation.<a name="line.502"></a>
+<span class="sourceLineNo">503</span> *<a name="line.503"></a>
+<span class="sourceLineNo">504</span> * @return The dictionary name for this bean, or <jk>null</jk> if it has no dictionary name defined.<a name="line.504"></a>
+<span class="sourceLineNo">505</span> */<a name="line.505"></a>
+<span class="sourceLineNo">506</span> public final String getDictionaryName() {<a name="line.506"></a>
+<span class="sourceLineNo">507</span> return dictionaryName;<a name="line.507"></a>
+<span class="sourceLineNo">508</span> }<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span> /**<a name="line.510"></a>
+<span class="sourceLineNo">511</span> * Returns a mock bean property that resolves to the name <js>"_type"</js> and whose value always resolves to the<a name="line.511"></a>
+<span class="sourceLineNo">512</span> * dictionary name of the bean.<a name="line.512"></a>
+<span class="sourceLineNo">513</span> *<a name="line.513"></a>
+<span class="sourceLineNo">514</span> * @return The type name property.<a name="line.514"></a>
+<span class="sourceLineNo">515</span> */<a name="line.515"></a>
+<span class="sourceLineNo">516</span> public final BeanPropertyMeta getTypeProperty() {<a name="line.516"></a>
+<span class="sourceLineNo">517</span> return typeProperty;<a name="line.517"></a>
+<span class="sourceLineNo">518</span> }<a name="line.518"></a>
+<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">520</span> /**<a name="line.520"></a>
+<span class="sourceLineNo">521</span> * Possible property method types.<a name="line.521"></a>
+<span class="sourceLineNo">522</span> */<a name="line.522"></a>
+<span class="sourceLineNo">523</span> static enum MethodType {<a name="line.523"></a>
+<span class="sourceLineNo">524</span> UNKNOWN,<a name="line.524"></a>
+<span class="sourceLineNo">525</span> GETTER,<a name="line.525"></a>
+<span class="sourceLineNo">526</span> SETTER,<a name="line.526"></a>
+<span class="sourceLineNo">527</span> EXTRAKEYS;<a name="line.527"></a>
+<span class="sourceLineNo">528</span> }<a name="line.528"></a>
+<span class="sourceLineNo">529</span><a name="line.529"></a>
+<span class="sourceLineNo">530</span> /*<a name="line.530"></a>
+<span class="sourceLineNo">531</span> * Temporary getter/setter method struct.<a name="line.531"></a>
+<span class="sourceLineNo">532</span> */<a name="line.532"></a>
+<span class="sourceLineNo">533</span> private static final class BeanMethod {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> String propertyName;<a name="line.534"></a>
+<span class="sourceLineNo">535</span> MethodType methodType;<a name="line.535"></a>
+<span class="sourceLineNo">536</span> Method method;<a name="line.536"></a>
+<span class="sourceLineNo">537</span> Class<?> type;<a name="line.537"></a>
+<span class="sourceLineNo">538</span><a name="line.538"></a>
+<span class="sourceLineNo">539</span> BeanMethod(String propertyName, MethodType type, Method method) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span> this.propertyName = propertyName;<a name="line.540"></a>
+<span class="sourceLineNo">541</span> this.methodType = type;<a name="line.541"></a>
+<span class="sourceLineNo">542</span> this.method = method;<a name="line.542"></a>
+<span class="sourceLineNo">543</span> if (type == MethodType.SETTER)<a name="line.543"></a>
+<span class="sourceLineNo">544</span> this.type = method.getParameterTypes()[0];<a name="line.544"></a>
+<span class="sourceLineNo">545</span> else<a name="line.545"></a>
+<span class="sourceLineNo">546</span> this.type = method.getReturnType();<a name="line.546"></a>
+<span class="sourceLineNo">547</span> }<a name="line.547"></a>
+<span class="sourceLineNo">548</span><a name="line.548"></a>
+<span class="sourceLineNo">549</span> /*<a name="line.549"></a>
+<span class="sourceLineNo">550</span> * Returns true if this method matches the class type of the specified property.<a name="line.550"></a>
+<span class="sourceLineNo">551</span> * Only meant to be used for setters.<a name="line.551"></a>
+<span class="sourceLineNo">552</span> */<a name="line.552"></a>
+<span class="sourceLineNo">553</span> boolean matchesPropertyType(BeanPropertyMeta.Builder b) {<a name="line.553"></a>
+<span class="sourceLineNo">554</span> if (b == null)<a name="line.554"></a>
+<span class="sourceLineNo">555</span> return false;<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span> // Don't do further validation if this is the "*" bean property.<a name="line.557"></a>
+<span class="sourceLineNo">558</span> if ("*".equals(b.name))<a name="line.558"></a>
+<span class="sourceLineNo">559</span> return true;<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span> // Get the bean property type from the getter/field.<a name="line.561"></a>
+<span class="sourceLineNo">562</span> Class<?> pt = null;<a name="line.562"></a>
+<span class="sourceLineNo">563</span> if (b.getter != null)<a name="line.563"></a>
+<span class="sourceLineNo">564</span> pt = b.getter.getReturnType();<a name="line.564"></a>
+<span class="sourceLineNo">565</span> else if (b.field != null)<a name="line.565"></a>
+<span class="sourceLineNo">566</span> pt = b.field.getType();<a name="line.566"></a>
+<span class="sourceLineNo">567</span><a name="line.567"></a>
+<span class="sourceLineNo">568</span> // Matches if only a setter is defined.<a name="line.568"></a>
+<span class="sourceLineNo">569</span> if (pt == null)<a name="line.569"></a>
+<span class="sourceLineNo">570</span> return true;<a name="line.570"></a>
+<span class="sourceLineNo">571</span><a name="line.571"></a>
+<span class="sourceLineNo">572</span> // Doesn't match if not same type or super type as getter/field.<a name="line.572"></a>
+<span class="sourceLineNo">573</span> if (! isParentClass(type, pt))<a name="line.573"></a>
+<span class="sourceLineNo">574</span> return false;<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span> // If a setter was previously set, only use this setter if it's a closer<a name="line.576"></a>
+<span class="sourceLineNo">577</span> // match (e.g. prev type is a superclass of this type).<a name="line.577"></a>
+<span class="sourceLineNo">578</span> if (b.setter == null)<a name="line.578"></a>
+<span class="sourceLineNo">579</span> return true;<a name="line.579"></a>
+<span class="sourceLineNo">580</span><a name="line.580"></a>
+<span class="sourceLineNo">581</span> Class<?> prevType = b.setter.getParameterTypes()[0];<a name="line.581"></a>
+<span class="sourceLineNo">582</span> return isParentClass(prevType, type, true);<a name="line.582"></a>
+<span class="sourceLineNo">583</span> }<a name="line.583"></a>
+<span class="sourceLineNo">584</span><a name="line.584"></a>
+<span class="sourceLineNo">585</span> @Override /* Object */<a name="line.585"></a>
+<span class="sourceLineNo">586</span> public String toString() {<a name="line.586"></a>
+<span class="sourceLineNo">587</span> return method.toString();<a name="line.587"></a>
+<span class="sourceLineNo">588</span> }<a name="line.588"></a>
+<span class="sourceLineNo">589</span> }<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span> /*<a name="line.591"></a>
+<span class="sourceLineNo">592</span> * Find all the bean methods on this class.<a name="line.592"></a>
+<span class="sourceLineNo">593</span> *<a name="line.593"></a>
+<span class="sourceLineNo">594</span> * @param c The transformed class.<a name="line.594"></a>
+<span class="sourceLineNo">595</span> * @param stopClass Don't look above this class in the hierarchy.<a name="line.595"></a>
+<span class="sourceLineNo">596</span> * @param v The minimum method visibility.<a name="line.596"></a>
+<span class="sourceLineNo">597</span> * @param fixedBeanProps Only include methods whose properties are in this list.<a name="line.597"></a>
+<span class="sourceLineNo">598</span> * @param pn Use this property namer to determine property names from the method names.<a name="line.598"></a>
+<span class="sourceLineNo">599</span> */<a name="line.599"></a>
+<span class="sourceLineNo">600</span> static final List<BeanMethod> findBeanMethods(Class<?> c, Class<?> stopClass, Visibility v, Set<String> fixedBeanProps, Set<String> filterProps, PropertyNamer pn, boolean fluentSetters) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span> List<BeanMethod> l = new LinkedList<>();<a name="line.601"></a>
+<span class="sourceLineNo">602</span><a name="line.602"></a>
+<span class="sourceLineNo">603</span> for (Class<?> c2 : findClasses(c, stopClass)) {<a name="line.603"></a>
+<span class="sourceLineNo">604</span> for (Method m : c2.getDeclaredMethods()) {<a name="line.604"></a>
+<span class="sourceLineNo">605</span> if (isStatic(m))<a name="line.605"></a>
<span class="sourceLineNo">606</span> continue;<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span> BeanIgnore bi = getAnnotation(BeanIgnore.class, m);<a name="line.608"></a>
-<span class="sourceLineNo">609</span> if (bi != null)<a name="line.609"></a>
-<span class="sourceLineNo">610</span> continue;<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span> BeanProperty bp = getAnnotation(BeanProperty.class, m);<a name="line.612"></a>
-<span class="sourceLineNo">613</span> if (! (v.isVisible(m) || bp != null))<a name="line.613"></a>
-<span class="sourceLineNo">614</span> continue;<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span> String n = m.getName();<a name="line.616"></a>
+<span class="sourceLineNo">607</span> if (m.isBridge()) // This eliminates methods with covariant return types from parent classes on child classes.<a name="line.607"></a>
+<span class="sourceLineNo">608</span> continue;<a name="line.608"></a>
+<span class="sourceLineNo">609</span><a name="line.609"></a>
+<span class="sourceLineNo">610</span> BeanIgnore bi = getAnnotation(BeanIgnore.class, m);<a name="line.610"></a>
+<span class="sourceLineNo">611</span> if (bi != null)<a name="line.611"></a>
+<span class="sourceLineNo">612</span> continue;<a name="line.612"></a>
+<span class="sourceLineNo">613</span><a name="line.613"></a>
+<span class="sourceLineNo">614</span> BeanProperty bp = getAnnotation(BeanProperty.class, m);<a name="line.614"></a>
+<span class="sourceLineNo">615</span> if (! (v.isVisible(m) || bp != null))<a name="line.615"></a>
+<span class="sourceLineNo">616</span> continue;<a name="line.616"></a>
<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span> Class<?>[] pt = m.getParameterTypes();<a name="line.618"></a>
-<span class="sourceLineNo">619</span> Class<?> rt = m.getReturnType();<a name="line.619"></a>
-<span class="sourceLineNo">620</span> MethodType methodType = UNKNOWN;<a name="line.620"></a>
-<span class="sourceLineNo">621</span> String bpName = bpName(bp);<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span> if (! (isEmpty(bpName) || filterProps.isEmpty() || filterProps.contains(bpName)))<a name="line.623"></a>
-<span class="sourceLineNo">624</span> throw new BeanRuntimeException(c, "Found @BeanProperty(\"{0}\") but name was not found in @Bean(properties)", bpName);<a name="line.624"></a>
-<span class="sourceLineNo">625</span><a name="line.625"></a>
-<span class="sourceLineNo">626</span> if (pt.length == 0) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span> if ("*".equals(bpName)) {<a name="line.627"></a>
-<span class="sourceLineNo">628</span> if (isParentClass(Collection.class, rt)) {<a name="line.628"></a>
-<span class="sourceLineNo">629</span> methodType = EXTRAKEYS;<a name="line.629"></a>
-<span class="sourceLineNo">630</span> } else if (isParentClass(Map.class, rt)) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span> methodType = GETTER;<a name="line.631"></a>
-<span class="sourceLineNo">632</span> }<a name="line.632"></a>
-<span class="sourceLineNo">633</span> n = bpName;<a name="line.633"></a>
-<span class="sourceLineNo">634</span> } else if (n.startsWith("get") && (! rt.equals(Void.TYPE))) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span> methodType = GETTER;<a name="line.635"></a>
-<span class="sourceLineNo">636</span> n = n.substring(3);<a name="line.636"></a>
-<span class="sourceLineNo">637</span> } else if (n.startsWith("is") && (rt.equals(Boolean.TYPE) || rt.equals(Boolean.class))) {<a name="line.637"></a>
-<span class="sourceLineNo">638</span> methodType = GETTER;<a name="line.638"></a>
-<span class="sourceLineNo">639</span> n = n.substring(2);<a name="line.639"></a>
-<span class="sourceLineNo">640</span> } else if (bpName != null) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span> methodType = GETTER;<a name="line.641"></a>
-<span class="sourceLineNo">642</span> if (bpName.isEmpty()) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span> if (n.startsWith("get"))<a name="line.643"></a>
-<span class="sourceLineNo">644</span> n = n.substring(3);<a name="line.644"></a>
-<span class="sourceLineNo">645</span> else if (n.startsWith("is"))<a name="line.645"></a>
-<span class="sourceLineNo">646</span> n = n.substring(2);<a name="line.646"></a>
-<span class="sourceLineNo">647</span> bpName = n;<a name="line.647"></a>
-<span class="sourceLineNo">648</span> } else {<a name="line.648"></a>
-<span class="sourceLineNo">649</span> n = bpName;<a name="line.649"></a>
-<span class="sourceLineNo">650</span> }<a name="line.650"></a>
-<span class="sourceLineNo">651</span> }<a name="line.651"></a>
-<span class="sourceLineNo">652</span> } else if (pt.length == 1) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span> if ("*".equals(bpName)) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span> if (isParentClass(Map.class, pt[0])) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span> methodType = SETTER;<a name="line.655"></a>
-<span class="sourceLineNo">656</span> n = bpName;<a name="line.656"></a>
-<span class="sourceLineNo">657</span> } else if (pt[0] == String.class) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span> methodType = GETTER;<a name="line.658"></a>
-<span class="sourceLineNo">659</span> n = bpName;<a name="line.659"></a>
-<span class="sourceLineNo">660</span> }<a name="line.660"></a>
-<span class="sourceLineNo">661</span> } else if (n.startsWith("set") && (isParentClass(rt, c) || rt.equals(Void.TYPE))) {<a name="line.661"></a>
-<span class="sourceLineNo">662</span> methodType = SETTER;<a name="line.662"></a>
-<span class="sourceLineNo">663</span> n = n.substring(3);<a name="line.663"></a>
-<span class="sourceLineNo">664</span> } else if (bpName != null) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span> methodType = SETTER;<a name="line.665"></a>
-<span class="sourceLineNo">666</span> if (bpName.isEmpty()) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span> if (n.startsWith("set"))<a name="line.667"></a>
-<span class="sourceLineNo">668</span> n = n.substring(3);<a name="line.668"></a>
-<span class="sourceLineNo">669</span> bpName = n;<a name="line.669"></a>
-<span class="sourceLineNo">670</span> } else {<a name="line.670"></a>
-<span class="sourceLineNo">671</span> n = bpName;<a name="line.671"></a>
-<span class="sourceLineNo">672</span> }<a name="line.672"></a>
-<span class="sourceLineNo">673</span> } else if (fluentSetters && isParentClass(rt, c)) {<a name="line.673"></a>
-<span class="sourceLineNo">674</span> methodType = SETTER;<a name="line.674"></a>
-<span class="sourceLineNo">675</span> }<a name="line.675"></a>
-<span class="sourceLineNo">676</span> } else if (pt.length == 2) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span> if ("*".equals(bpName) && pt[0] == String.class) {<a name="line.677"></a>
-<span class="sourceLineNo">678</span> if (n.startsWith("set") && (isParentClass(rt, c) || rt.equals(Void.TYPE))) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span> methodType = SETTER;<a name="line.679"></a>
-<span class="sourceLineNo">680</span> } else {<a name="line.680"></a>
-<span class="sourceLineNo">681</span> methodType = GETTER;<a name="line.681"></a>
-<span class="sourceLineNo">682</span> }<a name="line.682"></a>
-<span class="sourceLineNo">683</span> n = bpName;<a name="line.683"></a>
-<span class="sourceLineNo">684</span> }<a name="line.684"></a>
-<span class="sourceLineNo">685</span> }<a name="line.685"></a>
-<span class="sourceLineNo">686</span> n = pn.getPropertyName(n);<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span> if ("*".equals(bpName) && methodType == UNKNOWN)<a name="line.688"></a>
-<span class="sourceLineNo">689</span> throw new BeanRuntimeException(c, "Found @BeanProperty(\"*\") but could not determine method type on method ''{0}''.", m.getName());<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span> if (methodType != UNKNOWN) {<a name="line.691"></a>
-<span class="sourceLineNo">692</span> if (bpName != null && ! bpName.isEmpty()) {<a name="line.692"></a>
-<span class="sourceLineNo">693</span> n = bpName;<a name="line.693"></a>
-<span class="sourceLineNo">694</span> if (! fixedBeanProps.isEmpty())<a name="line.694"></a>
-<span class="sourceLineNo">695</span> if (! fixedBeanProps.contains(n))<a name="line.695"></a>
-<span class="sourceLineNo">696</span> n = null; // Could happen if filtered via BEAN_includeProperties/BEAN_excludeProperties<a name="line.696"></a>
-<span class="sourceLineNo">697</span> }<a name="line.697"></a>
-<span class="sourceLineNo">698</span> if (n != null)<a name="line.698"></a>
-<span class="sourceLineNo">699</span> l.add(new BeanMethod(n, methodType, m));<a name="line.699"></a>
-<span class="sourceLineNo">700</span> }<a name="line.700"></a>
-<span class="sourceLineNo">701</span> }<a name="line.701"></a>
-<span class="sourceLineNo">702</span> }<a name="line.702"></a>
-<span class="sourceLineNo">703</span> return l;<a name="line.703"></a>
-<span class="sourceLineNo">704</span> }<a name="line.704"></a>
-<span class="sourceLineNo">705</span><a name="line.705"></a>
-<span class="sourceLineNo">706</span> static final Collection<Field> findBeanFields(Class<?> c, Class<?> stopClass, Visibility v, Set<String> filterProps) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span> List<Field> l = new LinkedList<>();<a name="line.707"></a>
-<span class="sourceLineNo">708</span> for (Class<?> c2 : findClasses(c, stopClass)) {<a name="line.708"></a>
-<span class="sourceLineNo">709</span> for (Field f : c2.getDeclaredFields()) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span> if (isAny(f, STATIC, TRANSIENT))<a name="line.710"></a>
-<span class="sourceLineNo">711</span> continue;<a name="line.711"></a>
-<span class="sourceLineNo">712</span> if (f.isAnnotationPresent(BeanIgnore.class))<a name="line.712"></a>
+<span class="sourceLineNo">618</span> String n = m.getName();<a name="line.618"></a>
+<span class="sourceLineNo">619</span><a name="line.619"></a>
+<span class="sourceLineNo">620</span> Class<?>[] pt = m.getParameterTypes();<a name="line.620"></a>
+<span class="sourceLineNo">621</span> Class<?> rt = m.getReturnType();<a name="line.621"></a>
+<span class="sourceLineNo">622</span> MethodType methodType = UNKNOWN;<a name="line.622"></a>
+<span class="sourceLineNo">623</span> String bpName = bpName(bp);<a name="line.623"></a>
+<span class="sourceLineNo">624</span><a name="line.624"></a>
+<span class="sourceLineNo">625</span> if (! (isEmpty(bpName) || filterProps.isEmpty() || filterProps.contains(bpName)))<a name="line.625"></a>
+<span class="sourceLineNo">626</span> throw new BeanRuntimeException(c, "Found @BeanProperty(\"{0}\") but name was not found in @Bean(properties)", bpName);<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span> if (pt.length == 0) {<a name="line.628"></a>
+<span class="sourceLineNo">629</span> if ("*".equals(bpName)) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span> if (isParentClass(Collection.class, rt)) {<a name="line.630"></a>
+<span class="sourceLineNo">631</span> methodType = EXTRAKEYS;<a name="line.631"></a>
+<span class="sourceLineNo">632</span> } else if (isParentClass(Map.class, rt)) {<a name="line.632"></a>
+<span class="sourceLineNo">633</span> methodType = GETTER;<a name="line.633"></a>
+<span class="sourceLineNo">634</span> }<a name="line.634"></a>
+<span class="sourceLineNo">635</span> n = bpName;<a name="line.635"></a>
+<span class="sourceLineNo">636</span> } else if (n.startsWith("get") && (! rt.equals(Void.TYPE))) {<a name="line.636"></a>
+<span class="sourceLineNo">637</span> methodType = GETTER;<a name="line.637"></a>
+<span class="sourceLineNo">638</span> n = n.substring(3);<a name="line.638"></a>
+<span class="sourceLineNo">639</span> } else if (n.startsWith("is") && (rt.equals(Boolean.TYPE) || rt.equals(Boolean.class))) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span> methodType = GETTER;<a name="line.640"></a>
+<span class="sourceLineNo">641</span> n = n.substring(2);<a name="line.641"></a>
+<span class="sourceLineNo">642</span> } else if (bpName != null) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span> methodType = GETTER;<a name="line.643"></a>
+<span class="sourceLineNo">644</span> if (bpName.isEmpty()) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span> if (n.startsWith("get"))<a name="line.645"></a>
+<span class="sourceLineNo">646</span> n = n.substring(3);<a name="line.646"></a>
+<span class="sourceLineNo">647</span> else if (n.startsWith("is"))<a name="line.647"></a>
+<span class="sourceLineNo">648</span> n = n.substring(2);<a name="line.648"></a>
+<span class="sourceLineNo">649</span> bpName = n;<a name="line.649"></a>
+<span class="sourceLineNo">650</span> } else {<a name="line.650"></a>
+<span class="sourceLineNo">651</span> n = bpName;<a name="line.651"></a>
+<span class="sourceLineNo">652</span> }<a name="line.652"></a>
+<span class="sourceLineNo">653</span> }<a name="line.653"></a>
+<span class="sourceLineNo">654</span> } else if (pt.length == 1) {<a name="line.654"></a>
+<span class="sourceLineNo">655</span> if ("*".equals(bpName)) {<a name="line.655"></a>
+<span class="sourceLineNo">656</span> if (isParentClass(Map.class, pt[0])) {<a name="line.656"></a>
+<span class="sourceLineNo">657</span> methodType = SETTER;<a name="line.657"></a>
+<span class="sourceLineNo">658</span> n = bpName;<a name="line.658"></a>
+<span class="sourceLineNo">659</span> } else if (pt[0] == String.class) {<a name="line.659"></a>
+<span class="sourceLineNo">660</span> methodType = GETTER;<a name="line.660"></a>
+<span class="sourceLineNo">661</span> n = bpName;<a name="line.661"></a>
+<span class="sourceLineNo">662</span> }<a name="line.662"></a>
+<span class="sourceLineNo">663</span> } else if (n.startsWith("set") && (isParentClass(rt, c) || rt.equals(Void.TYPE))) {<a name="line.663"></a>
+<span class="sourceLineNo">664</span> methodType = SETTER;<a name="line.664"></a>
+<span class="sourceLineNo">665</span> n = n.substring(3);<a name="line.665"></a>
+<span class="sourceLineNo">666</span> } else if (bpName != null) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span> methodType = SETTER;<a name="line.667"></a>
+<span class="sourceLineNo">668</span> if (bpName.isEmpty()) {<a name="line.668"></a>
+<span class="sourceLineNo">669</span> if (n.startsWith("set"))<a name="line.669"></a>
+<span class="sourceLineNo">670</span> n = n.substring(3);<a name="line.670"></a>
+<span class="sourceLineNo">671</span> bpName = n;<a name="line.671"></a>
+<span class="sourceLineNo">672</span> } else {<a name="line.672"></a>
+<span class="sourceLineNo">673</span> n = bpName;<a name="line.673"></a>
+<span class="sourceLineNo">674</span> }<a name="line.674"></a>
+<span class="sourceLineNo">675</span> } else if (fluentSetters && isParentClass(rt, c)) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span> methodType = SETTER;<a name="line.676"></a>
+<span class="sourceLineNo">677</span> }<a name="line.677"></a>
+<span class="sourceLineNo">678</span> } else if (pt.length == 2) {<a name="line.678"></a>
+<span class="sourceLineNo">679</span> if ("*".equals(bpName) && pt[0] == String.class) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span> if (n.startsWith("set") && (isParentClass(rt, c) || rt.equals(Void.TYPE))) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span> methodType = SETTER;<a name="line.681"></a>
+<span class="sourceLineNo">682</span> } else {<a name="line.682"></a>
+<span class="sourceLineNo">683</span> methodType = GETTER;<a name="line.683"></a>
+<span class="sourceLineNo">684</span> }<a name="line.684"></a>
+<span class="sourceLineNo">685</span> n = bpName;<a name="line.685"></a>
+<span class="sourceLineNo">686</span> }<a name="line.686"></a>
+<span class="sourceLineNo">687</span> }<a name="line.687"></a>
+<span class="sourceLineNo">688</span> n = pn.getPropertyName(n);<a name="line.688"></a>
+<span class="sourceLineNo">689</span><a name="line.689"></a>
+<span class="sourceLineNo">690</span> if ("*".equals(bpName) && methodType == UNKNOWN)<a name="line.690"></a>
+<span class="sourceLineNo">691</span> throw new BeanRuntimeException(c, "Found @BeanProperty(\"*\") but could not determine method type on method ''{0}''.", m.getName());<a name="line.691"></a>
+<span class="sourceLineNo">692</span><a name="line.692"></a>
+<span class="sourceLineNo">693</span> if (methodType != UNKNOWN) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span> if (bpName != null && ! bpName.isEmpty()) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span> n = bpName;<a name="line.695"></a>
+<span class="sourceLineNo">696</span> if (! fixedBeanProps.isEmpty())<a name="line.696"></a>
+<span class="sourceLineNo">697</span> if (! fixedBeanProps.contains(n))<a name="line.697"></a>
+<span class="sourceLineNo">698</span> n = null; // Could happen if filtered via BEAN_includeProperties/BEAN_excludeProperties<a name="line.698"></a>
+<span class="sourceLineNo">699</span> }<a name="line.699"></a>
+<span class="sourceLineNo">700</span> if (n != null)<a name="line.700"></a>
+<span class="sourceLineNo">701</span> l.add(new BeanMethod(n, methodType, m));<a name="line.701"></a>
+<span class="sourceLineNo">702</span> }<a name="line.702"></a>
+<span class="sourceLineNo">703</span> }<a name="line.703"></a>
+<span class="sourceLineNo">704</span> }<a name="line.704"></a>
+<span class="sourceLineNo">705</span> return l;<a name="line.705"></a>
+<span class="sourceLineNo">706</span> }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span> static final Collection<Field> findBeanFields(Class<?> c, Class<?> stopClass, Visibility v, Set<String> filterProps) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span> List<Field> l = new LinkedList<>();<a name="line.709"></a>
+<span class="sourceLineNo">710</span> for (Class<?> c2 : findClasses(c, stopClass)) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span> for (Field f : c2.getDeclaredFields()) {<a name="line.711"></a>
+<span class="sourceLineNo">712</span> if (isAny(f, STATIC, TRANSIENT))<a name="line.712"></a>
<span class="sourceLineNo">713</span> continue;<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span> BeanProperty bp = f.getAnnotation(BeanProperty.class);<a name="line.715"></a>
-<span class="sourceLineNo">716</span> String bpName = bpName(bp);<a name="line.716"></a>
-<span class="sourceLineNo">717</span><a name="line.717"></a>
-<span class="sourceLineNo">718</span> if (! (v.isVisible(f) || bp != null))<a name="line.718"></a>
-<span class="sourceLineNo">719</span> continue;<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span> if (! (isEmpty(bpName) || filterProps.isEmpty() || filterProps.contains(bpName)))<a name="line.721"></a>
-<span class="sourceLineNo">722</span> throw new BeanRuntimeException(c, "Found @BeanProperty(\"{0}\") but name was not found in @Bean(properties)", bpName);<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span> l.add(f);<a name="line.724"></a>
-<span class="sourceLineNo">725</span> }<a name="line.725"></a>
-<span class="sourceLineNo">726</span> }<a name="line.726"></a>
-<span class="sourceLineNo">727</span> return l;<a name="line.727"></a>
-<span class="sourceLineNo">728</span> }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span> static final Field findInnerBeanField(Class<?> c, Class<?> stopClass, String name) {<a name="line.730"></a>
-<span class="sourceLineNo">731</span> for (Class<?> c2 : findClasses(c, stopClass)) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span> for (Field f : c2.getDeclaredFields()) {<a name="line.732"></a>
-<span class="sourceLineNo">733</span> if (isAny(f, STATIC, TRANSIENT))<a name="line.733"></a>
-<span class="sourceLineNo">734</span> continue;<a name="line.734"></a>
-<span class="sourceLineNo">735</span> if (f.isAnnotationPresent(BeanIgnore.class))<a name="line.735"></a>
+<span class="sourceLineNo">714</span> if (f.isAnnotationPresent(BeanIgnore.class))<a name="line.714"></a>
+<span class="sourceLineNo">715</span> continue;<a name="line.715"></a>
+<span class="sourceLineNo">716</span><a name="line.716"></a>
+<span class="sourceLineNo">717</span> BeanProperty bp = f.getAnnotation(BeanProperty.class);<a name="line.717"></a>
+<span class="sourceLineNo">718</span> String bpName = bpName(bp);<a name="line.718"></a>
+<span class="sourceLineNo">719</span><a name="line.719"></a>
+<span class="sourceLineNo">720</span> if (! (v.isVisible(f) || bp != null))<a name="line.720"></a>
+<span class="sourceLineNo">721</span> continue;<a name="line.721"></a>
+<span class="sourceLineNo">722</span><a name="line.722"></a>
+<span class="sourceLineNo">723</span> if (! (isEmpty(bpName) || filterProps.isEmpty() || filterProps.contains(bpName)))<a name="line.723"></a>
+<span class="sourceLineNo">724</span> throw new BeanRuntimeException(c, "Found @BeanProperty(\"{0}\") but name was not found in @Bean(properties)", bpName);<a name="line.724"></a>
+<span class="sourceLineNo">725</span><a name="line.725"></a>
+<span class="sourceLineNo">726</span> l.add(f);<a name="line.726"></a>
+<span class="sourceLineNo">727</span> }<a name="line.727"></a>
+<span class="sourceLineNo">728</span> }<a name="line.728"></a>
+<span class="sourceLineNo">729</span> return l;<a name="line.729"></a>
+<span class="sourceLineNo">730</span> }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span> static final Field findInnerBeanField(Class<?> c, Class<?> stopClass, String name) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span> for (Class<?> c2 : findClasses(c, stopClass)) {<a name="line.733"></a>
+<span class="sourceLineNo">734</span> for (Field f : c2.getDeclaredFields()) {<a name="line.734"></a>
+<span class="sourceLineNo">735</span> if (isAny(f, STATIC, TRANSIENT))<a name="line.735"></a>
<span class="sourceLineNo">736</span> continue;<a name="line.736"></a>
-<span class="sourceLineNo">737</span> if (f.getName().equals(name))<a name="line.737"></a>
-<span class="sourceLineNo">738</span> return f;<a name="line.738"></a>
-<span class="sourceLineNo">739</span> }<a name="line.739"></a>
-<span class="sourceLineNo">740</span> }<a name="line.740"></a>
-<span class="sourceLineNo">741</span> return null;<a name="line.741"></a>
-<span class="sourceLineNo">742</span> }<a name="line.742"></a>
-<span class="sourceLineNo">743</span><a name="line.743"></a>
-<span class="sourceLineNo">744</span> private static List<Class<?>> findClasses(Class<?> c, Class<?> stopClass) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span> LinkedList<Class<?>> l = new LinkedList<>();<a name="line.745"></a>
-<span class="sourceLineNo">746</span> findClasses(c, l, stopClass);<a name="line.746"></a>
-<span class="sourceLineNo">747</span> return l;<a name="line.747"></a>
-<span class="sourceLineNo">748</span> }<a name="line.748"></a>
-<span class="sourceLineNo">749</span><a name="line.749"></a>
-<span class="sourceLineNo">750</span> private static void findClasses(Class<?> c, LinkedList<Class<?>> l, Class<?> stopClass) {<a name="line.750"></a>
-<span class="sourceLineNo">751</span> while (c != null && stopClass != c) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span> l.addFirst(c);<a name="line.752"></a>
-<span class="sourceLineNo">753</span> for (Class<?> ci : c.getInterfaces())<a name="line.753"></a>
-<span class="sourceLineNo">754</span> findClasses(ci, l, stopClass);<a name="line.754"></a>
-<span class="sourceLineNo">755</span> c = c.getSuperclass();<a name="line.755"></a>
-<span class="sourceLineNo">756</span> }<a name="line.756"></a>
-<span class="sourceLineNo">757</span> }<a name="line.757"></a>
-<span class="sourceLineNo">758</span><a name="line.758"></a>
-<span class="sourceLineNo">759</span> /**<a name="line.759"></a>
-<span class="sourceLineNo">760</span> * Returns the metadata on all properties associated with this bean.<a name="line.760"></a>
-<span class="sourceLineNo">761</span> *<a name="line.761"></a>
-<span class="sourceLineNo">762</span> * @return Metadata on all properties associated with this bean.<a name="line.762"></a>
-<span class="sourceLineNo">763</span> */<a name="line.763"></a>
-<span class="sourceLineNo">764</span> public Collection<BeanPropertyMeta> getPropertyMetas() {<a name="line.764"></a>
-<span class="sourceLineNo">765</span> return this.properties.values();<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span><a name="line.767"></a>
-<span class="sourceLineNo">768</span> /**<a name="line.768"></a>
-<span class="sourceLineNo">769</span> * Returns the metadata on the specified list of properties.<a name="line.769"></a>
-<span class="sourceLineNo">770</span> *<a name="line.770"></a>
-<span class="sourceLineNo">771</span> * @param pNames The list of properties to retrieve. If <jk>null</jk>, returns all properties.<a name="line.771"></a>
-<span class="sourceLineNo">772</span> * @return The metadata on the specified list of properties.<a name="line.772"></a>
-<span class="sourceLineNo">773</span> */<a name="line.773"></a>
-<span class="sourceLineNo">774</span> public Collection<BeanPropertyMeta> getPropertyMetas(final String...pNames) {<a name="line.774"></a>
-<span class="sourceLineNo">775</span> if (pNames == null)<a name="line.775"></a>
-<span class="sourceLineNo">776</span> return getPropertyMetas();<a name="line.776"></a>
-<span class="sourceLineNo">777</span> List<BeanPropertyMeta> l = new ArrayList<>(pNames.length);<a name="line.777"></a>
-<span class="sourceLineNo">778</span> for (int i = 0; i < pNames.length; i++)<a name="line.778"></a>
-<span class="sourceLineNo">779</span> l.add(getPropertyMeta(pNames[i]));<a name="line.779"></a>
-<span class="sourceLineNo">780</span> return l;<a name="line.780"></a>
-<span class="sourceLineNo">781</span> }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span> /**<a name="line.783"></a>
-<span class="sourceLineNo">784</span> * Returns the language-specified extended metadata on this bean class.<a name="line.784"></a>
-<span class="sourceLineNo">785</span> *<a name="line.785"></a>
-<span class="sourceLineNo">786</span> * @param metaDataClass The name of the metadata class to create.<a name="line.786"></a>
-<span class="sourceLineNo">787</span> * @return Extended metadata on this bean class. Never <jk>null</jk>.<a name="line.787"></a>
-<span class="sourceLineNo">788</span> */<a name="line.788"></a>
-<span class="sourceLineNo">789</span> public <M extends BeanMetaExtended> M getExtendedMeta(Class<M> metaDataClass) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span> return extMeta.get(metaDataClass, this);<a name="line.790"></a>
-<span class="sourceLineNo">791</span> }<a name="line.791"></a>
-<span class="sourceLineNo">792</span><a name="line.792"></a>
-<span class="sourceLineNo">793</span> /**<a name="line.793"></a>
-<span class="sourceLineNo">794</span> * Returns metadata about the specified property.<a name="line.794"></a>
-<span class="sourceLineNo">795</span> *<a name="line.795"></a>
-<span class="sourceLineNo">796</span> * @param name The name of the property on this bean.<a name="line.796"></a>
-<span class="sourceLineNo">797</span> * @return The metadata about the property, or <jk>null</jk> if no such property exists on this bean.<a name="line.797"></a>
-<span class="sourceLineNo">798</span> */<a name="line.798"></a>
-<span class="sourceLineNo">799</span> public BeanPropertyMeta getPropertyMeta(String name) {<a name="line.799"></a>
-<span class="sourceLineNo">800</span> BeanPropertyMeta bpm = properties.get(name);<a name="line.800"></a>
-<span class="sourceLineNo">801</span> if (bpm == null)<a name="line.801"></a>
-<span class="sourceLineNo">802</span> bpm = dynaProperty;<a name="line.802"></a>
-<span class="sourceLineNo">803</span> return bpm;<a name="line.803"></a>
-<span class="sourceLineNo">804</span> }<a name="line.804"></a>
-<span class="sourceLineNo">805</span><a name="line.805"></a>
-<span class="sourceLineNo">806</span> /**<a name="line.806"></a>
-<span class="sourceLineNo">807</span> * Creates a new instance of this bean.<a name="line.807"></a>
-<span class="sourceLineNo">808</span> *<a name="line.808"></a>
-<span class="sourceLineNo">809</span> * @param outer The outer object if bean class is a non-static inner member class.<a name="line.809"></a>
-<span class="sourceLineNo">810</span> * @return A new instance of this bean if possible, or <jk>null</jk> if not.<a name="line.810"></a>
-<span class="sourceLineNo">811</span> * @throws IllegalArgumentException Thrown by constructor.<a name="line.811"></a>
-<span class="sourceLineNo">812</span> * @throws InstantiationException Thrown by constructor.<a name="line.812"></a>
-<span class="sourceLineNo">813</span> * @throws IllegalAccessException Thrown by constructor.<a name="line.813"></a>
-<span class="sourceLineNo">814</span> * @throws InvocationTargetException Thrown by constructor.<a name="line.814"></a>
-<span class="sourceLineNo">815</span> */<a name="line.815"></a>
-<span class="sourceLineNo">816</span> @SuppressWarnings("unchecked")<a name="line.816"></a>
-<span class="sourceLineNo">817</span> protected T newBean(Object outer) throws IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {<a name="line.817"></a>
-<span class="sourceLineNo">818</span> if (classMeta.isMemberClass()) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span> if (constructor != null)<a name="line.819"></a>
-<span class="sourceLineNo">820</span> return constructor.newInstance(outer);<a name="line.820"></a>
-<span class="sourceLineNo">821</span> } else {<a name="line.821"></a>
-<span class="sourceLineNo">822</span> if (constructor != null)<a name="line.822"></a>
-<span class="sourceLineNo">823</span> return constructor.newInstance((Object[])null);<a name="line.823"></a>
-<span class="sourceLineNo">824</span> InvocationHandler h = classMeta.getProxyInvocationHandler();<a name="line.824"></a>
-<span class="sourceLineNo">825</span> if (h != null) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span> ClassLoader cl = classMeta.innerClass.getClassLoader();<a name="line.826"></a>
-<span class="sourceLineNo">827</span> return (T)Proxy.newProxyInstance(cl, new Class[] { classMeta.innerClass, java.io.Serializable.class }, h);<a name="line.827"></a>
-<span class="sourceLineNo">828</span> }<a name="line.828"></a>
-<span class="sourceLineNo">829</span> }<a name="line.829"></a>
-<span class="sourceLineNo">830</span> return null;<a name="line.830"></a>
-<span class="sourceLineNo">831</span> }<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span> /**<a name="line.833"></a>
-<span class="sourceLineNo">834</span> * Recursively determines the classes represented by parameterized types in the class hierarchy of the specified<a name="line.834"></a>
-<span class="sourceLineNo">835</span> * type, and puts the results in the specified map.<a name="line.835"></a>
-<span class="sourceLineNo">836</span> *<a name="line.836"></a>
-<span class="sourceLineNo">837</span> * <p><a name="line.837"></a>
-<span class="sourceLineNo">838</span> * For example, given the following classes...<a name="line.838"></a>
-<span class="sourceLineNo">839</span> * <p class='bcode w800'><a name="line.839"></a>
-<span class="sourceLineNo">840</span> * public static class BeanA&lt;T&gt; {<a name="line.840"></a>
-<span class="sourceLineNo">841</span> * public T x;<a name="line.841"></a>
-<span class="sourceLineNo">842</span> * }<a name="line.842"></a>
-<span class="sourceLineNo">843</span> * public static class BeanB extends BeanA&lt;Integer>} {...}<a name="line.843"></a>
-<span class="sourceLineNo">844</span> * </p><a name="line.844"></a>
-<span class="sourceLineNo">845</span> * <p><a name="line.845"></a>
-<span class="sourceLineNo">846</span> * ...calling this method on {@code BeanB.class} will load the following data into {@code m} indicating<a name="line.846"></a>
-<span class="sourceLineNo">847</span> * that the {@code T} parameter on the BeanA class is implemented with an {@code Integer}:<a name="line.847"></a>
-<span class="sourceLineNo">848</span> * <p class='bcode w800'><a name="line.848"></a>
-<span class="sourceLineNo">849</span> * {BeanA.class:[Integer.class]}<a name="line.849"></a>
-<span class="sourceLineNo">850</span> * </p><a name="line.850"></a>
-<span class="sourceLineNo">851</span> *<a name="line.851"></a>
-<span class="sourceLineNo">852</span> * <p><a name="line.852"></a>
-<span class="sourceLineNo">853</span> * TODO: This code doesn't currently properly handle the following situation:<a name="line.853"></a>
-<span class="sourceLineNo">854</span> * <p class='bcode w800'><a name="line.854"></a>
-<span class="sourceLineNo">855</span> * public static class BeanB&lt;T extends Number&gt; extends BeanA&lt;T&gt;;<a name="line.855"></a>
-<span class="sourceLineNo">856</span> * public static class BeanC extends BeanB&lt;Integer&gt;;<a name="line.856"></a>
-<span class="sourceLineNo">857</span> * </p><a name="line.857"></a>
-<span class="sourceLineNo">858</span> *<a name="line.858"></a>
-<span class="sourceLineNo">859</span> * <p><a name="line.859"></a>
-<span class="sourceLineNo">860</span> * When called on {@code BeanC}, the variable will be detected as a {@code Number}, not an {@code Integer}.<a name="line.860"></a>
-<span class="sourceLineNo">861</span> * If anyone can figure out a better way of doing this, please do so!<a name="line.861"></a>
-<span class="sourceLineNo">862</span> *<a name="line.862"></a>
-<span class="sourceLineNo">863</span> * @param t The type we're recursing.<a name="line.863"></a>
-<span class="sourceLineNo">864</span> * @param m Where the results are loaded.<a name="line.864"></a>
-<span class="sourceLineNo">865</span> */<a name="line.865"></a>
-<span class="sourceLineNo">866</span> static final void findTypeVarImpls(Type t, Map<Class<?>,Class<?>[]> m) {<a name="line.866"></a>
-<span class="sourceLineNo">867</span> if (t instanceof Class) {<a name="line.867"></a>
-<span class="sourceLineNo">868</span> Class<?> c = (Class<?>)t;<a name="line.868"></a>
-<span class="sourceLineNo">869</span> findTypeVarImpls(c.getGenericSuperclass(), m);<a name="line.869"></a>
-<span class="sourceLineNo">870</span> for (Type ci : c.getGenericInterfaces())<a name="line.870"></a>
-<span class="sourceLineNo">871</span> findTypeVarImpls(ci, m);<a name="line.871"></a>
-<span class="sourceLineNo">872</span> } else if (t instanceof ParameterizedType) {<a name="line.872"></a>
-<span class="sourceLineNo">873</span> ParameterizedType pt = (ParameterizedType)t;<a name="line.873"></a>
-<span class="sourceLineNo">874</span> Type rt = pt.getRawType();<a name="line.874"></a>
-<span class="sourceLineNo">875</span> if (rt instanceof Class) {<a name="line.875"></a>
-<span class="sourceLineNo">876</span> Type[] gImpls = pt.getActualTypeArguments();<a name="line.876"></a>
-<span class="sourceLineNo">877</span> Class<?>[] gTypes = new Class[gImpls.length];<a name="line.877"></a>
-<span class="sourceLineNo">878</span> for (int i = 0; i < gImpls.length; i++) {<a name="line.878"></a>
-<span class="sourceLineNo">879</span> Type gt = gImpls[i];<a name="line.879"></a>
-<span class="sourceLineNo">880</span> if (gt instanceof Class)<a name="line.880"></a>
-<span class="sourceLineNo">881</span> gTypes[i] = (Class<?>)gt;<a name="line.881"></a>
-<span class="sourceLineNo">882</span> else if (gt instanceof TypeVariable) {<a name="line.882"></a>
-<span class="sourceLineNo">883</span> TypeVariable<?> tv = (TypeVariable<?>)gt;<a name="line.883"></a>
-<span class="sourceLineNo">884</span> for (Type upperBound : tv.getBounds())<a name="line.884"></a>
-<span class="sourceLineNo">885</span> if (upperBound instanceof Class)<a name="line.885"></a>
-<span class="sourceLineNo">886</span> gTypes[i] = (Class<?>)upperBound;<a name="line.886"></a>
-<span class="sourceLineNo">887</span> }<a name="line.887"></a>
-<span class="sourceLineNo">888</span> }<a name="line.888"></a>
-<span class="sourceLineNo">889</span> m.put((Class<?>)rt, gTypes);<a name="line.889"></a>
-<span class="sourceLineNo">890</span> findTypeVarImpls(pt.getRawType(), m);<a name="line.890"></a>
-<span class="sourceLineNo">891</span> }<a name="line.891"></a>
-<span class="sourceLineNo">892</span> }<a name="line.892"></a>
-<span class="sourceLineNo">893</span> }<a name="line.893"></a>
-<span class="sourceLineNo">894</span><a name="line.894"></a>
-<span class="sourceLineNo">895</span> static final String bpName(BeanProperty bp) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span> if (bp == null)<a name="line.896"></a>
-<span class="sourceLineNo">897</span> return null;<a name="line.897"></a>
-<span class="sourceLineNo">898</span> if (! bp.name().isEmpty())<a name="line.898"></a>
-<span class="sourceLineNo">899</span> return bp.name();<a name="line.899"></a>
-<span class="sourceLineNo">900</span> return bp.value();<a name="line.900"></a>
-<span class="sourceLineNo">901</span> }<a name="line.901"></a>
-<span class="sourceLineNo">902</span><a name="line.902"></a>
-<span class="sourceLineNo">903</span> @Override /* Object */<a name="line.903"></a>
-<span class="sourceLineNo">904</span> public String toString() {<a name="line.904"></a>
-<span class="sourceLineNo">905</span> StringBuilder sb = new StringBuilder(c.getName());<a name="line.905"></a>
-<span class="sourceLineNo">906</span> sb.append(" {\n");<a name="line.906"></a>
-<span class="sourceLineNo">907</span> for (BeanPropertyMeta pm : this.properties.values())<a name="line.907"></a>
-<span class="sourceLineNo">908</span> sb.append('\t').append(pm.toString()).append(",\n");<a name="line.908"></a>
-<span class="sourceLineNo">909</span> sb.append('}');<a name="line.909"></a>
-<span class="sourceLineNo">910</span> return sb.toString();<a name="line.910"></a>
-<span class="sourceLineNo">911</span> }<a name="line.911"></a>
-<span class="sourceLineNo">912</span>}<a name="line.912"></a>
+<span class="sourceLineNo">737</span> if (f.isAnnotationPresent(BeanIgnore.class))<a name="line.737"></a>
+<span class="sourceLineNo">738</span> continue;<a name="line.738"></a>
+<span class="sourceLineNo">739</span> if (f.getName().equals(name))<a name="line.739"></a>
+<span class="sourceLineNo">740</span> return f;<a name="line.740"></a>
+<span class="sourceLineNo">741</span> }<a name="line.741"></a>
+<span class="sourceLineNo">742</span> }<a name="line.742"></a>
+<span class="sourceLineNo">743</span> return null;<a name="line.743"></a>
+<span class="sourceLineNo">744</span> }<a name="line.744"></a>
+<span class="sourceLineNo">745</span><a name="line.745"></a>
+<span class="sourceLineNo">746</span> private static List<Class<?>> findClasses(Class<?> c, Class<?> stopClass) {<a name="line.746"></a>
+<span class="sourceLineNo">747</span> LinkedList<Class<?>> l = new LinkedList<>();<a name="line.747"></a>
+<span class="sourceLineNo">748</span> findClasses(c, l, stopClass);<a name="line.748"></a>
+<span class="sourceLineNo">749</span> return l;<a name="line.749"></a>
+<span class="sourceLineNo">750</span> }<a name="line.750"></a>
+<span class="sourceLineNo">751</span><a name="line.751"></a>
+<span class="sourceLineNo">752</span> private static void findClasses(Class<?> c, LinkedList<Class<?>> l, Class<?> stopClass) {<a name="line.752"></a>
+<span class="sourceLineNo">753</span> while (c != null && stopClass != c) {<a name="line.753"></a>
+<span class="sourceLineNo">754</span> l.addFirst(c);<a name="line.754"></a>
+<span class="sourceLineNo">755</span> for (Class<?> ci : c.getInterfaces())<a name="line.755"></a>
+<span class="sourceLineNo">756</span> findClasses(ci, l, stopClass);<a name="line.756"></a>
+<span class="sourceLineNo">757</span> c = c.getSuperclass();<a name="line.757"></a>
+<span class="sourceLineNo">758</span> }<a name="line.758"></a>
+<span class="sourceLineNo">759</span> }<a name="line.759"></a>
+<span class="sourceLineNo">760</span><a name="line.760"></a>
+<span class="sourceLineNo">761</span> /**<a name="line.761"></a>
+<span class="sourceLineNo">762</span> * Returns the metadata on all properties associated with this bean.<a name="line.762"></a>
+<span class="sourceLineNo">763</span> *<a name="line.763"></a>
+<span class="sourceLineNo">764</span> * @return Metadata on all properties associated with this bean.<a name="line.764"></a>
+<span class="sourceLineNo">765</span> */<a name="line.765"></a>
+<span class="sourceLineNo">766</span> public Collection<BeanPropertyMeta> getPropertyMetas() {<a name="line.766"></a>
+<span class="sourceLineNo">767</span> return this.properties.values();<a name="line.767"></a>
+<span class="sourceLineNo">768</span> }<a name="line.768"></a>
+<span class="sourceLineNo">769</span><a name="line.769"></a>
+<span class="sourceLineNo">770</span> /**<a name="line.770"></a>
+<span class="sourceLineNo">771</span> * Returns the metadata on the specified list of properties.<a name="line.771"></a>
+<span class="sourceLineNo">772</span> *<a name="line.772"></a>
+<span class="sourceLineNo">773</span> * @param pNames The list of properties to retrieve. If <jk>null</jk>, returns all properties.<a name="line.773"></a>
+<span class="sourceLineNo">774</span> * @return The metadata on the specified list of properties.<a name="line.774"></a>
+<span class="sourceLineNo">775</span> */<a name="line.775"></a>
+<span class="sourceLineNo">776</span> public Collection<BeanPropertyMeta> getPropertyMetas(final String...pNames) {<a name="line.776"></a>
+<span class="sourceLineNo">777</span> if (pNames == null)<a name="line.777"></a>
+<span class="sourceLineNo">778</span> return getPropertyMetas();<a name="line.778"></a>
+<span class="sourceLineNo">779</span> List<BeanPropertyMeta> l = new ArrayList<>(pNames.length);<a name="line.779"></a>
+<span class="sourceLineNo">780</span> for (int i = 0; i < pNames.length; i++)<a name="line.780"></a>
+<span class="sourceLineNo">781</span> l.add(getPropertyMeta(pNames[i]));<a name="line.781"></a>
+<span class="sourceLineNo">782</span> return l;<a name="line.782"></a>
+<span class="sourceLineNo">783</span> }<a name="line.783"></a>
+<span class="sourceLineNo">784</span><a name="line.784"></a>
+<span class="sourceLineNo">785</span> /**<a name="line.785"></a>
+<span class="sourceLineNo">786</span> * Returns the language-specified extended metadata on this bean class.<a name="line.786"></a>
+<span class="sourceLineNo">787</span> *<a name="line.787"></a>
+<span class="sourceLineNo">788</span> * @param metaDataClass The name of the metadata class to create.<a name="line.788"></a>
+<span class="sourceLineNo">789</span> * @return Extended metadata on this bean class. Never <jk>null</jk>.<a name="line.789"></a>
+<span class="sourceLineNo">790</span> */<a name="line.790"></a>
+<span class="sourceLineNo">791</span> public <M extends BeanMetaExtended> M getExtendedMeta(Class<M> metaDataClass) {<a name="line.791"></a>
+<span class="sourceLineNo">792</span> return extMeta.get(metaDataClass, this);<a name="line.792"></a>
+<span class="sourceLineNo">793</span> }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span> /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span> * Returns metadata about the specified property.<a name="line.796"></a>
+<span class="sourceLineNo">797</span> *<a name="line.797"></a>
+<span class="sourceLineNo">798</span> * @param name The name of the property on this bean.<a name="line.798"></a>
+<span class="sourceLineNo">799</span> * @return The metadata about the property, or <jk>null</jk> if no such property exists on this bean.<a name="line.799"></a>
+<span class="sourceLineNo">800</span> */<a name="line.800"></a>
+<span class="sourceLineNo">801</span> public BeanPropertyMeta getPropertyMeta(String name) {<a name="line.801"></a>
+<span class="sourceLineNo">802</span> BeanPropertyMeta bpm = properties.get(name);<a name="line.802"></a>
+<span class="sourceLineNo">803</span> if (bpm == null)<a name="line.803"></a>
+<span class="sourceLineNo">804</span> bpm = dynaProperty;<a name="line.804"></a>
+<span class="sourceLineNo">805</span> return bpm;<a name="line.805"></a>
+<span class="sourceLineNo">806</span> }<a name="line.806"></a>
+<span class="sourceLineNo">807</span><a name="line.807"></a>
+<span class="sourceLineNo">808</span> /**<a name="line.808"></a>
+<span class="sourceLineNo">809</span> * Creates a new instance of this bean.<a name="line.809"></a>
+<span class="sourceLineNo">810</span> *<a name="line.810"></a>
+<span class="sourceLineNo">811</span> * @param outer The outer object if bean class is a non-static inner member class.<a name="line.811"></a>
+<span class="sourceLineNo">812</span> * @return A new instance of this bean if possible, or <jk>null</jk> if not.<a name="line.812"></a>
+<span class="sourceLineNo">813</span> * @throws IllegalArgumentException Thrown by constructor.<a name="line.813"></a>
+<span class="sourceLineNo">814</span> * @throws InstantiationException Thrown by constructor.<a name="line.814"></a>
+<span class="sourceLineNo">815</span> * @throws IllegalAccessException Thrown by constructor.<a name="line.815"></a>
+<span class="sourceLineNo">816</span> * @throws InvocationTargetException Thrown by constructor.<a name="line.816"></a>
+<span class="sourceLineNo">817</span> */<a name="line.817"></a>
+<span class="sourceLineNo">818</span> @SuppressWarnings("unchecked")<a name="line.818"></a>
+<span class="sourceLineNo">819</span> protected T newBean(Object outer) throws IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {<a name="line.819"></a>
+<span class="sourceLineNo">820</span> if (classMeta.isMemberClass()) {<a name="line.820"></a>
+<span class="sourceLineNo">821</span> if (constructor != null)<a name="line.821"></a>
+<span class="sourceLineNo">822</span> return constructor.newInstance(outer);<a name="line.822"></a>
+<span class="sourceLineNo">823</span> } else {<a name="line.823"></a>
+<span class="sourceLineNo">824</span> if (constructor != null)<a name="line.824"></a>
+<span class="sourceLineNo">825</span> return constructor.newInstance((Object[])null);<a name="line.825"></a>
+<span class="sourceLineNo">826</span> InvocationHandler h = classMeta.getProxyInvocationHandler();<a name="line.826"></a>
+<span class="sourceLineNo">827</span> if (h != null) {<a name="line.827"></a>
+<span class="sourceLineNo">828</span> ClassLoader cl = classMeta.innerClass.getClassLoader();<a name="line.828"></a>
+<span class="sourceLineNo">829</span> return (T)Proxy.newProxyInstance(cl, new Class[] { classMeta.innerClass, java.io.Serializable.class }, h);<a name="line.829"></a>
+<span class="sourceLineNo">830</span> }<a name="line.830"></a>
+<span class="sourceLineNo">831</span> }<a name="line.831"></a>
+<span class="sourceLineNo">832</span> return null;<a name="line.832"></a>
+<span class="sourceLineNo">833</span> }<a name="line.833"></a>
+<span class="sourceLineNo">834</span><a name="line.834"></a>
+<span class="sourceLineNo">835</span> /**<a name="line.835"></a>
+<span class="sourceLineNo">836</span> * Recursively determines the classes represented by parameterized types in the class hierarchy of the specified<a name="line.836"></a>
+<span class="sourceLineNo">837</span> * type, and puts the results in the specified map.<a name="line.837"></a>
+<span class="sourceLineNo">838</span> *<a name="line.838"></a>
+<span class="sourceLineNo">839</span> * <p><a name="line.839"></a>
+<span class="sourceLineNo">840</span> * For example, given the following classes...<a name="line.840"></a>
+<span class="sourceLineNo">841</span> * <p class='bcode w800'><a name="line.841"></a>
+<span class="sourceLineNo">842</span> * public static class BeanA&lt;T&gt; {<a name="line.842"></a>
+<span class="sourceLineNo">843</span> * public T x;<a name="line.843"></a>
+<span class="sourceLineNo">844</span> * }<a name="line.844"></a>
+<span class="sourceLineNo">845</span> * public static class BeanB extends BeanA&lt;Integer>} {...}<a name="line.845"></a>
+<span class="sourceLineNo">846</span> * </p><a name="line.846"></a>
+<span class="sourceLineNo">847</span> * <p><a name="line.847"></a>
+<span class="sourceLineNo">848</span> * ...calling this method on {@code BeanB.class} will load the following data into {@code m} indicating<a name="line.848"></a>
+<span class="sourceLineNo">849</span> * that the {@code T} parameter on the BeanA class is implemented with an {@code Integer}:<a name="line.849"></a>
+<span class="sourceLineNo">850</span> * <p class='bcode w800'><a name="line.850"></a>
+<span class="sourceLineNo">851</span> * {BeanA.class:[Integer.class]}<a name="line.851"></a>
+<span class="sourceLineNo">852</span> * </p><a name="line.852"></a>
+<span class="sourceLineNo">853</span> *<a name="line.853"></a>
+<span class="sourceLineNo">854</span> * <p><a name="line.854"></a>
+<span class="sourceLineNo">855</span> * TODO: This code doesn't currently properly handle the following situation:<a name="line.855"></a>
+<span class="sourceLineNo">856</span> * <p class='bcode w800'><a name="line.856"></a>
+<span class="sourceLineNo">857</span> * public static class BeanB&lt;T extends Number&gt; extends BeanA&lt;T&gt;;<a name="line.857"></a>
+<span class="sourceLineNo">858</span> * public static class BeanC extends BeanB&lt;Integer&gt;;<a name="line.858"></a>
+<span class="sourceLineNo">859</span> * </p><a name="line.859"></a>
+<span class="sourceLineNo">860</span> *<a name="line.860"></a>
+<span class="sourceLineNo">861</span> * <p><a name="line.861"></a>
+<span class="sourceLineNo">862</span> * When called on {@code BeanC}, the variable will be detected as a {@code Number}, not an {@code Integer}.<a name="line.862"></a>
+<span class="sourceLineNo">863</span> * If anyone can figure out a better way of doing this, please do so!<a name="line.863"></a>
+<span class="sourceLineNo">864</span> *<a name="line.864"></a>
+<span class="sourceLineNo">865</span> * @param t The type we're recursing.<a name="line.865"></a>
+<span class="sourceLineNo">866</span> * @param m Where the results are loaded.<a name="line.866"></a>
+<span class="sourceLineNo">867</span> */<a name="line.867"></a>
+<span class="sourceLineNo">868</span> static final void findTypeVarImpls(Type t, Map<Class<?>,Class<?>[]> m) {<a name="line.868"></a>
+<span class="sourceLineNo">869</span> if (t instanceof Class) {<a name="line.869"></a>
+<span class="sourceLineNo">870</span> Class<?> c = (Class<?>)t;<a name="line.870"></a>
+<span class="sourceLineNo">871</span> findTypeVarImpls(c.getGenericSuperclass(), m);<a name="line.871"></a>
+<span class="sourceLineNo">872</span> for (Type ci : c.getGenericInterfaces())<a name="line.872"></a>
+<span class="sourceLineNo">873</span> findTypeVarImpls(ci, m);<a name="line.873"></a>
+<span class="sourceLineNo">874</span> } else if (t instanceof ParameterizedType) {<a name="line.874"></a>
+<span class="sourceLineNo">875</span> ParameterizedType pt = (ParameterizedType)t;<a name="line.875"></a>
+<span class="sourceLineNo">876</span> Type rt = pt.getRawType();<a name="line.876"></a>
+<span class="sourceLineNo">877</span> if (rt instanceof Class) {<a name="line.877"></a>
+<span class="sourceLineNo">878</span> Type[] gImpls = pt.getActualTypeArguments();<a name="line.878"></a>
+<span class="sourceLineNo">879</span> Class<?>[] gTypes = new Class[gImpls.length];<a name="line.879"></a>
+<span class="sourceLineNo">880</span> for (int i = 0; i < gImpls.length; i++) {<a name="line.880"></a>
+<span class="sourceLineNo">881</span> Type gt = gImpls[i];<a name="line.881"></a>
+<span class="sourceLineNo">882</span> if (gt instanceof Class)<a name="line.882"></a>
+<span class="sourceLineNo">883</span> gTypes[i] = (Class<?>)gt;<a name="line.883"></a>
+<span class="sourceLineNo">884</span> else if (gt instanceof TypeVariable) {<a name="line.884"></a>
+<span class="sourceLineNo">885</span> TypeVariable<?> tv = (TypeVariable<?>)gt;<a name="line.885"></a>
+<span class="sourceLineNo">886</span> for (Type upperBound : tv.getBounds())<a name="line.886"></a>
+<span class="sourceLineNo">887</span> if (upperBound instanceof Class)<a name="line.887"></a>
+<span class="sourceLineNo">888</span> gTypes[i] = (Class<?>)upperBound;<a name="line.888"></a>
+<span class="sourceLineNo">889</span> }<a name="line.889"></a>
+<span class="sourceLineNo">890</span> }<a name="line.890"></a>
+<span class="sourceLineNo">891</span> m.put((Class<?>)rt, gTypes);<a name="line.891"></a>
+<span class="sourceLineNo">892</span> findTypeVarImpls(pt.getRawType(), m);<a name="line.892"></a>
+<span class="sourceLineNo">893</span> }<a name="line.893"></a>
+<span class="sourceLineNo">894</span> }<a name="line.894"></a>
+<span class="sourceLineNo">895</span> }<a name="line.895"></a>
+<span class="sourceLineNo">896</span><a name="line.896"></a>
+<span class="sourceLineNo">897</span> static final String bpName(BeanProperty bp) {<a name="line.897"></a>
+<span class="sourceLineNo">898</span> if (bp == null)<a name="line.898"></a>
+<span class="sourceLineNo">899</span> return null;<a name="line.899"></a>
+<span class="sourceLineNo">900</span> if (! bp.name().isEmpty())<a name="line.900"></a>
+<span class="sourceLineNo">901</span> return bp.name();<a name="line.901"></a>
+<span class="sourceLineNo">902</span> return bp.value();<a name="line.902"></a>
+<span class="sourceLineNo">903</span> }<a name="line.903"></a>
+<span class="sourceLineNo">904</span><a name="line.904"></a>
+<span class="sourceLineNo">905</span> @Override /* Object */<a name="line.905"></a>
+<span class="sourceLineNo">906</span> public String toString() {<a name="line.906"></a>
+<span class="sourceLineNo">907</span> StringBuilder sb = new StringBuilder(c.getName());<a name="line.907"></a>
+<span class="sourceLineNo">908</span> sb.append(" {\n");<a name="line.908"></a>
+<span class="sourceLineNo">909</span> for (BeanPropertyMeta pm : this.properties.values())<a name="line.909"></a>
+<span class="sourceLineNo">910</span> sb.append('\t').append(pm.toString()).append(",\n");<a name="line.910"></a>
+<span class="sourceLineNo">911</span> sb.append('}');<a name="line.911"></a>
+<span class="sourceLineNo">912</span> return sb.toString();<a name="line.912"></a>
+<span class="sourceLineNo">913</span> }<a name="line.913"></a>
+<span class="sourceLineNo">914</span>}<a name="line.914"></a>
diff --git a/content/site/apidocs-8.0.1/src-html/org/apache/juneau/config/Config.html b/content/site/apidocs-8.0.1/src-html/org/apache/juneau/config/Config.html
index e23eb8a..0e6151a 100644
--- a/content/site/apidocs-8.0.1/src-html/org/apache/juneau/config/Config.html
+++ b/content/site/apidocs-8.0.1/src-html/org/apache/juneau/config/Config.html
@@ -96,1867 +96,1873 @@
<span class="sourceLineNo">088</span> * <li>Any file ending in <js>".cfg"</js> in the home directory (names ordered alphabetically).<a name="line.88"></a>
<span class="sourceLineNo">089</span> * <li><js>"juneau.cfg"</js><a name="line.89"></a>
<span class="sourceLineNo">090</span> * <li><js>"default.cfg"</js><a name="line.90"></a>
-<span class="sourceLineNo">091</span> * </ol><a name="line.91"></a>
-<span class="sourceLineNo">092</span> * <p><a name="line.92"></a>
-<span class="sourceLineNo">093</span> *<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * @return<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * A list of candidate file names.<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * <br>The returned list is modifiable.<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * <br>Each call constructs a new list.<a name="line.97"></a>
-<span class="sourceLineNo">098</span> */<a name="line.98"></a>
-<span class="sourceLineNo">099</span> public synchronized static List<String> getCandidateSystemDefaultConfigNames() {<a name="line.99"></a>
-<span class="sourceLineNo">100</span> List<String> l = new ArrayList<>();<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span> String s = System.getProperty("juneau.configFile");<a name="line.102"></a>
-<span class="sourceLineNo">103</span> if (s != null) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span> l.add(s);<a name="line.104"></a>
-<span class="sourceLineNo">105</span> return l;<a name="line.105"></a>
-<span class="sourceLineNo">106</span> }<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span> String cmd = System.getProperty("sun.java.command", "not_found").split("\\s+")[0];<a name="line.108"></a>
-<span class="sourceLineNo">109</span> if (cmd.endsWith(".jar") && ! cmd.contains("surefirebooter")) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span> cmd = cmd.replaceAll(".*?([^\\\\\\/]+)\\.jar$", "$1");<a name="line.110"></a>
-<span class="sourceLineNo">111</span> l.add(cmd + ".cfg");<a name="line.111"></a>
-<span class="sourceLineNo">112</span> cmd = cmd.replaceAll("[\\.\\_].*$", ""); // Try also without version in jar name.<a name="line.112"></a>
-<span class="sourceLineNo">113</span> l.add(cmd + ".cfg");<a name="line.113"></a>
-<span class="sourceLineNo">114</span> }<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span> Set<File> files = new TreeSet<>(Arrays.asList(new File(".").listFiles()));<a name="line.116"></a>
-<span class="sourceLineNo">117</span> for (File f : files)<a name="line.117"></a>
-<span class="sourceLineNo">118</span> if (f.getName().endsWith(".cfg"))<a name="line.118"></a>
-<span class="sourceLineNo">119</span> l.add(f.getName());<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span> l.add("juneau.cfg");<a name="line.121"></a>
-<span class="sourceLineNo">122</span> l.add("default.cfg");<a name="line.122"></a>
+<span class="sourceLineNo">091</span> * <li><js>"application.cfg"</js><a name="line.91"></a>
+<span class="sourceLineNo">092</span> * <li><js>"app.cfg"</js><a name="line.92"></a>
+<span class="sourceLineNo">093</span> * <li><js>"settings.cfg"</js><a name="line.93"></a>
+<span class="sourceLineNo">094</span> * </ol><a name="line.94"></a>
+<span class="sourceLineNo">095</span> * <p><a name="line.95"></a>
+<span class="sourceLineNo">096</span> *<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * @return<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * A list of candidate file names.<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * <br>The returned list is modifiable.<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * <br>Each call constructs a new list.<a name="line.100"></a>
+<span class="sourceLineNo">101</span> */<a name="line.101"></a>
+<span class="sourceLineNo">102</span> public synchronized static List<String> getCandidateSystemDefaultConfigNames() {<a name="line.102"></a>
+<span class="sourceLineNo">103</span> List<String> l = new ArrayList<>();<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span> String s = System.getProperty("juneau.configFile");<a name="line.105"></a>
+<span class="sourceLineNo">106</span> if (s != null) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span> l.add(s);<a name="line.107"></a>
+<span class="sourceLineNo">108</span> return l;<a name="line.108"></a>
+<span class="sourceLineNo">109</span> }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span> String cmd = System.getProperty("sun.java.command", "not_found").split("\\s+")[0];<a name="line.111"></a>
+<span class="sourceLineNo">112</span> if (cmd.endsWith(".jar") && ! cmd.contains("surefirebooter")) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span> cmd = cmd.replaceAll(".*?([^\\\\\\/]+)\\.jar$", "$1");<a name="line.113"></a>
+<span class="sourceLineNo">114</span> l.add(cmd + ".cfg");<a name="line.114"></a>
+<span class="sourceLineNo">115</span> cmd = cmd.replaceAll("[\\.\\_].*$", ""); // Try also without version in jar name.<a name="line.115"></a>
+<span class="sourceLineNo">116</span> l.add(cmd + ".cfg");<a name="line.116"></a>
+<span class="sourceLineNo">117</span> }<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span> Set<File> files = new TreeSet<>(Arrays.asList(new File(".").listFiles()));<a name="line.119"></a>
+<span class="sourceLineNo">120</span> for (File f : files)<a name="line.120"></a>
+<span class="sourceLineNo">121</span> if (f.getName().endsWith(".cfg"))<a name="line.121"></a>
+<span class="sourceLineNo">122</span> l.add(f.getName());<a name="line.122"></a>
<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span> return l;<a name="line.124"></a>
-<span class="sourceLineNo">125</span> }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span> private synchronized static Config find(String name) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span> if (name == null)<a name="line.128"></a>
-<span class="sourceLineNo">129</span> return null;<a name="line.129"></a>
-<span class="sourceLineNo">130</span> if (ConfigFileStore.DEFAULT.exists(name))<a name="line.130"></a>
-<span class="sourceLineNo">131</span> return Config.create(name).store(ConfigFileStore.DEFAULT).build();<a name="line.131"></a>
-<span class="sourceLineNo">132</span> if (ConfigClasspathStore.DEFAULT.exists(name))<a name="line.132"></a>
-<span class="sourceLineNo">133</span> return Config.create(name).store(ConfigClasspathStore.DEFAULT).build();<a name="line.133"></a>
-<span class="sourceLineNo">134</span> return null;<a name="line.134"></a>
-<span class="sourceLineNo">135</span> }<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span> //-------------------------------------------------------------------------------------------------------------------<a name="line.137"></a>
-<span class="sourceLineNo">138</span> // Configurable properties<a name="line.138"></a>
-<span class="sourceLineNo">139</span> //-------------------------------------------------------------------------------------------------------------------<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span> private static final String PREFIX = "Config.";<a name="line.141"></a>
+<span class="sourceLineNo">124</span> l.add("juneau.cfg");<a name="line.124"></a>
+<span class="sourceLineNo">125</span> l.add("default.cfg");<a name="line.125"></a>
+<span class="sourceLineNo">126</span> l.add("application.cfg");<a name="line.126"></a>
+<span class="sourceLineNo">127</span> l.add("app.cfg");<a name="line.127"></a>
+<span class="sourceLineNo">128</span> l.add("settings.cfg");<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span> return l;<a name="line.130"></a>
+<span class="sourceLineNo">131</span> }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span> private synchronized static Config find(String name) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> if (name == null)<a name="line.134"></a>
+<span class="sourceLineNo">135</span> return null;<a name="line.135"></a>
+<span class="sourceLineNo">136</span> if (ConfigFileStore.DEFAULT.exists(name))<a name="line.136"></a>
+<span class="sourceLineNo">137</span> return Config.create(name).store(ConfigFileStore.DEFAULT).build();<a name="line.137"></a>
+<span class="sourceLineNo">138</span> if (ConfigClasspathStore.DEFAULT.exists(name))<a name="line.138"></a>
+<span class="sourceLineNo">139</span> return Config.create(name).store(ConfigClasspathStore.DEFAULT).build();<a name="line.139"></a>
+<span class="sourceLineNo">140</span> return null;<a name="line.140"></a>
+<span class="sourceLineNo">141</span> }<a name="line.141"></a>
<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span> /**<a name="line.143"></a>
-<span class="sourceLineNo">144</span> * Configuration property: Configuration name.<a name="line.144"></a>
-<span class="sourceLineNo">145</span> *<a name="line.145"></a>
-<span class="sourceLineNo">146</span> * <h5 class='section'>Property:</h5><a name="line.146"></a>
-<span class="sourceLineNo">147</span> * <ul><a name="line.147"></a>
-<span class="sourceLineNo">148</span> * <li><b>Name:</b> <js>"Config.name.s"</js><a name="line.148"></a>
-<span class="sourceLineNo">149</span> * <li><b>Data type:</b> <code>String</code><a name="line.149"></a>
-<span class="sourceLineNo">150</span> * <li><b>Default:</b> <js>"Configuration.cfg"</js><a name="line.150"></a>
-<span class="sourceLineNo">151</span> * <li><b>Methods:</b><a name="line.151"></a>
-<span class="sourceLineNo">152</span> * <ul><a name="line.152"></a>
-<span class="sourceLineNo">153</span> * <li class='jm'>{@link ConfigBuilder#name(String)}<a name="line.153"></a>
-<span class="sourceLineNo">154</span> * </ul><a name="line.154"></a>
-<span class="sourceLineNo">155</span> * </ul><a name="line.155"></a>
-<span class="sourceLineNo">156</span> *<a name="line.156"></a>
-<span class="sourceLineNo">157</span> * <h5 class='section'>Description:</h5><a name="line.157"></a>
-<span class="sourceLineNo">158</span> * <p><a name="line.158"></a>
-<span class="sourceLineNo">159</span> * Specifies the configuration name.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <br>This is typically the configuration file name, although<a name="line.160"></a>
-<span class="sourceLineNo">161</span> * the name can be anything identifiable by the {@link ConfigStore} used for retrieving and storing the configuration.<a name="line.161"></a>
-<span class="sourceLineNo">162</span> */<a name="line.162"></a>
-<span class="sourceLineNo">163</span> public static final String CONFIG_name = PREFIX + "name.s";<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span> /**<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * Configuration property: Configuration store.<a name="line.166"></a>
-<span class="sourceLineNo">167</span> *<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * <h5 class='section'>Property:</h5><a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <ul><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * <li><b>Name:</b> <js>"Config.store.o"</js><a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <li><b>Data type:</b> {@link ConfigStore}<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li><b>Default:</b> {@link ConfigFileStore#DEFAULT}<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li><b>Methods:</b><a name="line.173"></a>
-<span class="sourceLineNo">174</span> * <ul><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <li class='jm'>{@link ConfigBuilder#store(ConfigStore)}<a name="line.175"></a>
-<span class="sourceLineNo">176</span> * </ul><a name="line.176"></a>
-<span class="sourceLineNo">177</span> * </ul><a name="line.177"></a>
-<span class="sourceLineNo">178</span> *<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * <h5 class='section'>Description:</h5><a name="line.179"></a>
-<span class="sourceLineNo">180</span> * <p><a name="line.180"></a>
-<span class="sourceLineNo">181</span> * The configuration store used for retrieving and storing configurations.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> */<a name="line.182"></a>
-<span class="sourceLineNo">183</span> public static final String CONFIG_store = PREFIX + "store.o";<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> /**<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * Configuration property: POJO serializer.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> *<a name="line.187"></a>
-<span class="sourceLineNo">188</span> * <h5 class='section'>Property:</h5><a name="line.188"></a>
-<span class="sourceLineNo">189</span> * <ul><a name="line.189"></a>
-<span class="sourceLineNo">190</span> * <li><b>Name:</b> <js>"Config.serializer.o"</js><a name="line.190"></a>
-<span class="sourceLineNo">191</span> * <li><b>Data type:</b> {@link WriterSerializer}<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <li><b>Default:</b> {@link SimpleJsonSerializer#DEFAULT}<a name="line.192"></a>
-<span class="sourceLineNo">193</span> * <li><b>Methods:</b><a name="line.193"></a>
-<span class="sourceLineNo">194</span> * <ul><a name="line.194"></a>
-<span class="sourceLineNo">195</span> * <li class='jm'>{@link ConfigBuilder#serializer(Class)}<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * <li class='jm'>{@link ConfigBuilder#serializer(WriterSerializer)}<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * </ul><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * </ul><a name="line.198"></a>
-<span class="sourceLineNo">199</span> *<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * <h5 class='section'>Description:</h5><a name="line.200"></a>
-<span class="sourceLineNo">201</span> * <p><a name="line.201"></a>
-<span class="sourceLineNo">202</span> * The serializer to use for serializing POJO values.<a name="line.202"></a>
-<span class="sourceLineNo">203</span> */<a name="line.203"></a>
-<span class="sourceLineNo">204</span> public static final String CONFIG_serializer = PREFIX + "serializer.o";<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span> /**<a name="line.206"></a>
-<span class="sourceLineNo">207</span> * Configuration property: POJO parser.<a name="line.207"></a>
-<span class="sourceLineNo">208</span> *<a name="line.208"></a>
-<span class="sourceLineNo">209</span> * <h5 class='section'>Property:</h5><a name="line.209"></a>
-<span class="sourceLineNo">210</span> * <ul><a name="line.210"></a>
-<span class="sourceLineNo">211</span> * <li><b>Name:</b> <js>"Config.parser.o"</js><a name="line.211"></a>
-<span class="sourceLineNo">212</span> * <li><b>Data type:</b> {@link ReaderParser}<a name="line.212"></a>
-<span class="sourceLineNo">213</span> * <li><b>Default:</b> {@link JsonParser#DEFAULT}<a name="line.213"></a>
-<span class="sourceLineNo">214</span> * <li><b>Methods:</b><a name="line.214"></a>
-<span class="sourceLineNo">215</span> * <ul><a name="line.215"></a>
-<span class="sourceLineNo">216</span> * <li class='jm'>{@link ConfigBuilder#parser(Class)}<a name="line.216"></a>
-<span class="sourceLineNo">217</span> * <li class='jm'>{@link ConfigBuilder#parser(ReaderParser)}<a name="line.217"></a>
-<span class="sourceLineNo">218</span> * </ul><a name="line.218"></a>
-<span class="sourceLineNo">219</span> * </ul><a name="line.219"></a>
-<span class="sourceLineNo">220</span> *<a name="line.220"></a>
-<span class="sourceLineNo">221</span> * <h5 class='section'>Description:</h5><a name="line.221"></a>
-<span class="sourceLineNo">222</span> * <p><a name="line.222"></a>
-<span class="sourceLineNo">223</span> * The parser to use for parsing values to POJOs.<a name="line.223"></a>
-<span class="sourceLineNo">224</span> */<a name="line.224"></a>
-<span class="sourceLineNo">225</span> public static final String CONFIG_parser = PREFIX + "parser.o";<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span> /**<a name="line.227"></a>
-<span class="sourceLineNo">228</span> * Configuration property: Value encoder.<a name="line.228"></a>
-<span class="sourceLineNo">229</span> *<a name="line.229"></a>
-<span class="sourceLineNo">230</span> * <h5 class='section'>Property:</h5><a name="line.230"></a>
-<span class="sourceLineNo">231</span> * <ul><a name="line.231"></a>
-<span class="sourceLineNo">232</span> * <li><b>Name:</b> <js>"Config.encoder.o"</js><a name="line.232"></a>
-<span class="sourceLineNo">233</span> * <li><b>Data type:</b> {@link ConfigEncoder}<a name="line.233"></a>
-<span class="sourceLineNo">234</span> * <li><b>Default:</b> {@link ConfigXorEncoder#INSTANCE}<a name="line.234"></a>
-<span class="sourceLineNo">235</span> * <li><b>Methods:</b><a name="line.235"></a>
-<span class="sourceLineNo">236</span> * <ul><a name="line.236"></a>
-<span class="sourceLineNo">237</span> * <li class='jm'>{@link ConfigBuilder#encoder(Class)}<a name="line.237"></a>
-<span class="sourceLineNo">238</span> * <li class='jm'>{@link ConfigBuilder#encoder(ConfigEncoder)}<a name="line.238"></a>
-<span class="sourceLineNo">239</span> * </ul><a name="line.239"></a>
-<span class="sourceLineNo">240</span> * </ul><a name="line.240"></a>
-<span class="sourceLineNo">241</span> *<a name="line.241"></a>
-<span class="sourceLineNo">242</span> * <h5 class='section'>Description:</h5><a name="line.242"></a>
-<span class="sourceLineNo">243</span> * <p><a name="line.243"></a>
-<span class="sourceLineNo">244</span> * The encoder to use for encoding encoded configuration values.<a name="line.244"></a>
-<span class="sourceLineNo">245</span> */<a name="line.245"></a>
-<span class="sourceLineNo">246</span> public static final String CONFIG_encoder = PREFIX + "encoder.o";<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span> /**<a name="line.248"></a>
-<span class="sourceLineNo">249</span> * Configuration property: SVL variable resolver.<a name="line.249"></a>
-<span class="sourceLineNo">250</span> *<a name="line.250"></a>
-<span class="sourceLineNo">251</span> * <h5 class='section'>Property:</h5><a name="line.251"></a>
-<span class="sourceLineNo">252</span> * <ul><a name="line.252"></a>
-<span class="sourceLineNo">253</span> * <li><b>Name:</b> <js>"Config.varResolver.o"</js><a name="line.253"></a>
-<span class="sourceLineNo">254</span> * <li><b>Data type:</b> {@link VarResolver}<a name="line.254"></a>
-<span class="sourceLineNo">255</span> * <li><b>Default:</b> {@link VarResolver#DEFAULT}<a name="line.255"></a>
-<span class="sourceLineNo">256</span> * <li><b>Methods:</b><a name="line.256"></a>
-<span class="sourceLineNo">257</span> * <ul><a name="line.257"></a>
-<span class="sourceLineNo">258</span> * <li class='jm'>{@link ConfigBuilder#varResolver(Class)}<a name="line.258"></a>
-<span class="sourceLineNo">259</span> * <li class='jm'>{@link ConfigBuilder#varResolver(VarResolver)}<a name="line.259"></a>
-<span class="sourceLineNo">260</span> * </ul><a name="line.260"></a>
-<span class="sourceLineNo">261</span> * </ul><a name="line.261"></a>
-<span class="sourceLineNo">262</span> *<a name="line.262"></a>
-<span class="sourceLineNo">263</span> * <h5 class='section'>Description:</h5><a name="line.263"></a>
-<span class="sourceLineNo">264</span> * <p><a name="line.264"></a>
-<span class="sourceLineNo">265</span> * The resolver to use for resolving SVL variables.<a name="line.265"></a>
-<span class="sourceLineNo">266</span> */<a name="line.266"></a>
-<span class="sourceLineNo">267</span> public static final String CONFIG_varResolver = PREFIX + "varResolver.o";<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span> /**<a name="line.269"></a>
-<span class="sourceLineNo">270</span> * Configuration property: Binary value line length.<a name="line.270"></a>
-<span class="sourceLineNo">271</span> *<a name="line.271"></a>
-<span class="sourceLineNo">272</span> * <h5 class='section'>Property:</h5><a name="line.272"></a>
-<span class="sourceLineNo">273</span> * <ul><a name="line.273"></a>
-<span class="sourceLineNo">274</span> * <li><b>Name:</b> <js>"Config.binaryLineLength.i"</js><a name="line.274"></a>
-<span class="sourceLineNo">275</span> * <li><b>Data type:</b> <code>Integer</code><a name="line.275"></a>
-<span class="sourceLineNo">276</span> * <li><b>Default:</b> <code>-1</code><a name="line.276"></a>
-<span class="sourceLineNo">277</span> * <li><b>Methods:</b><a name="line.277"></a>
-<span class="sourceLineNo">278</span> * <ul><a name="line.278"></a>
-<span class="sourceLineNo">279</span> * <li class='jm'>{@link ConfigBuilder#binaryLineLength(int)}<a name="line.279"></a>
-<span class="sourceLineNo">280</span> * </ul><a name="line.280"></a>
-<span class="sourceLineNo">281</span> * </ul><a name="line.281"></a>
-<span class="sourceLineNo">282</span> *<a name="line.282"></a>
-<span class="sourceLineNo">283</span> * <h5 class='section'>Description:</h5><a name="line.283"></a>
-<span class="sourceLineNo">284</span> * <p><a name="line.284"></a>
-<span class="sourceLineNo">285</span> * When serializing binary values, lines will be split after this many characters.<a name="line.285"></a>
-<span class="sourceLineNo">286</span> * <br>Use <code>-1</code> to represent no line splitting.<a name="line.286"></a>
-<span class="sourceLineNo">287</span> */<a name="line.287"></a>
-<span class="sourceLineNo">288</span> public static final String CONFIG_binaryLineLength = PREFIX + "binaryLineLength.i";<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span> /**<a name="line.290"></a>
-<span class="sourceLineNo">291</span> * Configuration property: Binary value format.<a name="line.291"></a>
-<span class="sourceLineNo">292</span> *<a name="line.292"></a>
-<span class="sourceLineNo">293</span> * <h5 class='section'>Property:</h5><a name="line.293"></a>
-<span class="sourceLineNo">294</span> * <ul><a name="line.294"></a>
-<span class="sourceLineNo">295</span> * <li><b>Name:</b> <js>"Config.binaryFormat.s"</js><a name="line.295"></a>
-<span class="sourceLineNo">296</span> * <li><b>Data type:</b> {@link BinaryFormat}<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * <li><b>Default:</b> {@link BinaryFormat#BASE64}<a name="line.297"></a>
-<span class="sourceLineNo">298</span> * <li><b>Methods:</b><a name="line.298"></a>
-<span class="sourceLineNo">299</span> * <ul><a name="line.299"></a>
-<span class="sourceLineNo">300</span> * <li class='jm'>{@link ConfigBuilder#binaryFormat(BinaryFormat)}<a name="line.300"></a>
-<span class="sourceLineNo">301</span> * </ul><a name="line.301"></a>
-<span class="sourceLineNo">302</span> * </ul><a name="line.302"></a>
-<span class="sourceLineNo">303</span> *<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * <h5 class='section'>Description:</h5><a name="line.304"></a>
-<span class="sourceLineNo">305</span> * <p><a name="line.305"></a>
-<span class="sourceLineNo">306</span> * The format to use when persisting byte arrays.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * <p><a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Possible values:<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * <ul><a name="line.310"></a>
-<span class="sourceLineNo">311</span> * <li>{@link BinaryFormat#BASE64} - BASE64-encoded string.<a name="line.311"></a>
-<span class="sourceLineNo">312</span> * <li>{@link BinaryFormat#HEX} - Hexadecimal.<a name="line.312"></a>
-<span class="sourceLineNo">313</span> * <li>{@link BinaryFormat#SPACED_HEX} - Hexadecimal with spaces between bytes.<a name="line.313"></a>
-<span class="sourceLineNo">314</span> * </ul><a name="line.314"></a>
-<span class="sourceLineNo">315</span> */<a name="line.315"></a>
-<span class="sourceLineNo">316</span> public static final String CONFIG_binaryFormat = PREFIX + "binaryFormat.s";<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span> /**<a name="line.318"></a>
-<span class="sourceLineNo">319</span> * Configuration property: Multi-line values should always be on separate lines.<a name="line.319"></a>
-<span class="sourceLineNo">320</span> *<a name="line.320"></a>
-<span class="sourceLineNo">321</span> * <h5 class='section'>Property:</h5><a name="line.321"></a>
-<span class="sourceLineNo">322</span> * <ul><a name="line.322"></a>
-<span class="sourceLineNo">323</span> * <li><b>Name:</b> <js>"Config.multiLineValuesOnSeparateLines.b"</js><a name="line.323"></a>
-<span class="sourceLineNo">324</span> * <li><b>Data type:</b> <code>Boolean</code><a name="line.324"></a>
-<span class="sourceLineNo">325</span> * <li><b>Default:</b> <jk>false</jk><a name="line.325"></a>
-<span class="sourceLineNo">326</span> * <li><b>Methods:</b><a name="line.326"></a>
-<span class="sourceLineNo">327</span> * <ul><a name="line.327"></a>
-<span class="sourceLineNo">328</span> * <li class='jm'>{@link ConfigBuilder#multiLineValuesOnSeparateLines()}<a name="line.328"></a>
-<span class="sourceLineNo">329</span> * </ul><a name="line.329"></a>
-<span class="sourceLineNo">330</span> * </ul><a name="line.330"></a>
-<span class="sourceLineNo">331</span> *<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * <h5 class='section'>Description:</h5><a name="line.332"></a>
-<span class="sourceLineNo">333</span> * <p><a name="line.333"></a>
-<span class="sourceLineNo">334</span> * When enabled, multi-line values will always be placed on a separate line from the key.<a name="line.334"></a>
-<span class="sourceLineNo">335</span> */<a name="line.335"></a>
-<span class="sourceLineNo">336</span> public static final String CONFIG_multiLineValuesOnSeparateLines = PREFIX + "multiLineValuesOnSeparateLines.b";<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span> /**<a name="line.338"></a>
-<span class="sourceLineNo">339</span> * Configuration property: Read-only.<a name="line.339"></a>
-<span class="sourceLineNo">340</span> *<a name="line.340"></a>
-<span class="sourceLineNo">341</span> * <h5 class='section'>Property:</h5><a name="line.341"></a>
-<span class="sourceLineNo">342</span> * <ul><a name="line.342"></a>
-<span class="sourceLineNo">343</span> * <li><b>Name:</b> <js>"Config.readOnly.b"</js><a name="line.343"></a>
-<span class="sourceLineNo">344</span> * <li><b>Data type:</b> <code>Boolean</code><a name="line.344"></a>
-<span class="sourceLineNo">345</span> * <li><b>Default:</b> <jk>false</jk><a name="line.345"></a>
-<span class="sourceLineNo">346</span> * <li><b>Methods:</b><a name="line.346"></a>
-<span class="sourceLineNo">347</span> * <ul><a name="line.347"></a>
-<span class="sourceLineNo">348</span> * <li class='jm'>{@link ConfigBuilder#readOnly()}<a name="line.348"></a>
-<span class="sourceLineNo">349</span> * </ul><a name="line.349"></a>
-<span class="sourceLineNo">350</span> * </ul><a name="line.350"></a>
-<span class="sourceLineNo">351</span> *<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * <h5 class='section'>Description:</h5><a name="line.352"></a>
-<span class="sourceLineNo">353</span> * <p><a name="line.353"></a>
-<span class="sourceLineNo">354</span> * When enabled, attempts to call any setters on this object will throw an {@link UnsupportedOperationException}.<a name="line.354"></a>
-<span class="sourceLineNo">355</span> */<a name="line.355"></a>
-<span class="sourceLineNo">356</span> public static final String CONFIG_readOnly = PREFIX + "readOnly.b";<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span> //-------------------------------------------------------------------------------------------------------------------<a name="line.358"></a>
-<span class="sourceLineNo">359</span> // Instance<a name="line.359"></a>
-<span class="sourceLineNo">360</span> //-------------------------------------------------------------------------------------------------------------------<a name="line.360"></a>
-<span class="sourceLineNo">361</span><a name="line.361"></a>
-<span class="sourceLineNo">362</span> private final String name;<a name="line.362"></a>
-<span class="sourceLineNo">363</span> private final ConfigStore store;<a name="line.363"></a>
-<span class="sourceLineNo">364</span> private final WriterSerializer serializer;<a name="line.364"></a>
-<span class="sourceLineNo">365</span> private final ReaderParser parser;<a name="line.365"></a>
-<span class="sourceLineNo">366</span> private final ConfigEncoder encoder;<a name="line.366"></a>
-<span class="sourceLineNo">367</span> private final VarResolverSession varSession;<a name="line.367"></a>
-<span class="sourceLineNo">368</span> private final int binaryLineLength;<a name="line.368"></a>
-<span class="sourceLineNo">369</span> private final BinaryFormat binaryFormat;<a name="line.369"></a>
-<span class="sourceLineNo">370</span> private final boolean multiLineValuesOnSeparateLines, readOnly;<a name="line.370"></a>
-<span class="sourceLineNo">371</span> private final ConfigMap configMap;<a name="line.371"></a>
-<span class="sourceLineNo">372</span> private final BeanSession beanSession;<a name="line.372"></a>
-<span class="sourceLineNo">373</span> private final List<ConfigEventListener> listeners = Collections.synchronizedList(new LinkedList<ConfigEventListener>());<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span> /**<a name="line.376"></a>
-<span class="sourceLineNo">377</span> * Instantiates a new clean-slate {@link ConfigBuilder} object.<a name="line.377"></a>
-<span class="sourceLineNo">378</span> *<a name="line.378"></a>
-<span class="sourceLineNo">379</span> * <p><a name="line.379"></a>
-<span class="sourceLineNo">380</span> * This is equivalent to simply calling <code><jk>new</jk> ConfigBuilder()</code>.<a name="line.380"></a>
-<span class="sourceLineNo">381</span> *<a name="line.381"></a>
-<span class="sourceLineNo">382</span> * @return A new {@link ConfigBuilder} object.<a name="line.382"></a>
-<span class="sourceLineNo">383</span> */<a name="line.383"></a>
-<span class="sourceLineNo">384</span> public static ConfigBuilder create() {<a name="line.384"></a>
-<span class="sourceLineNo">385</span> return new ConfigBuilder();<a name="line.385"></a>
-<span class="sourceLineNo">386</span> }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span> /**<a name="line.388"></a>
-<span class="sourceLineNo">389</span> * Same as {@link #create()} but initializes the builder with the specified config name.<a name="line.389"></a>
-<span class="sourceLineNo">390</span> *<a name="line.390"></a>
-<span class="sourceLineNo">391</span> * <p><a name="line.391"></a>
-<span class="sourceLineNo">392</span> * This is equivalent to simply calling <code><jk>new</jk> ConfigBuilder().name(name)</code>.<a name="line.392"></a>
-<span class="sourceLineNo">393</span> *<a name="line.393"></a>
-<span class="sourceLineNo">394</span> * @param name The configuration name.<a name="line.394"></a>
-<span class="sourceLineNo">395</span> * @return A new {@link ConfigBuilder} object.<a name="line.395"></a>
-<span class="sourceLineNo">396</span> */<a name="line.396"></a>
-<span class="sourceLineNo">397</span> public static ConfigBuilder create(String name) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span> return new ConfigBuilder().name(name);<a name="line.398"></a>
-<span class="sourceLineNo">399</span> }<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span> @Override /* Context */<a name="line.401"></a>
-<span class="sourceLineNo">402</span> public ConfigBuilder builder() {<a name="line.402"></a>
-<span class="sourceLineNo">403</span> return new ConfigBuilder(getPropertyStore());<a name="line.403"></a>
-<span class="sourceLineNo">404</span> }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span> /**<a name="line.406"></a>
-<span class="sourceLineNo">407</span> * Constructor.<a name="line.407"></a>
-<span class="sourceLineNo">408</span> *<a name="line.408"></a>
-<span class="sourceLineNo">409</span> * @param ps<a name="line.409"></a>
-<span class="sourceLineNo">410</span> * The property store containing all the settings for this object.<a name="line.410"></a>
-<span class="sourceLineNo">411</span> * @throws IOException<a name="line.411"></a>
-<span class="sourceLineNo">412</span> */<a name="line.412"></a>
-<span class="sourceLineNo">413</span> public Config(PropertyStore ps) throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> super(ps, true);<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span> name = getStringProperty(CONFIG_name, "Configuration.cfg");<a name="line.416"></a>
-<span class="sourceLineNo">417</span> store = getInstanceProperty(CONFIG_store, ConfigStore.class, ConfigFileStore.DEFAULT);<a name="line.417"></a>
-<span class="sourceLineNo">418</span> configMap = store.getMap(name);<a name="line.418"></a>
-<span class="sourceLineNo">419</span> configMap.register(this);<a name="line.419"></a>
-<span class="sourceLineNo">420</span> serializer = getInstanceProperty(CONFIG_serializer, WriterSerializer.class, SimpleJsonSerializer.DEFAULT);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> parser = getInstanceProperty(CONFIG_parser, ReaderParser.class, JsonParser.DEFAULT);<a name="line.421"></a>
-<span class="sourceLineNo">422</span> beanSession = parser.createBeanSession();<a name="line.422"></a>
-<span class="sourceLineNo">423</span> encoder = getInstanceProperty(CONFIG_encoder, ConfigEncoder.class, ConfigXorEncoder.INSTANCE);<a name="line.423"></a>
-<span class="sourceLineNo">424</span> varSession = getInstanceProperty(CONFIG_varResolver, VarResolver.class, VarResolver.DEFAULT)<a name="line.424"></a>
-<span class="sourceLineNo">425</span> .builder()<a name="line.425"></a>
-<span class="sourceLineNo">426</span> .vars(ConfigVar.class)<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .contextObject(ConfigVar.SESSION_config, this)<a name="line.427"></a>
-<span class="sourceLineNo">428</span> .build()<a name="line.428"></a>
-<span class="sourceLineNo">429</span> .createSession();<a name="line.429"></a>
-<span class="sourceLineNo">430</span> binaryLineLength = getIntegerProperty(CONFIG_binaryLineLength, -1);<a name="line.430"></a>
-<span class="sourceLineNo">431</span> binaryFormat = getProperty(CONFIG_binaryFormat, BinaryFormat.class, BinaryFormat.BASE64);<a name="line.431"></a>
-<span class="sourceLineNo">432</span> multiLineValuesOnSeparateLines = getBooleanProperty(CONFIG_multiLineValuesOnSeparateLines, false);<a name="line.432"></a>
-<span class="sourceLineNo">433</span> readOnly = getBooleanProperty(CONFIG_readOnly, false);<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> Config(Config copyFrom, VarResolverSession varSession) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span> super(null, true);<a name="line.437"></a>
-<span class="sourceLineNo">438</span> name = copyFrom.name;<a name="line.438"></a>
-<span class="sourceLineNo">439</span> store = copyFrom.store;<a name="line.439"></a>
-<span class="sourceLineNo">440</span> configMap = copyFrom.configMap;<a name="line.440"></a>
-<span class="sourceLineNo">441</span> configMap.register(this);<a name="line.441"></a>
-<span class="sourceLineNo">442</span> serializer = copyFrom.serializer;<a name="line.442"></a>
-<span class="sourceLineNo">443</span> parser = copyFrom.parser;<a name="line.443"></a>
-<span class="sourceLineNo">444</span> encoder = copyFrom.encoder;<a name="line.444"></a>
-<span class="sourceLineNo">445</span> this.varSession = varSession;<a name="line.445"></a>
-<span class="sourceLineNo">446</span> binaryLineLength = copyFrom.binaryLineLength;<a name="line.446"></a>
-<span class="sourceLineNo">447</span> binaryFormat = copyFrom.binaryFormat;<a name="line.447"></a>
-<span class="sourceLineNo">448</span> multiLineValuesOnSeparateLines = copyFrom.multiLineValuesOnSeparateLines;<a name="line.448"></a>
-<span class="sourceLineNo">449</span> readOnly = copyFrom.readOnly;<a name="line.449"></a>
-<span class="sourceLineNo">450</span> beanSession = copyFrom.beanSession;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> }<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span> /**<a name="line.453"></a>
-<span class="sourceLineNo">454</span> * Creates a copy of this config using the specified var session for resolving variables.<a name="line.454"></a>
-<span class="sourceLineNo">455</span> *<a name="line.455"></a>
-<span class="sourceLineNo">456</span> * <p><a name="line.456"></a>
-<span class="sourceLineNo">457</span> * This creates a shallow copy of the config but replacing the variable resolver.<a name="line.457"></a>
-<span class="sourceLineNo">458</span> *<a name="line.458"></a>
-<span class="sourceLineNo">459</span> * @param varSession The var session used for resolving string variables.<a name="line.459"></a>
-<span class="sourceLineNo">460</span> * @return A new config object.<a name="line.460"></a>
-<span class="sourceLineNo">461</span> */<a name="line.461"></a>
-<span class="sourceLineNo">462</span> public Config resolving(VarResolverSession varSession) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> return new Config(this, varSession);<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span> /**<a name="line.466"></a>
-<span class="sourceLineNo">467</span> * Returns the name associated with this config (usually a file name).<a name="line.467"></a>
-<span class="sourceLineNo">468</span> *<a name="line.468"></a>
-<span class="sourceLineNo">469</span> * @return The name associated with this config, or <jk>null</jk> if it has no name.<a name="line.469"></a>
-<span class="sourceLineNo">470</span> */<a name="line.470"></a>
-<span class="sourceLineNo">471</span> public String getName() {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> return name;<a name="line.472"></a>
-<span class="sourceLineNo">473</span> }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.475"></a>
-<span class="sourceLineNo">476</span> // Workhorse getters<a name="line.476"></a>
-<span class="sourceLineNo">477</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.477"></a>
-<span class="sourceLineNo">478</span><a name="line.478"></a>
-<span class="sourceLineNo">479</span> /**<a name="line.479"></a>
-<span class="sourceLineNo">480</span> * Returns the specified value as a string from the config file.<a name="line.480"></a>
-<span class="sourceLineNo">481</span> *<a name="line.481"></a>
-<span class="sourceLineNo">482</span> * <p><a name="line.482"></a>
-<span class="sourceLineNo">483</span> * Unlike {@link #getString(String)}, this method doesn't replace SVL variables.<a name="line.483"></a>
-<span class="sourceLineNo">484</span> *<a name="line.484"></a>
-<span class="sourceLineNo">485</span> * @param key The key.<a name="line.485"></a>
-<span class="sourceLineNo">486</span> * @return The value, or <jk>null</jk> if the section or value doesn't exist.<a name="line.486"></a>
-<span class="sourceLineNo">487</span> */<a name="line.487"></a>
-<span class="sourceLineNo">488</span> public String get(String key) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span> String sname = sname(key);<a name="line.490"></a>
-<span class="sourceLineNo">491</span> String skey = skey(key);<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span> ConfigEntry ce = configMap.getEntry(sname, skey);<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span> if (ce == null || ce.getValue() == null)<a name="line.495"></a>
-<span class="sourceLineNo">496</span> return null;<a name="line.496"></a>
-<span class="sourceLineNo">497</span><a name="line.497"></a>
-<span class="sourceLineNo">498</span> String val = ce.getValue();<a name="line.498"></a>
-<span class="sourceLineNo">499</span> for (ConfigMod m : ConfigMod.asModifiersReverse(ce.getModifiers())) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span> if (m == ENCODED) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span> if (encoder.isEncoded(val))<a name="line.501"></a>
-<span class="sourceLineNo">502</span> val = encoder.decode(key, val);<a name="line.502"></a>
-<span class="sourceLineNo">503</span> }<a name="line.503"></a>
-<span class="sourceLineNo">504</span> }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span> return val;<a name="line.506"></a>
-<span class="sourceLineNo">507</span> }<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.510"></a>
-<span class="sourceLineNo">511</span> // Workhorse setters<a name="line.511"></a>
-<span class="sourceLineNo">512</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.512"></a>
-<span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span> /**<a name="line.514"></a>
-<span class="sourceLineNo">515</span> * Sets a value in this config.<a name="line.515"></a>
-<span class="sourceLineNo">516</span> *<a name="line.516"></a>
-<span class="sourceLineNo">517</span> * @param key The key.<a name="line.517"></a>
-<span class="sourceLineNo">518</span> * @param value The value.<a name="line.518"></a>
-<span class="sourceLineNo">519</span> * @return This object (for method chaining).<a name="line.519"></a>
-<span class="sourceLineNo">520</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.520"></a>
-<span class="sourceLineNo">521</span> */<a name="line.521"></a>
-<span class="sourceLineNo">522</span> public Config set(String key, String value) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span> checkWrite();<a name="line.523"></a>
-<span class="sourceLineNo">524</span> assertFieldNotNull(key, "key");<a name="line.524"></a>
-<span class="sourceLineNo">525</span> String sname = sname(key);<a name="line.525"></a>
-<span class="sourceLineNo">526</span> String skey = skey(key);<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span> ConfigEntry ce = configMap.getEntry(sname, skey);<a name="line.528"></a>
-<span class="sourceLineNo">529</span> if (ce == null && value == null)<a name="line.529"></a>
-<span class="sourceLineNo">530</span> return this;<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> String mod = ce == null ? "" : ce.getModifiers();<a name="line.532"></a>
+<span class="sourceLineNo">143</span> //-------------------------------------------------------------------------------------------------------------------<a name="line.143"></a>
+<span class="sourceLineNo">144</span> // Configurable properties<a name="line.144"></a>
+<span class="sourceLineNo">145</span> //-------------------------------------------------------------------------------------------------------------------<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span> private static final String PREFIX = "Config.";<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span> /**<a name="line.149"></a>
+<span class="sourceLineNo">150</span> * Configuration property: Configuration name.<a name="line.150"></a>
+<span class="sourceLineNo">151</span> *<a name="line.151"></a>
+<span class="sourceLineNo">152</span> * <h5 class='section'>Property:</h5><a name="line.152"></a>
+<span class="sourceLineNo">153</span> * <ul><a name="line.153"></a>
+<span class="sourceLineNo">154</span> * <li><b>Name:</b> <js>"Config.name.s"</js><a name="line.154"></a>
+<span class="sourceLineNo">155</span> * <li><b>Data type:</b> <code>String</code><a name="line.155"></a>
+<span class="sourceLineNo">156</span> * <li><b>Default:</b> <js>"Configuration.cfg"</js><a name="line.156"></a>
+<span class="sourceLineNo">157</span> * <li><b>Methods:</b><a name="line.157"></a>
+<span class="sourceLineNo">158</span> * <ul><a name="line.158"></a>
+<span class="sourceLineNo">159</span> * <li class='jm'>{@link ConfigBuilder#name(String)}<a name="line.159"></a>
+<span class="sourceLineNo">160</span> * </ul><a name="line.160"></a>
+<span class="sourceLineNo">161</span> * </ul><a name="line.161"></a>
+<span class="sourceLineNo">162</span> *<a name="line.162"></a>
+<span class="sourceLineNo">163</span> * <h5 class='section'>Description:</h5><a name="line.163"></a>
+<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
+<span class="sourceLineNo">165</span> * Specifies the configuration name.<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * <br>This is typically the configuration file name, although<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * the name can be anything identifiable by the {@link ConfigStore} used for retrieving and storing the configuration.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> */<a name="line.168"></a>
+<span class="sourceLineNo">169</span> public static final String CONFIG_name = PREFIX + "name.s";<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span> /**<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * Configuration property: Configuration store.<a name="line.172"></a>
+<span class="sourceLineNo">173</span> *<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * <h5 class='section'>Property:</h5><a name="line.174"></a>
+<span class="sourceLineNo">175</span> * <ul><a name="line.175"></a>
+<span class="sourceLineNo">176</span> * <li><b>Name:</b> <js>"Config.store.o"</js><a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <li><b>Data type:</b> {@link ConfigStore}<a name="line.177"></a>
+<span class="sourceLineNo">178</span> * <li><b>Default:</b> {@link ConfigFileStore#DEFAULT}<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <li><b>Methods:</b><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <ul><a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li class='jm'>{@link ConfigBuilder#store(ConfigStore)}<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ul><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * </ul><a name="line.183"></a>
+<span class="sourceLineNo">184</span> *<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * <h5 class='section'>Description:</h5><a name="line.185"></a>
+<span class="sourceLineNo">186</span> * <p><a name="line.186"></a>
+<span class="sourceLineNo">187</span> * The configuration store used for retrieving and storing configurations.<a name="line.187"></a>
+<span class="sourceLineNo">188</span> */<a name="line.188"></a>
+<span class="sourceLineNo">189</span> public static final String CONFIG_store = PREFIX + "store.o";<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span> /**<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * Configuration property: POJO serializer.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> *<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * <h5 class='section'>Property:</h5><a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <ul><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * <li><b>Name:</b> <js>"Config.serializer.o"</js><a name="line.196"></a>
+<span class="sourceLineNo">197</span> * <li><b>Data type:</b> {@link WriterSerializer}<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * <li><b>Default:</b> {@link SimpleJsonSerializer#DEFAULT}<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * <li><b>Methods:</b><a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <ul><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * <li class='jm'>{@link ConfigBuilder#serializer(Class)}<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * <li class='jm'>{@link ConfigBuilder#serializer(WriterSerializer)}<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * </ul><a name="line.203"></a>
+<span class="sourceLineNo">204</span> * </ul><a name="line.204"></a>
+<span class="sourceLineNo">205</span> *<a name="line.205"></a>
+<span class="sourceLineNo">206</span> * <h5 class='section'>Description:</h5><a name="line.206"></a>
+<span class="sourceLineNo">207</span> * <p><a name="line.207"></a>
+<span class="sourceLineNo">208</span> * The serializer to use for serializing POJO values.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span> public static final String CONFIG_serializer = PREFIX + "serializer.o";<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span> /**<a name="line.212"></a>
+<span class="sourceLineNo">213</span> * Configuration property: POJO parser.<a name="line.213"></a>
+<span class="sourceLineNo">214</span> *<a name="line.214"></a>
+<span class="sourceLineNo">215</span> * <h5 class='section'>Property:</h5><a name="line.215"></a>
+<span class="sourceLineNo">216</span> * <ul><a name="line.216"></a>
+<span class="sourceLineNo">217</span> * <li><b>Name:</b> <js>"Config.parser.o"</js><a name="line.217"></a>
+<span class="sourceLineNo">218</span> * <li><b>Data type:</b> {@link ReaderParser}<a name="line.218"></a>
+<span class="sourceLineNo">219</span> * <li><b>Default:</b> {@link JsonParser#DEFAULT}<a name="line.219"></a>
+<span class="sourceLineNo">220</span> * <li><b>Methods:</b><a name="line.220"></a>
+<span class="sourceLineNo">221</span> * <ul><a name="line.221"></a>
+<span class="sourceLineNo">222</span> * <li class='jm'>{@link ConfigBuilder#parser(Class)}<a name="line.222"></a>
+<span class="sourceLineNo">223</span> * <li class='jm'>{@link ConfigBuilder#parser(ReaderParser)}<a name="line.223"></a>
+<span class="sourceLineNo">224</span> * </ul><a name="line.224"></a>
+<span class="sourceLineNo">225</span> * </ul><a name="line.225"></a>
+<span class="sourceLineNo">226</span> *<a name="line.226"></a>
+<span class="sourceLineNo">227</span> * <h5 class='section'>Description:</h5><a name="line.227"></a>
+<span class="sourceLineNo">228</span> * <p><a name="line.228"></a>
+<span class="sourceLineNo">229</span> * The parser to use for parsing values to POJOs.<a name="line.229"></a>
+<span class="sourceLineNo">230</span> */<a name="line.230"></a>
+<span class="sourceLineNo">231</span> public static final String CONFIG_parser = PREFIX + "parser.o";<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Configuration property: Value encoder.<a name="line.234"></a>
+<span class="sourceLineNo">235</span> *<a name="line.235"></a>
+<span class="sourceLineNo">236</span> * <h5 class='section'>Property:</h5><a name="line.236"></a>
+<span class="sourceLineNo">237</span> * <ul><a name="line.237"></a>
+<span class="sourceLineNo">238</span> * <li><b>Name:</b> <js>"Config.encoder.o"</js><a name="line.238"></a>
+<span class="sourceLineNo">239</span> * <li><b>Data type:</b> {@link ConfigEncoder}<a name="line.239"></a>
+<span class="sourceLineNo">240</span> * <li><b>Default:</b> {@link ConfigXorEncoder#INSTANCE}<a name="line.240"></a>
+<span class="sourceLineNo">241</span> * <li><b>Methods:</b><a name="line.241"></a>
+<span class="sourceLineNo">242</span> * <ul><a name="line.242"></a>
+<span class="sourceLineNo">243</span> * <li class='jm'>{@link ConfigBuilder#encoder(Class)}<a name="line.243"></a>
+<span class="sourceLineNo">244</span> * <li class='jm'>{@link ConfigBuilder#encoder(ConfigEncoder)}<a name="line.244"></a>
+<span class="sourceLineNo">245</span> * </ul><a name="line.245"></a>
+<span class="sourceLineNo">246</span> * </ul><a name="line.246"></a>
+<span class="sourceLineNo">247</span> *<a name="line.247"></a>
+<span class="sourceLineNo">248</span> * <h5 class='section'>Description:</h5><a name="line.248"></a>
+<span class="sourceLineNo">249</span> * <p><a name="line.249"></a>
+<span class="sourceLineNo">250</span> * The encoder to use for encoding encoded configuration values.<a name="line.250"></a>
+<span class="sourceLineNo">251</span> */<a name="line.251"></a>
+<span class="sourceLineNo">252</span> public static final String CONFIG_encoder = PREFIX + "encoder.o";<a name="line.252"></a>
+<span class="sourceLineNo">253</span><a name="line.253"></a>
+<span class="sourceLineNo">254</span> /**<a name="line.254"></a>
+<span class="sourceLineNo">255</span> * Configuration property: SVL variable resolver.<a name="line.255"></a>
+<span class="sourceLineNo">256</span> *<a name="line.256"></a>
+<span class="sourceLineNo">257</span> * <h5 class='section'>Property:</h5><a name="line.257"></a>
+<span class="sourceLineNo">258</span> * <ul><a name="line.258"></a>
+<span class="sourceLineNo">259</span> * <li><b>Name:</b> <js>"Config.varResolver.o"</js><a name="line.259"></a>
+<span class="sourceLineNo">260</span> * <li><b>Data type:</b> {@link VarResolver}<a name="line.260"></a>
+<span class="sourceLineNo">261</span> * <li><b>Default:</b> {@link VarResolver#DEFAULT}<a name="line.261"></a>
+<span class="sourceLineNo">262</span> * <li><b>Methods:</b><a name="line.262"></a>
+<span class="sourceLineNo">263</span> * <ul><a name="line.263"></a>
+<span class="sourceLineNo">264</span> * <li class='jm'>{@link ConfigBuilder#varResolver(Class)}<a name="line.264"></a>
+<span class="sourceLineNo">265</span> * <li class='jm'>{@link ConfigBuilder#varResolver(VarResolver)}<a name="line.265"></a>
+<span class="sourceLineNo">266</span> * </ul><a name="line.266"></a>
+<span class="sourceLineNo">267</span> * </ul><a name="line.267"></a>
+<span class="sourceLineNo">268</span> *<a name="line.268"></a>
+<span class="sourceLineNo">269</span> * <h5 class='section'>Description:</h5><a name="line.269"></a>
+<span class="sourceLineNo">270</span> * <p><a name="line.270"></a>
+<span class="sourceLineNo">271</span> * The resolver to use for resolving SVL variables.<a name="line.271"></a>
+<span class="sourceLineNo">272</span> */<a name="line.272"></a>
+<span class="sourceLineNo">273</span> public static final String CONFIG_varResolver = PREFIX + "varResolver.o";<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span> /**<a name="line.275"></a>
+<span class="sourceLineNo">276</span> * Configuration property: Binary value line length.<a name="line.276"></a>
+<span class="sourceLineNo">277</span> *<a name="line.277"></a>
+<span class="sourceLineNo">278</span> * <h5 class='section'>Property:</h5><a name="line.278"></a>
+<span class="sourceLineNo">279</span> * <ul><a name="line.279"></a>
+<span class="sourceLineNo">280</span> * <li><b>Name:</b> <js>"Config.binaryLineLength.i"</js><a name="line.280"></a>
+<span class="sourceLineNo">281</span> * <li><b>Data type:</b> <code>Integer</code><a name="line.281"></a>
+<span class="sourceLineNo">282</span> * <li><b>Default:</b> <code>-1</code><a name="line.282"></a>
+<span class="sourceLineNo">283</span> * <li><b>Methods:</b><a name="line.283"></a>
+<span class="sourceLineNo">284</span> * <ul><a name="line.284"></a>
+<span class="sourceLineNo">285</span> * <li class='jm'>{@link ConfigBuilder#binaryLineLength(int)}<a name="line.285"></a>
+<span class="sourceLineNo">286</span> * </ul><a name="line.286"></a>
+<span class="sourceLineNo">287</span> * </ul><a name="line.287"></a>
+<span class="sourceLineNo">288</span> *<a name="line.288"></a>
+<span class="sourceLineNo">289</span> * <h5 class='section'>Description:</h5><a name="line.289"></a>
+<span class="sourceLineNo">290</span> * <p><a name="line.290"></a>
+<span class="sourceLineNo">291</span> * When serializing binary values, lines will be split after this many characters.<a name="line.291"></a>
+<span class="sourceLineNo">292</span> * <br>Use <code>-1</code> to represent no line splitting.<a name="line.292"></a>
+<span class="sourceLineNo">293</span> */<a name="line.293"></a>
+<span class="sourceLineNo">294</span> public static final String CONFIG_binaryLineLength = PREFIX + "binaryLineLength.i";<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span> /**<a name="line.296"></a>
+<span class="sourceLineNo">297</span> * Configuration property: Binary value format.<a name="line.297"></a>
+<span class="sourceLineNo">298</span> *<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * <h5 class='section'>Property:</h5><a name="line.299"></a>
+<span class="sourceLineNo">300</span> * <ul><a name="line.300"></a>
+<span class="sourceLineNo">301</span> * <li><b>Name:</b> <js>"Config.binaryFormat.s"</js><a name="line.301"></a>
+<span class="sourceLineNo">302</span> * <li><b>Data type:</b> {@link BinaryFormat}<a name="line.302"></a>
+<span class="sourceLineNo">303</span> * <li><b>Default:</b> {@link BinaryFormat#BASE64}<a name="line.303"></a>
+<span class="sourceLineNo">304</span> * <li><b>Methods:</b><a name="line.304"></a>
+<span class="sourceLineNo">305</span> * <ul><a name="line.305"></a>
+<span class="sourceLineNo">306</span> * <li class='jm'>{@link ConfigBuilder#binaryFormat(BinaryFormat)}<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * </ul><a name="line.307"></a>
+<span class="sourceLineNo">308</span> * </ul><a name="line.308"></a>
+<span class="sourceLineNo">309</span> *<a name="line.309"></a>
+<span class="sourceLineNo">310</span> * <h5 class='section'>Description:</h5><a name="line.310"></a>
+<span class="sourceLineNo">311</span> * <p><a name="line.311"></a>
+<span class="sourceLineNo">312</span> * The format to use when persisting byte arrays.<a name="line.312"></a>
+<span class="sourceLineNo">313</span> *<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * <p><a name="line.314"></a>
+<span class="sourceLineNo">315</span> * Possible values:<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * <ul><a name="line.316"></a>
+<span class="sourceLineNo">317</span> * <li>{@link BinaryFormat#BASE64} - BASE64-encoded string.<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * <li>{@link BinaryFormat#HEX} - Hexadecimal.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * <li>{@link BinaryFormat#SPACED_HEX} - Hexadecimal with spaces between bytes.<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * </ul><a name="line.320"></a>
+<span class="sourceLineNo">321</span> */<a name="line.321"></a>
+<span class="sourceLineNo">322</span> public static final String CONFIG_binaryFormat = PREFIX + "binaryFormat.s";<a name="line.322"></a>
+<span class="sourceLineNo">323</span><a name="line.323"></a>
+<span class="sourceLineNo">324</span> /**<a name="line.324"></a>
+<span class="sourceLineNo">325</span> * Configuration property: Multi-line values should always be on separate lines.<a name="line.325"></a>
+<span class="sourceLineNo">326</span> *<a name="line.326"></a>
+<span class="sourceLineNo">327</span> * <h5 class='section'>Property:</h5><a name="line.327"></a>
+<span class="sourceLineNo">328</span> * <ul><a name="line.328"></a>
+<span class="sourceLineNo">329</span> * <li><b>Name:</b> <js>"Config.multiLineValuesOnSeparateLines.b"</js><a name="line.329"></a>
+<span class="sourceLineNo">330</span> * <li><b>Data type:</b> <code>Boolean</code><a name="line.330"></a>
+<span class="sourceLineNo">331</span> * <li><b>Default:</b> <jk>false</jk><a name="line.331"></a>
+<span class="sourceLineNo">332</span> * <li><b>Methods:</b><a name="line.332"></a>
+<span class="sourceLineNo">333</span> * <ul><a name="line.333"></a>
+<span class="sourceLineNo">334</span> * <li class='jm'>{@link ConfigBuilder#multiLineValuesOnSeparateLines()}<a name="line.334"></a>
+<span class="sourceLineNo">335</span> * </ul><a name="line.335"></a>
+<span class="sourceLineNo">336</span> * </ul><a name="line.336"></a>
+<span class="sourceLineNo">337</span> *<a name="line.337"></a>
+<span class="sourceLineNo">338</span> * <h5 class='section'>Description:</h5><a name="line.338"></a>
+<span class="sourceLineNo">339</span> * <p><a name="line.339"></a>
+<span class="sourceLineNo">340</span> * When enabled, multi-line values will always be placed on a separate line from the key.<a name="line.340"></a>
+<span class="sourceLineNo">341</span> */<a name="line.341"></a>
+<span class="sourceLineNo">342</span> public static final String CONFIG_multiLineValuesOnSeparateLines = PREFIX + "multiLineValuesOnSeparateLines.b";<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span> /**<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * Configuration property: Read-only.<a name="line.345"></a>
+<span class="sourceLineNo">346</span> *<a name="line.346"></a>
+<span class="sourceLineNo">347</span> * <h5 class='section'>Property:</h5><a name="line.347"></a>
+<span class="sourceLineNo">348</span> * <ul><a name="line.348"></a>
+<span class="sourceLineNo">349</span> * <li><b>Name:</b> <js>"Config.readOnly.b"</js><a name="line.349"></a>
+<span class="sourceLineNo">350</span> * <li><b>Data type:</b> <code>Boolean</code><a name="line.350"></a>
+<span class="sourceLineNo">351</span> * <li><b>Default:</b> <jk>false</jk><a name="line.351"></a>
+<span class="sourceLineNo">352</span> * <li><b>Methods:</b><a name="line.352"></a>
+<span class="sourceLineNo">353</span> * <ul><a name="line.353"></a>
+<span class="sourceLineNo">354</span> * <li class='jm'>{@link ConfigBuilder#readOnly()}<a name="line.354"></a>
+<span class="sourceLineNo">355</span> * </ul><a name="line.355"></a>
+<span class="sourceLineNo">356</span> * </ul><a name="line.356"></a>
+<span class="sourceLineNo">357</span> *<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * <h5 class='section'>Description:</h5><a name="line.358"></a>
+<span class="sourceLineNo">359</span> * <p><a name="line.359"></a>
+<span class="sourceLineNo">360</span> * When enabled, attempts to call any setters on this object will throw an {@link UnsupportedOperationException}.<a name="line.360"></a>
+<span class="sourceLineNo">361</span> */<a name="line.361"></a>
+<span class="sourceLineNo">362</span> public static final String CONFIG_readOnly = PREFIX + "readOnly.b";<a name="line.362"></a>
+<span class="sourceLineNo">363</span><a name="line.363"></a>
+<span class="sourceLineNo">364</span> //-------------------------------------------------------------------------------------------------------------------<a name="line.364"></a>
+<span class="sourceLineNo">365</span> // Instance<a name="line.365"></a>
+<span class="sourceLineNo">366</span> //-------------------------------------------------------------------------------------------------------------------<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span> private final String name;<a name="line.368"></a>
+<span class="sourceLineNo">369</span> private final ConfigStore store;<a name="line.369"></a>
+<span class="sourceLineNo">370</span> private final WriterSerializer serializer;<a name="line.370"></a>
+<span class="sourceLineNo">371</span> private final ReaderParser parser;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> private final ConfigEncoder encoder;<a name="line.372"></a>
+<span class="sourceLineNo">373</span> private final VarResolverSession varSession;<a name="line.373"></a>
+<span class="sourceLineNo">374</span> private final int binaryLineLength;<a name="line.374"></a>
+<span class="sourceLineNo">375</span> private final BinaryFormat binaryFormat;<a name="line.375"></a>
+<span class="sourceLineNo">376</span> private final boolean multiLineValuesOnSeparateLines, readOnly;<a name="line.376"></a>
+<span class="sourceLineNo">377</span> private final ConfigMap configMap;<a name="line.377"></a>
+<span class="sourceLineNo">378</span> private final BeanSession beanSession;<a name="line.378"></a>
+<span class="sourceLineNo">379</span> private final List<ConfigEventListener> listeners = Collections.synchronizedList(new LinkedList<ConfigEventListener>());<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span><a name="line.381"></a>
+<span class="sourceLineNo">382</span> /**<a name="line.382"></a>
+<span class="sourceLineNo">383</span> * Instantiates a new clean-slate {@link ConfigBuilder} object.<a name="line.383"></a>
+<span class="sourceLineNo">384</span> *<a name="line.384"></a>
+<span class="sourceLineNo">385</span> * <p><a name="line.385"></a>
+<span class="sourceLineNo">386</span> * This is equivalent to simply calling <code><jk>new</jk> ConfigBuilder()</code>.<a name="line.386"></a>
+<span class="sourceLineNo">387</span> *<a name="line.387"></a>
+<span class="sourceLineNo">388</span> * @return A new {@link ConfigBuilder} object.<a name="line.388"></a>
+<span class="sourceLineNo">389</span> */<a name="line.389"></a>
+<span class="sourceLineNo">390</span> public static ConfigBuilder create() {<a name="line.390"></a>
+<span class="sourceLineNo">391</span> return new ConfigBuilder();<a name="line.391"></a>
+<span class="sourceLineNo">392</span> }<a name="line.392"></a>
+<span class="sourceLineNo">393</span><a name="line.393"></a>
+<span class="sourceLineNo">394</span> /**<a name="line.394"></a>
+<span class="sourceLineNo">395</span> * Same as {@link #create()} but initializes the builder with the specified config name.<a name="line.395"></a>
+<span class="sourceLineNo">396</span> *<a name="line.396"></a>
+<span class="sourceLineNo">397</span> * <p><a name="line.397"></a>
+<span class="sourceLineNo">398</span> * This is equivalent to simply calling <code><jk>new</jk> ConfigBuilder().name(name)</code>.<a name="line.398"></a>
+<span class="sourceLineNo">399</span> *<a name="line.399"></a>
+<span class="sourceLineNo">400</span> * @param name The configuration name.<a name="line.400"></a>
+<span class="sourceLineNo">401</span> * @return A new {@link ConfigBuilder} object.<a name="line.401"></a>
+<span class="sourceLineNo">402</span> */<a name="line.402"></a>
+<span class="sourceLineNo">403</span> public static ConfigBuilder create(String name) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span> return new ConfigBuilder().name(name);<a name="line.404"></a>
+<span class="sourceLineNo">405</span> }<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span> @Override /* Context */<a name="line.407"></a>
+<span class="sourceLineNo">408</span> public ConfigBuilder builder() {<a name="line.408"></a>
+<span class="sourceLineNo">409</span> return new ConfigBuilder(getPropertyStore());<a name="line.409"></a>
+<span class="sourceLineNo">410</span> }<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span> /**<a name="line.412"></a>
+<span class="sourceLineNo">413</span> * Constructor.<a name="line.413"></a>
+<span class="sourceLineNo">414</span> *<a name="line.414"></a>
+<span class="sourceLineNo">415</span> * @param ps<a name="line.415"></a>
+<span class="sourceLineNo">416</span> * The property store containing all the settings for this object.<a name="line.416"></a>
+<span class="sourceLineNo">417</span> * @throws IOException<a name="line.417"></a>
+<span class="sourceLineNo">418</span> */<a name="line.418"></a>
+<span class="sourceLineNo">419</span> public Config(PropertyStore ps) throws IOException {<a name="line.419"></a>
+<span class="sourceLineNo">420</span> super(ps, true);<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span> name = getStringProperty(CONFIG_name, "Configuration.cfg");<a name="line.422"></a>
+<span class="sourceLineNo">423</span> store = getInstanceProperty(CONFIG_store, ConfigStore.class, ConfigFileStore.DEFAULT);<a name="line.423"></a>
+<span class="sourceLineNo">424</span> configMap = store.getMap(name);<a name="line.424"></a>
+<span class="sourceLineNo">425</span> configMap.register(this);<a name="line.425"></a>
+<span class="sourceLineNo">426</span> serializer = getInstanceProperty(CONFIG_serializer, WriterSerializer.class, SimpleJsonSerializer.DEFAULT);<a name="line.426"></a>
+<span class="sourceLineNo">427</span> parser = getInstanceProperty(CONFIG_parser, ReaderParser.class, JsonParser.DEFAULT);<a name="line.427"></a>
+<span class="sourceLineNo">428</span> beanSession = parser.createBeanSession();<a name="line.428"></a>
+<span class="sourceLineNo">429</span> encoder = getInstanceProperty(CONFIG_encoder, ConfigEncoder.class, ConfigXorEncoder.INSTANCE);<a name="line.429"></a>
+<span class="sourceLineNo">430</span> varSession = getInstanceProperty(CONFIG_varResolver, VarResolver.class, VarResolver.DEFAULT)<a name="line.430"></a>
+<span class="sourceLineNo">431</span> .builder()<a name="line.431"></a>
+<span class="sourceLineNo">432</span> .vars(ConfigVar.class)<a name="line.432"></a>
+<span class="sourceLineNo">433</span> .contextObject(ConfigVar.SESSION_config, this)<a name="line.433"></a>
+<span class="sourceLineNo">434</span> .build()<a name="line.434"></a>
+<span class="sourceLineNo">435</span> .createSession();<a name="line.435"></a>
+<span class="sourceLineNo">436</span> binaryLineLength = getIntegerProperty(CONFIG_binaryLineLength, -1);<a name="line.436"></a>
+<span class="sourceLineNo">437</span> binaryFormat = getProperty(CONFIG_binaryFormat, BinaryFormat.class, BinaryFormat.BASE64);<a name="line.437"></a>
+<span class="sourceLineNo">438</span> multiLineValuesOnSeparateLines = getBooleanProperty(CONFIG_multiLineValuesOnSeparateLines, false);<a name="line.438"></a>
+<span class="sourceLineNo">439</span> readOnly = getBooleanProperty(CONFIG_readOnly, false);<a name="line.439"></a>
+<span class="sourceLineNo">440</span> }<a name="line.440"></a>
+<span class="sourceLineNo">441</span><a name="line.441"></a>
+<span class="sourceLineNo">442</span> Config(Config copyFrom, VarResolverSession varSession) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span> super(null, true);<a name="line.443"></a>
+<span class="sourceLineNo">444</span> name = copyFrom.name;<a name="line.444"></a>
+<span class="sourceLineNo">445</span> store = copyFrom.store;<a name="line.445"></a>
+<span class="sourceLineNo">446</span> configMap = copyFrom.configMap;<a name="line.446"></a>
+<span class="sourceLineNo">447</span> configMap.register(this);<a name="line.447"></a>
+<span class="sourceLineNo">448</span> serializer = copyFrom.serializer;<a name="line.448"></a>
+<span class="sourceLineNo">449</span> parser = copyFrom.parser;<a name="line.449"></a>
+<span class="sourceLineNo">450</span> encoder = copyFrom.encoder;<a name="line.450"></a>
+<span class="sourceLineNo">451</span> this.varSession = varSession;<a name="line.451"></a>
+<span class="sourceLineNo">452</span> binaryLineLength = copyFrom.binaryLineLength;<a name="line.452"></a>
+<span class="sourceLineNo">453</span> binaryFormat = copyFrom.binaryFormat;<a name="line.453"></a>
+<span class="sourceLineNo">454</span> multiLineValuesOnSeparateLines = copyFrom.multiLineValuesOnSeparateLines;<a name="line.454"></a>
+<span class="sourceLineNo">455</span> readOnly = copyFrom.readOnly;<a name="line.455"></a>
+<span class="sourceLineNo">456</span> beanSession = copyFrom.beanSession;<a name="line.456"></a>
+<span class="sourceLineNo">457</span> }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span> /**<a name="line.459"></a>
+<span class="sourceLineNo">460</span> * Creates a copy of this config using the specified var session for resolving variables.<a name="line.460"></a>
+<span class="sourceLineNo">461</span> *<a name="line.461"></a>
+<span class="sourceLineNo">462</span> * <p><a name="line.462"></a>
+<span class="sourceLineNo">463</span> * This creates a shallow copy of the config but replacing the variable resolver.<a name="line.463"></a>
+<span class="sourceLineNo">464</span> *<a name="line.464"></a>
+<span class="sourceLineNo">465</span> * @param varSession The var session used for resolving string variables.<a name="line.465"></a>
+<span class="sourceLineNo">466</span> * @return A new config object.<a name="line.466"></a>
+<span class="sourceLineNo">467</span> */<a name="line.467"></a>
+<span class="sourceLineNo">468</span> public Config resolving(VarResolverSession varSession) {<a name="line.468"></a>
+<span class="sourceLineNo">469</span> return new Config(this, varSession);<a name="line.469"></a>
+<span class="sourceLineNo">470</span> }<a name="line.470"></a>
+<span class="sourceLineNo">471</span><a name="line.471"></a>
+<span class="sourceLineNo">472</span> /**<a name="line.472"></a>
+<span class="sourceLineNo">473</span> * Returns the name associated with this config (usually a file name).<a name="line.473"></a>
+<span class="sourceLineNo">474</span> *<a name="line.474"></a>
+<span class="sourceLineNo">475</span> * @return The name associated with this config, or <jk>null</jk> if it has no name.<a name="line.475"></a>
+<span class="sourceLineNo">476</span> */<a name="line.476"></a>
+<span class="sourceLineNo">477</span> public String getName() {<a name="line.477"></a>
+<span class="sourceLineNo">478</span> return name;<a name="line.478"></a>
+<span class="sourceLineNo">479</span> }<a name="line.479"></a>
+<span class="sourceLineNo">480</span><a name="line.480"></a>
+<span class="sourceLineNo">481</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.481"></a>
+<span class="sourceLineNo">482</span> // Workhorse getters<a name="line.482"></a>
+<span class="sourceLineNo">483</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span> /**<a name="line.485"></a>
+<span class="sourceLineNo">486</span> * Returns the specified value as a string from the config file.<a name="line.486"></a>
+<span class="sourceLineNo">487</span> *<a name="line.487"></a>
+<span class="sourceLineNo">488</span> * <p><a name="line.488"></a>
+<span class="sourceLineNo">489</span> * Unlike {@link #getString(String)}, this method doesn't replace SVL variables.<a name="line.489"></a>
+<span class="sourceLineNo">490</span> *<a name="line.490"></a>
+<span class="sourceLineNo">491</span> * @param key The key.<a name="line.491"></a>
+<span class="sourceLineNo">492</span> * @return The value, or <jk>null</jk> if the section or value doesn't exist.<a name="line.492"></a>
+<span class="sourceLineNo">493</span> */<a name="line.493"></a>
+<span class="sourceLineNo">494</span> public String get(String key) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span> String sname = sname(key);<a name="line.496"></a>
+<span class="sourceLineNo">497</span> String skey = skey(key);<a name="line.497"></a>
+<span class="sourceLineNo">498</span><a name="line.498"></a>
+<span class="sourceLineNo">499</span> ConfigEntry ce = configMap.getEntry(sname, skey);<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span> if (ce == null || ce.getValue() == null)<a name="line.501"></a>
+<span class="sourceLineNo">502</span> return null;<a name="line.502"></a>
+<span class="sourceLineNo">503</span><a name="line.503"></a>
+<span class="sourceLineNo">504</span> String val = ce.getValue();<a name="line.504"></a>
+<span class="sourceLineNo">505</span> for (ConfigMod m : ConfigMod.asModifiersReverse(ce.getModifiers())) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span> if (m == ENCODED) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span> if (encoder.isEncoded(val))<a name="line.507"></a>
+<span class="sourceLineNo">508</span> val = encoder.decode(key, val);<a name="line.508"></a>
+<span class="sourceLineNo">509</span> }<a name="line.509"></a>
+<span class="sourceLineNo">510</span> }<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span> return val;<a name="line.512"></a>
+<span class="sourceLineNo">513</span> }<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span><a name="line.515"></a>
+<span class="sourceLineNo">516</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.516"></a>
+<span class="sourceLineNo">517</span> // Workhorse setters<a name="line.517"></a>
+<span class="sourceLineNo">518</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.518"></a>
+<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">520</span> /**<a name="line.520"></a>
+<span class="sourceLineNo">521</span> * Sets a value in this config.<a name="line.521"></a>
+<span class="sourceLineNo">522</span> *<a name="line.522"></a>
+<span class="sourceLineNo">523</span> * @param key The key.<a name="line.523"></a>
+<span class="sourceLineNo">524</span> * @param value The value.<a name="line.524"></a>
+<span class="sourceLineNo">525</span> * @return This object (for method chaining).<a name="line.525"></a>
+<span class="sourceLineNo">526</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.526"></a>
+<span class="sourceLineNo">527</span> */<a name="line.527"></a>
+<span class="sourceLineNo">528</span> public Config set(String key, String value) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span> checkWrite();<a name="line.529"></a>
+<span class="sourceLineNo">530</span> assertFieldNotNull(key, "key");<a name="line.530"></a>
+<span class="sourceLineNo">531</span> String sname = sname(key);<a name="line.531"></a>
+<span class="sourceLineNo">532</span> String skey = skey(key);<a name="line.532"></a>
<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span> String s = asString(value);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> for (ConfigMod m : ConfigMod.asModifiers(mod)) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span> if (m == ENCODED) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span> s = encoder.encode(key, s);<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
-<span class="sourceLineNo">539</span> }<a name="line.539"></a>
-<span class="sourceLineNo">540</span><a name="line.540"></a>
-<span class="sourceLineNo">541</span> configMap.setEntry(sname, skey, s, null, null, null);<a name="line.541"></a>
-<span class="sourceLineNo">542</span> return this;<a name="line.542"></a>
-<span class="sourceLineNo">543</span> }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span> /**<a name="line.545"></a>
-<span class="sourceLineNo">546</span> * Adds or replaces an entry with the specified key with a POJO serialized to a string using the registered<a name="line.546"></a>
-<span class="sourceLineNo">547</span> * serializer.<a name="line.547"></a>
-<span class="sourceLineNo">548</span> *<a name="line.548"></a>
-<span class="sourceLineNo">549</span> * <p><a name="line.549"></a>
-<span class="sourceLineNo">550</span> * Equivalent to calling <code>put(key, value, isEncoded(key))</code>.<a name="line.550"></a>
-<span class="sourceLineNo">551</span> *<a name="line.551"></a>
-<span class="sourceLineNo">552</span> * @param key The key.<a name="line.552"></a>
-<span class="sourceLineNo">553</span> * @param value The new value POJO.<a name="line.553"></a>
-<span class="sourceLineNo">554</span> * @return The previous value, or <jk>null</jk> if the section or key did not previously exist.<a name="line.554"></a>
-<span class="sourceLineNo">555</span> * @throws SerializeException<a name="line.555"></a>
-<span class="sourceLineNo">556</span> * If serializer could not serialize the value or if a serializer is not registered with this config file.<a name="line.556"></a>
-<span class="sourceLineNo">557</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.557"></a>
-<span class="sourceLineNo">558</span> */<a name="line.558"></a>
-<span class="sourceLineNo">559</span> public Config set(String key, Object value) throws SerializeException {<a name="line.559"></a>
-<span class="sourceLineNo">560</span> return set(key, value, null);<a name="line.560"></a>
-<span class="sourceLineNo">561</span> }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span> /**<a name="line.563"></a>
-<span class="sourceLineNo">564</span> * Same as {@link #set(String, Object)} but allows you to specify the serializer to use to serialize the<a name="line.564"></a>
-<span class="sourceLineNo">565</span> * value.<a name="line.565"></a>
-<span class="sourceLineNo">566</span> *<a name="line.566"></a>
-<span class="sourceLineNo">567</span> * @param key The key.<a name="line.567"></a>
-<span class="sourceLineNo">568</span> * @param value The new value.<a name="line.568"></a>
-<span class="sourceLineNo">569</span> * @param serializer<a name="line.569"></a>
-<span class="sourceLineNo">570</span> * The serializer to use for serializing the object.<a name="line.570"></a>
-<span class="sourceLineNo">571</span> * If <jk>null</jk>, then uses the predefined serializer on the config file.<a name="line.571"></a>
-<span class="sourceLineNo">572</span> * @return The previous value, or <jk>null</jk> if the section or key did not previously exist.<a name="line.572"></a>
-<span class="sourceLineNo">573</span> * @throws SerializeException<a name="line.573"></a>
-<span class="sourceLineNo">574</span> * If serializer could not serialize the value or if a serializer is not registered with this config file.<a name="line.574"></a>
-<span class="sourceLineNo">575</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.575"></a>
-<span class="sourceLineNo">576</span> */<a name="line.576"></a>
-<span class="sourceLineNo">577</span> public Config set(String key, Object value, Serializer serializer) throws SerializeException {<a name="line.577"></a>
-<span class="sourceLineNo">578</span> return set(key, serialize(value, serializer));<a name="line.578"></a>
-<span class="sourceLineNo">579</span> }<a name="line.579"></a>
-<span class="sourceLineNo">580</span><a name="line.580"></a>
-<span class="sourceLineNo">581</span> /**<a name="line.581"></a>
-<span class="sourceLineNo">582</span> * Same as {@link #set(String, Object)} but allows you to specify all aspects of a value.<a name="line.582"></a>
-<span class="sourceLineNo">583</span> *<a name="line.583"></a>
-<span class="sourceLineNo">584</span> * @param key The key.<a name="line.584"></a>
-<span class="sourceLineNo">585</span> * @param value The new value.<a name="line.585"></a>
-<span class="sourceLineNo">586</span> * @param serializer<a name="line.586"></a>
-<span class="sourceLineNo">587</span> * The serializer to use for serializing the object.<a name="line.587"></a>
-<span class="sourceLineNo">588</span> * If <jk>null</jk>, then uses the predefined serializer on the config file.<a name="line.588"></a>
-<span class="sourceLineNo">589</span> * @param modifier<a name="line.589"></a>
-<span class="sourceLineNo">590</span> * Optional modifier to apply to the value.<a name="line.590"></a>
-<span class="sourceLineNo">591</span> * <br>If <jk>null</jk>, then previous value will not be replaced.<a name="line.591"></a>
-<span class="sourceLineNo">592</span> * @param comment<a name="line.592"></a>
-<span class="sourceLineNo">593</span> * Optional same-line comment to add to this value.<a name="line.593"></a>
-<span class="sourceLineNo">594</span> * <br>If <jk>null</jk>, then previous value will not be replaced.<a name="line.594"></a>
-<span class="sourceLineNo">595</span> * @param preLines<a name="line.595"></a>
-<span class="sourceLineNo">596</span> * Optional comment or blank lines to add before this entry.<a name="line.596"></a>
+<span class="sourceLineNo">534</span> ConfigEntry ce = configMap.getEntry(sname, skey);<a name="line.534"></a>
+<span class="sourceLineNo">535</span> if (ce == null && value == null)<a name="line.535"></a>
+<span class="sourceLineNo">536</span> return this;<a name="line.536"></a>
+<span class="sourceLineNo">537</span><a name="line.537"></a>
+<span class="sourceLineNo">538</span> String mod = ce == null ? "" : ce.getModifiers();<a name="line.538"></a>
+<span class="sourceLineNo">539</span><a name="line.539"></a>
+<span class="sourceLineNo">540</span> String s = asString(value);<a name="line.540"></a>
+<span class="sourceLineNo">541</span> for (ConfigMod m : ConfigMod.asModifiers(mod)) {<a name="line.541"></a>
+<span class="sourceLineNo">542</span> if (m == ENCODED) {<a name="line.542"></a>
+<span class="sourceLineNo">543</span> s = encoder.encode(key, s);<a name="line.543"></a>
+<span class="sourceLineNo">544</span> }<a name="line.544"></a>
+<span class="sourceLineNo">545</span> }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span> configMap.setEntry(sname, skey, s, null, null, null);<a name="line.547"></a>
+<span class="sourceLineNo">548</span> return this;<a name="line.548"></a>
+<span class="sourceLineNo">549</span> }<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span> /**<a name="line.551"></a>
+<span class="sourceLineNo">552</span> * Adds or replaces an entry with the specified key with a POJO serialized to a string using the registered<a name="line.552"></a>
+<span class="sourceLineNo">553</span> * serializer.<a name="line.553"></a>
+<span class="sourceLineNo">554</span> *<a name="line.554"></a>
+<span class="sourceLineNo">555</span> * <p><a name="line.555"></a>
+<span class="sourceLineNo">556</span> * Equivalent to calling <code>put(key, value, isEncoded(key))</code>.<a name="line.556"></a>
+<span class="sourceLineNo">557</span> *<a name="line.557"></a>
+<span class="sourceLineNo">558</span> * @param key The key.<a name="line.558"></a>
+<span class="sourceLineNo">559</span> * @param value The new value POJO.<a name="line.559"></a>
+<span class="sourceLineNo">560</span> * @return The previous value, or <jk>null</jk> if the section or key did not previously exist.<a name="line.560"></a>
+<span class="sourceLineNo">561</span> * @throws SerializeException<a name="line.561"></a>
+<span class="sourceLineNo">562</span> * If serializer could not serialize the value or if a serializer is not registered with this config file.<a name="line.562"></a>
+<span class="sourceLineNo">563</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.563"></a>
+<span class="sourceLineNo">564</span> */<a name="line.564"></a>
+<span class="sourceLineNo">565</span> public Config set(String key, Object value) throws SerializeException {<a name="line.565"></a>
+<span class="sourceLineNo">566</span> return set(key, value, null);<a name="line.566"></a>
+<span class="sourceLineNo">567</span> }<a name="line.567"></a>
+<span class="sourceLineNo">568</span><a name="line.568"></a>
+<span class="sourceLineNo">569</span> /**<a name="line.569"></a>
+<span class="sourceLineNo">570</span> * Same as {@link #set(String, Object)} but allows you to specify the serializer to use to serialize the<a name="line.570"></a>
+<span class="sourceLineNo">571</span> * value.<a name="line.571"></a>
+<span class="sourceLineNo">572</span> *<a name="line.572"></a>
+<span class="sourceLineNo">573</span> * @param key The key.<a name="line.573"></a>
+<span class="sourceLineNo">574</span> * @param value The new value.<a name="line.574"></a>
+<span class="sourceLineNo">575</span> * @param serializer<a name="line.575"></a>
+<span class="sourceLineNo">576</span> * The serializer to use for serializing the object.<a name="line.576"></a>
+<span class="sourceLineNo">577</span> * If <jk>null</jk>, then uses the predefined serializer on the config file.<a name="line.577"></a>
+<span class="sourceLineNo">578</span> * @return The previous value, or <jk>null</jk> if the section or key did not previously exist.<a name="line.578"></a>
+<span class="sourceLineNo">579</span> * @throws SerializeException<a name="line.579"></a>
+<span class="sourceLineNo">580</span> * If serializer could not serialize the value or if a serializer is not registered with this config file.<a name="line.580"></a>
+<span class="sourceLineNo">581</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.581"></a>
+<span class="sourceLineNo">582</span> */<a name="line.582"></a>
+<span class="sourceLineNo">583</span> public Config set(String key, Object value, Serializer serializer) throws SerializeException {<a name="line.583"></a>
+<span class="sourceLineNo">584</span> return set(key, serialize(value, serializer));<a name="line.584"></a>
+<span class="sourceLineNo">585</span> }<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span> /**<a name="line.587"></a>
+<span class="sourceLineNo">588</span> * Same as {@link #set(String, Object)} but allows you to specify all aspects of a value.<a name="line.588"></a>
+<span class="sourceLineNo">589</span> *<a name="line.589"></a>
+<span class="sourceLineNo">590</span> * @param key The key.<a name="line.590"></a>
+<span class="sourceLineNo">591</span> * @param value The new value.<a name="line.591"></a>
+<span class="sourceLineNo">592</span> * @param serializer<a name="line.592"></a>
+<span class="sourceLineNo">593</span> * The serializer to use for serializing the object.<a name="line.593"></a>
+<span class="sourceLineNo">594</span> * If <jk>null</jk>, then uses the predefined serializer on the config file.<a name="line.594"></a>
+<span class="sourceLineNo">595</span> * @param modifier<a name="line.595"></a>
+<span class="sourceLineNo">596</span> * Optional modifier to apply to the value.<a name="line.596"></a>
<span class="sourceLineNo">597</span> * <br>If <jk>null</jk>, then previous value will not be replaced.<a name="line.597"></a>
-<span class="sourceLineNo">598</span> * @return The previous value, or <jk>null</jk> if the section or key did not previously exist.<a name="line.598"></a>
-<span class="sourceLineNo">599</span> * @throws SerializeException<a name="line.599"></a>
-<span class="sourceLineNo">600</span> * If serializer could not serialize the value or if a serializer is not registered with this config file.<a name="line.600"></a>
-<span class="sourceLineNo">601</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.601"></a>
-<span class="sourceLineNo">602</span> */<a name="line.602"></a>
-<span class="sourceLineNo">603</span> public Config set(String key, Object value, Serializer serializer, ConfigMod modifier, String comment, List<String> preLines) throws SerializeException {<a name="line.603"></a>
-<span class="sourceLineNo">604</span> return set(key, value, serializer, modifier == null ? null : new ConfigMod[]{modifier}, comment, preLines);<a name="line.604"></a>
-<span class="sourceLineNo">605</span> }<a name="line.605"></a>
-<span class="sourceLineNo">606</span><a name="line.606"></a>
-<span class="sourceLineNo">607</span> /**<a name="line.607"></a>
-<span class="sourceLineNo">608</span> * Same as {@link #set(String, Object)} but allows you to specify all aspects of a value.<a name="line.608"></a>
-<span class="sourceLineNo">609</span> *<a name="line.609"></a>
-<span class="sourceLineNo">610</span> * @param key The key.<a name="line.610"></a>
-<span class="sourceLineNo">611</span> * @param value The new value.<a name="line.611"></a>
-<span class="sourceLineNo">612</span> * @param serializer<a name="line.612"></a>
-<span class="sourceLineNo">613</span> * The serializer to use for serializing the object.<a name="line.613"></a>
-<span class="sourceLineNo">614</span> * If <jk>null</jk>, then uses the predefined serializer on the config file.<a name="line.614"></a>
-<span class="sourceLineNo">615</span> * @param modifiers<a name="line.615"></a>
-<span class="sourceLineNo">616</span> * Optional modifiers to apply to the value.<a name="line.616"></a>
-<span class="sourceLineNo">617</span> * <br>If <jk>null</jk>, then previous value will not be replaced.<a name="line.617"></a>
-<span class="sourceLineNo">618</span> * @param comment<a name="line.618"></a>
-<span class="sourceLineNo">619</span> * Optional same-line comment to add to this value.<a name="line.619"></a>
-<span class="sourceLineNo">620</span> * <br>If <jk>null</jk>, then previous value will not be replaced.<a name="line.620"></a>
-<span class="sourceLineNo">621</span> * @param preLines<a name="line.621"></a>
-<span class="sourceLineNo">622</span> * Optional comment or blank lines to add before this entry.<a name="line.622"></a>
+<span class="sourceLineNo">598</span> * @param comment<a name="line.598"></a>
+<span class="sourceLineNo">599</span> * Optional same-line comment to add to this value.<a name="line.599"></a>
+<span class="sourceLineNo">600</span> * <br>If <jk>null</jk>, then previous value will not be replaced.<a name="line.600"></a>
+<span class="sourceLineNo">601</span> * @param preLines<a name="line.601"></a>
+<span class="sourceLineNo">602</span> * Optional comment or blank lines to add before this entry.<a name="line.602"></a>
+<span class="sourceLineNo">603</span> * <br>If <jk>null</jk>, then previous value will not be replaced.<a name="line.603"></a>
+<span class="sourceLineNo">604</span> * @return The previous value, or <jk>null</jk> if the section or key did not previously exist.<a name="line.604"></a>
+<span class="sourceLineNo">605</span> * @throws SerializeException<a name="line.605"></a>
+<span class="sourceLineNo">606</span> * If serializer could not serialize the value or if a serializer is not registered with this config file.<a name="line.606"></a>
+<span class="sourceLineNo">607</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.607"></a>
+<span class="sourceLineNo">608</span> */<a name="line.608"></a>
+<span class="sourceLineNo">609</span> public Config set(String key, Object value, Serializer serializer, ConfigMod modifier, String comment, List<String> preLines) throws SerializeException {<a name="line.609"></a>
+<span class="sourceLineNo">610</span> return set(key, value, serializer, modifier == null ? null : new ConfigMod[]{modifier}, comment, preLines);<a name="line.610"></a>
+<span class="sourceLineNo">611</span> }<a name="line.611"></a>
+<span class="sourceLineNo">612</span><a name="line.612"></a>
+<span class="sourceLineNo">613</span> /**<a name="line.613"></a>
+<span class="sourceLineNo">614</span> * Same as {@link #set(String, Object)} but allows you to specify all aspects of a value.<a name="line.614"></a>
+<span class="sourceLineNo">615</span> *<a name="line.615"></a>
+<span class="sourceLineNo">616</span> * @param key The key.<a name="line.616"></a>
+<span class="sourceLineNo">617</span> * @param value The new value.<a name="line.617"></a>
+<span class="sourceLineNo">618</span> * @param serializer<a name="line.618"></a>
+<span class="sourceLineNo">619</span> * The serializer to use for serializing the object.<a name="line.619"></a>
+<span class="sourceLineNo">620</span> * If <jk>null</jk>, then uses the predefined serializer on the config file.<a name="line.620"></a>
+<span class="sourceLineNo">621</span> * @param modifiers<a name="line.621"></a>
+<span class="sourceLineNo">622</span> * Optional modifiers to apply to the value.<a name="line.622"></a>
<span class="sourceLineNo">623</span> * <br>If <jk>null</jk>, then previous value will not be replaced.<a name="line.623"></a>
-<span class="sourceLineNo">624</span> * @return The previous value, or <jk>null</jk> if the section or key did not previously exist.<a name="line.624"></a>
-<span class="sourceLineNo">625</span> * @throws SerializeException<a name="line.625"></a>
-<span class="sourceLineNo">626</span> * If serializer could not serialize the value or if a serializer is not registered with this config file.<a name="line.626"></a>
-<span class="sourceLineNo">627</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.627"></a>
-<span class="sourceLineNo">628</span> */<a name="line.628"></a>
-<span class="sourceLineNo">629</span> public Config set(String key, Object value, Serializer serializer, ConfigMod[] modifiers, String comment, List<String> preLines) throws SerializeException {<a name="line.629"></a>
-<span class="sourceLineNo">630</span> checkWrite();<a name="line.630"></a>
-<span class="sourceLineNo">631</span> assertFieldNotNull(key, "key");<a name="line.631"></a>
-<span class="sourceLineNo">632</span> String sname = sname(key);<a name="line.632"></a>
-<span class="sourceLineNo">633</span> String skey = skey(key);<a name="line.633"></a>
-<span class="sourceLineNo">634</span><a name="line.634"></a>
-<span class="sourceLineNo">635</span> String s = serialize(value, serializer);<a name="line.635"></a>
-<span class="sourceLineNo">636</span> if (modifiers != null) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span> for (ConfigMod m : modifiers) {<a name="line.637"></a>
-<span class="sourceLineNo">638</span> if (m == ENCODED) {<a name="line.638"></a>
-<span class="sourceLineNo">639</span> s = encoder.encode(key, s);<a name="line.639"></a>
-<span class="sourceLineNo">640</span> }<a name="line.640"></a>
-<span class="sourceLineNo">641</span> }<a name="line.641"></a>
-<span class="sourceLineNo">642</span> }<a name="line.642"></a>
-<span class="sourceLineNo">643</span><a name="line.643"></a>
-<span class="sourceLineNo">644</span> configMap.setEntry(sname, skey, s, modifiers == null ? null : ConfigMod.asString(modifiers), comment, preLines);<a name="line.644"></a>
-<span class="sourceLineNo">645</span> return this;<a name="line.645"></a>
-<span class="sourceLineNo">646</span> }<a name="line.646"></a>
-<span class="sourceLineNo">647</span><a name="line.647"></a>
-<span class="sourceLineNo">648</span> /**<a name="line.648"></a>
-<span class="sourceLineNo">649</span> * Removes an entry with the specified key.<a name="line.649"></a>
-<span class="sourceLineNo">650</span> *<a name="line.650"></a>
-<span class="sourceLineNo">651</span> * @param key The key.<a name="line.651"></a>
-<span class="sourceLineNo">652</span> * @return The previous value, or <jk>null</jk> if the section or key did not previously exist.<a name="line.652"></a>
-<span class="sourceLineNo">653</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.653"></a>
-<span class="sourceLineNo">654</span> */<a name="line.654"></a>
-<span class="sourceLineNo">655</span> public Config remove(String key) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span> checkWrite();<a name="line.656"></a>
-<span class="sourceLineNo">657</span> String sname = sname(key);<a name="line.657"></a>
-<span class="sourceLineNo">658</span> String skey = skey(key);<a name="line.658"></a>
-<span class="sourceLineNo">659</span> configMap.removeEntry(sname, skey);<a name="line.659"></a>
-<span class="sourceLineNo">660</span> return this;<a name="line.660"></a>
-<span class="sourceLineNo">661</span> }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span> /**<a name="line.663"></a>
-<span class="sourceLineNo">664</span> * Encodes and unencoded entries in this config.<a name="line.664"></a>
-<span class="sourceLineNo">665</span> *<a name="line.665"></a>
-<span class="sourceLineNo">666</span> * <p><a name="line.666"></a>
-<span class="sourceLineNo">667</span> * If any entries in the config are marked as encoded but not actually encoded,<a name="line.667"></a>
-<span class="sourceLineNo">668</span> * this will encode them.<a name="line.668"></a>
-<span class="sourceLineNo">669</span> *<a name="line.669"></a>
-<span class="sourceLineNo">670</span> * @return This object (for method chaining).<a name="line.670"></a>
-<span class="sourceLineNo">671</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.671"></a>
-<span class="sourceLineNo">672</span> */<a name="line.672"></a>
-<span class="sourceLineNo">673</span> public Config encodeEntries() {<a name="line.673"></a>
-<span class="sourceLineNo">674</span> checkWrite();<a name="line.674"></a>
-<span class="sourceLineNo">675</span> for (String section : configMap.getSections()) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span> for (String key : configMap.getKeys(section)) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span> ConfigEntry ce = configMap.getEntry(section, key);<a name="line.677"></a>
-<span class="sourceLineNo">678</span> if (ce != null && ce.hasModifier('*') && ! encoder.isEncoded(ce.getValue())) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span> configMap.setEntry(section, key, encoder.encode(section + '/' + key, ce.getValue()), null, null, null);<a name="line.679"></a>
-<span class="sourceLineNo">680</span> }<a name="line.680"></a>
-<span class="sourceLineNo">681</span> }<a name="line.681"></a>
-<span class="sourceLineNo">682</span> }<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span> return this;<a name="line.684"></a>
-<span class="sourceLineNo">685</span> }<a name="line.685"></a>
-<span class="sourceLineNo">686</span><a name="line.686"></a>
-<span class="sourceLineNo">687</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.687"></a>
-<span class="sourceLineNo">688</span> // API methods<a name="line.688"></a>
-<span class="sourceLineNo">689</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span> /**<a name="line.691"></a>
-<span class="sourceLineNo">692</span> * Gets the entry with the specified key.<a name="line.692"></a>
-<span class="sourceLineNo">693</span> *<a name="line.693"></a>
-<span class="sourceLineNo">694</span> * <p><a name="line.694"></a>
-<span class="sourceLineNo">695</span> * The key can be in one of the following formats...<a name="line.695"></a>
-<span class="sourceLineNo">696</span> * <ul class='spaced-list'><a name="line.696"></a>
-<span class="sourceLineNo">697</span> * <li><a name="line.697"></a>
-<span class="sourceLineNo">698</span> * <js>"key"</js> - A value in the default section (i.e. defined above any <code>[section]</code> header).<a name="line.698"></a>
-<span class="sourceLineNo">699</span> * <li><a name="line.699"></a>
-<span class="sourceLineNo">700</span> * <js>"section/key"</js> - A value from the specified section.<a name="line.700"></a>
-<span class="sourceLineNo">701</span> * </ul><a name="line.701"></a>
-<span class="sourceLineNo">702</span> *<a name="line.702"></a>
-<span class="sourceLineNo">703</span> * @param key The key.<a name="line.703"></a>
-<span class="sourceLineNo">704</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.704"></a>
-<span class="sourceLineNo">705</span> */<a name="line.705"></a>
-<span class="sourceLineNo">706</span> public String getString(String key) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span> String s = get(key);<a name="line.707"></a>
-<span class="sourceLineNo">708</span> if (s == null)<a name="line.708"></a>
-<span class="sourceLineNo">709</span> return null;<a name="line.709"></a>
-<span class="sourceLineNo">710</span> if (varSession != null)<a name="line.710"></a>
-<span class="sourceLineNo">711</span> s = varSession.resolve(s);<a name="line.711"></a>
-<span class="sourceLineNo">712</span> return s;<a name="line.712"></a>
-<span class="sourceLineNo">713</span> }<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span> /**<a name="line.715"></a>
-<span class="sourceLineNo">716</span> * Gets the entry with the specified key.<a name="line.716"></a>
-<span class="sourceLineNo">717</span> *<a name="line.717"></a>
-<span class="sourceLineNo">718</span> * <p><a name="line.718"></a>
-<span class="sourceLineNo">719</span> * The key can be in one of the following formats...<a name="line.719"></a>
-<span class="sourceLineNo">720</span> * <ul class='spaced-list'><a name="line.720"></a>
-<span class="sourceLineNo">721</span> * <li><a name="line.721"></a>
-<span class="sourceLineNo">722</span> * <js>"key"</js> - A value in the default section (i.e. defined above any <code>[section]</code> header).<a name="line.722"></a>
-<span class="sourceLineNo">723</span> * <li><a name="line.723"></a>
-<span class="sourceLineNo">724</span> * <js>"section/key"</js> - A value from the specified section.<a name="line.724"></a>
-<span class="sourceLineNo">725</span> * </ul><a name="line.725"></a>
-<span class="sourceLineNo">726</span> *<a name="line.726"></a>
-<span class="sourceLineNo">727</span> * @param key The key.<a name="line.727"></a>
-<span class="sourceLineNo">728</span> * @param def The default value if the value does not exist.<a name="line.728"></a>
-<span class="sourceLineNo">729</span> * @return The value, or the default value if the section or key does not exist.<a name="line.729"></a>
-<span class="sourceLineNo">730</span> */<a name="line.730"></a>
-<span class="sourceLineNo">731</span> public String getString(String key, String def) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span> String s = get(key);<a name="line.732"></a>
-<span class="sourceLineNo">733</span> if (isEmpty(s))<a name="line.733"></a>
-<span class="sourceLineNo">734</span> return def;<a name="line.734"></a>
-<span class="sourceLineNo">735</span> if (varSession != null)<a name="line.735"></a>
-<span class="sourceLineNo">736</span> s = varSession.resolve(s);<a name="line.736"></a>
-<span class="sourceLineNo">737</span> return s;<a name="line.737"></a>
-<span class="sourceLineNo">738</span> }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span> /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span> * Gets the entry with the specified key, splits the value on commas, and returns the values as trimmed strings.<a name="line.741"></a>
-<span class="sourceLineNo">742</span> *<a name="line.742"></a>
-<span class="sourceLineNo">743</span> * @param key The key.<a name="line.743"></a>
-<span class="sourceLineNo">744</span> * @return The value, or an empty array if the section or key does not exist.<a name="line.744"></a>
-<span class="sourceLineNo">745</span> */<a name="line.745"></a>
-<span class="sourceLineNo">746</span> public String[] getStringArray(String key) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span> return getStringArray(key, new String[0]);<a name="line.747"></a>
-<span class="sourceLineNo">748</span> }<a name="line.748"></a>
-<span class="sourceLineNo">749</span><a name="line.749"></a>
-<span class="sourceLineNo">750</span> /**<a name="line.750"></a>
-<span class="sourceLineNo">751</span> * Same as {@link #getStringArray(String)} but returns a default value if the value cannot be found.<a name="line.751"></a>
-<span class="sourceLineNo">752</span> *<a name="line.752"></a>
-<span class="sourceLineNo">753</span> * @param key The key.<a name="line.753"></a>
-<span class="sourceLineNo">754</span> * @param def The default value if the value does not exist.<a name="line.754"></a>
-<span class="sourceLineNo">755</span> * @return The value, or the default value if the section or key does not exist or is blank.<a name="line.755"></a>
-<span class="sourceLineNo">756</span> */<a name="line.756"></a>
-<span class="sourceLineNo">757</span> public String[] getStringArray(String key, String[] def) {<a name="line.757"></a>
-<span class="sourceLineNo">758</span> String s = getString(key);<a name="line.758"></a>
-<span class="sourceLineNo">759</span> if (isEmpty(s))<a name="line.759"></a>
-<span class="sourceLineNo">760</span> return def;<a name="line.760"></a>
-<span class="sourceLineNo">761</span> String[] r = split(s);<a name="line.761"></a>
-<span class="sourceLineNo">762</span> return r.length == 0 ? def : r;<a name="line.762"></a>
-<span class="sourceLineNo">763</span> }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span> /**<a name="line.765"></a>
-<span class="sourceLineNo">766</span> * Convenience method for getting int config values.<a name="line.766"></a>
-<span class="sourceLineNo">767</span> *<a name="line.767"></a>
-<span class="sourceLineNo">768</span> * <p><a name="line.768"></a>
-<span class="sourceLineNo">769</span> * <js>"K"</js>, <js>"M"</js>, and <js>"G"</js> can be used to identify kilo, mega, and giga.<a name="line.769"></a>
-<span class="sourceLineNo">770</span> *<a name="line.770"></a>
-<span class="sourceLineNo">771</span> * <h5 class='section'>Example:</h5><a name="line.771"></a>
-<span class="sourceLineNo">772</span> * <ul class='spaced-list'><a name="line.772"></a>
-<span class="sourceLineNo">773</span> * <li><a name="line.773"></a>
-<span class="sourceLineNo">774</span> * <code><js>"100K"</js> => 1024000</code><a name="line.774"></a>
-<span class="sourceLineNo">775</span> * <li><a name="line.775"></a>
-<span class="sourceLineNo">776</span> * <code><js>"100M"</js> => 104857600</code><a name="line.776"></a>
-<span class="sourceLineNo">777</span> * </ul><a name="line.777"></a>
-<span class="sourceLineNo">778</span> *<a name="line.778"></a>
-<span class="sourceLineNo">779</span> * <p><a name="line.779"></a>
-<span class="sourceLineNo">780</span> * Uses {@link Integer#decode(String)} underneath, so any of the following integer formats are supported:<a name="line.780"></a>
-<span class="sourceLineNo">781</span> * <ul><a name="line.781"></a>
-<span class="sourceLineNo">782</span> * <li><js>"0x..."</js><a name="line.782"></a>
-<span class="sourceLineNo">783</span> * <li><js>"0X..."</js><a name="line.783"></a>
-<span class="sourceLineNo">784</span> * <li><js>"#..."</js><a name="line.784"></a>
-<span class="sourceLineNo">785</span> * <li><js>"0..."</js><a name="line.785"></a>
-<span class="sourceLineNo">786</span> * </ul><a name="line.786"></a>
-<span class="sourceLineNo">787</span> *<a name="line.787"></a>
-<span class="sourceLineNo">788</span> * @param key The key.<a name="line.788"></a>
-<span class="sourceLineNo">789</span> * @return The value, or <code>0</code> if the value does not exist or the value is empty.<a name="line.789"></a>
-<span class="sourceLineNo">790</span> */<a name="line.790"></a>
-<span class="sourceLineNo">791</span> public int getInt(String key) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span> return getInt(key, 0);<a name="line.792"></a>
-<span class="sourceLineNo">793</span> }<a name="line.793"></a>
-<span class="sourceLineNo">794</span><a name="line.794"></a>
-<span class="sourceLineNo">795</span> /**<a name="line.795"></a>
-<span class="sourceLineNo">796</span> * Same as {@link #getInt(String)} but returns a default value if not set.<a name="line.796"></a>
-<span class="sourceLineNo">797</span> *<a name="line.797"></a>
-<span class="sourceLineNo">798</span> * @param key The key.<a name="line.798"></a>
-<span class="sourceLineNo">799</span> * @param def The default value if the value does not exist.<a name="line.799"></a>
-<span class="sourceLineNo">800</span> * @return The value, or the default value if the value does not exist or the value is empty.<a name="line.800"></a>
-<span class="sourceLineNo">801</span> */<a name="line.801"></a>
-<span class="sourceLineNo">802</span> public int getInt(String key, int def) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span> String s = getString(key);<a name="line.803"></a>
-<span class="sourceLineNo">804</span> if (isEmpty(s))<a name="line.804"></a>
-<span class="sourceLineNo">805</span> return def;<a name="line.805"></a>
-<span class="sourceLineNo">806</span> return parseIntWithSuffix(s);<a name="line.806"></a>
-<span class="sourceLineNo">807</span> }<a name="line.807"></a>
-<span class="sourceLineNo">808</span><a name="line.808"></a>
-<span class="sourceLineNo">809</span> /**<a name="line.809"></a>
-<span class="sourceLineNo">810</span> * Convenience method for getting boolean config values.<a name="line.810"></a>
-<span class="sourceLineNo">811</span> *<a name="line.811"></a>
-<span class="sourceLineNo">812</span> * @param key The key.<a name="line.812"></a>
-<span class="sourceLineNo">813</span> * @return The value, or <jk>false</jk> if the section or key does not exist or cannot be parsed as a boolean.<a name="line.813"></a>
-<span class="sourceLineNo">814</span> */<a name="line.814"></a>
-<span class="sourceLineNo">815</span> public boolean getBoolean(String key) {<a name="line.815"></a>
-<span class="sourceLineNo">816</span> return getBoolean(key, false);<a name="line.816"></a>
-<span class="sourceLineNo">817</span> }<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span> /**<a name="line.819"></a>
-<span class="sourceLineNo">820</span> * Convenience method for getting boolean config values.<a name="line.820"></a>
-<span class="sourceLineNo">821</span> *<a name="line.821"></a>
-<span class="sourceLineNo">822</span> * @param key The key.<a name="line.822"></a>
-<span class="sourceLineNo">823</span> * @param def The default value if the value does not exist.<a name="line.823"></a>
-<span class="sourceLineNo">824</span> * @return The value, or the default value if the section or key does not exist or cannot be parsed as a boolean.<a name="line.824"></a>
-<span class="sourceLineNo">825</span> */<a name="line.825"></a>
-<span class="sourceLineNo">826</span> public boolean getBoolean(String key, boolean def) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span> String s = getString(key);<a name="line.827"></a>
-<span class="sourceLineNo">828</span> return isEmpty(s) ? def : Boolean.parseBoolean(s);<a name="line.828"></a>
-<span class="sourceLineNo">829</span> }<a name="line.829"></a>
-<span class="sourceLineNo">830</span><a name="line.830"></a>
-<span class="sourceLineNo">831</span> /**<a name="line.831"></a>
-<span class="sourceLineNo">832</span> * Convenience method for getting long config values.<a name="line.832"></a>
-<span class="sourceLineNo">833</span> *<a name="line.833"></a>
-<span class="sourceLineNo">834</span> * <p><a name="line.834"></a>
-<span class="sourceLineNo">835</span> * <js>"K"</js>, <js>"M"</js>, and <js>"G"</js> can be used to identify kilo, mega, and giga.<a name="line.835"></a>
-<span class="sourceLineNo">836</span> *<a name="line.836"></a>
-<span class="sourceLineNo">837</span> * <h5 class='section'>Example:</h5><a name="line.837"></a>
-<span class="sourceLineNo">838</span> * <ul class='spaced-list'><a name="line.838"></a>
-<span class="sourceLineNo">839</span> * <li><a name="line.839"></a>
-<span class="sourceLineNo">840</span> * <code><js>"100K"</js> => 1024000</code><a name="line.840"></a>
-<span class="sourceLineNo">841</span> * <li><a name="line.841"></a>
-<span class="sourceLineNo">842</span> * <code><js>"100M"</js> => 104857600</code><a name="line.842"></a>
-<span class="sourceLineNo">843</span> * </ul><a name="line.843"></a>
-<span class="sourceLineNo">844</span> *<a name="line.844"></a>
-<span class="sourceLineNo">845</span> * <p><a name="line.845"></a>
-<span class="sourceLineNo">846</span> * Uses {@link Long#decode(String)} underneath, so any of the following number formats are supported:<a name="line.846"></a>
-<span class="sourceLineNo">847</span> * <ul><a name="line.847"></a>
-<span class="sourceLineNo">848</span> * <li><js>"0x..."</js><a name="line.848"></a>
-<span class="sourceLineNo">849</span> * <li><js>"0X..."</js><a name="line.849"></a>
-<span class="sourceLineNo">850</span> * <li><js>"#..."</js><a name="line.850"></a>
-<span class="sourceLineNo">851</span> * <li><js>"0..."</js><a name="line.851"></a>
-<span class="sourceLineNo">852</span> * </ul><a name="line.852"></a>
-<span class="sourceLineNo">853</span> *<a name="line.853"></a>
-<span class="sourceLineNo">854</span> * @param key The key.<a name="line.854"></a>
-<span class="sourceLineNo">855</span> * @return The value, or <code>0</code> if the value does not exist or the value is empty.<a name="line.855"></a>
-<span class="sourceLineNo">856</span> */<a name="line.856"></a>
-<span class="sourceLineNo">857</span> public long getLong(String key) {<a name="line.857"></a>
-<span class="sourceLineNo">858</span> return getLong(key, 0);<a name="line.858"></a>
-<span class="sourceLineNo">859</span> }<a name="line.859"></a>
-<span class="sourceLineNo">860</span><a name="line.860"></a>
-<span class="sourceLineNo">861</span> /**<a name="line.861"></a>
-<span class="sourceLineNo">862</span> * Same as {@link #getLong(String)} but returns a default value if not set.<a name="line.862"></a>
-<span class="sourceLineNo">863</span> *<a name="line.863"></a>
-<span class="sourceLineNo">864</span> * @param key The key.<a name="line.864"></a>
-<span class="sourceLineNo">865</span> * @param def The default value if the value does not exist.<a name="line.865"></a>
-<span class="sourceLineNo">866</span> * @return The value, or the default value if the value does not exist or the value is empty.<a name="line.866"></a>
-<span class="sourceLineNo">867</span> */<a name="line.867"></a>
-<span class="sourceLineNo">868</span> public long getLong(String key, long def) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span> String s = getString(key);<a name="line.869"></a>
-<span class="sourceLineNo">870</span> if (isEmpty(s))<a name="line.870"></a>
-<span class="sourceLineNo">871</span> return def;<a name="line.871"></a>
-<span class="sourceLineNo">872</span> return parseLongWithSuffix(s);<a name="line.872"></a>
-<span class="sourceLineNo">873</span> }<a name="line.873"></a>
-<span class="sourceLineNo">874</span><a name="line.874"></a>
-<span class="sourceLineNo">875</span> /**<a name="line.875"></a>
-<span class="sourceLineNo">876</span> * Convenience method for getting double config values.<a name="line.876"></a>
-<span class="sourceLineNo">877</span> *<a name="line.877"></a>
-<span class="sourceLineNo">878</span> * <p><a name="line.878"></a>
-<span class="sourceLineNo">879</span> * Uses {@link Double#valueOf(String)} underneath, so any of the following number formats are supported:<a name="line.879"></a>
-<span class="sourceLineNo">880</span> * <ul><a name="line.880"></a>
-<span class="sourceLineNo">881</span> * <li><js>"0x..."</js><a name="line.881"></a>
-<span class="sourceLineNo">882</span> * <li><js>"0X..."</js><a name="line.882"></a>
-<span class="sourceLineNo">883</span> * <li><js>"#..."</js><a name="line.883"></a>
-<span class="sourceLineNo">884</span> * <li><js>"0..."</js><a name="line.884"></a>
-<span class="sourceLineNo">885</span> * </ul><a name="line.885"></a>
-<span class="sourceLineNo">886</span> *<a name="line.886"></a>
-<span class="sourceLineNo">887</span> * @param key The key.<a name="line.887"></a>
-<span class="sourceLineNo">888</span> * @return The value, or <code>0</code> if the value does not exist or the value is empty.<a name="line.888"></a>
-<span class="sourceLineNo">889</span> */<a name="line.889"></a>
-<span class="sourceLineNo">890</span> public double getDouble(String key) {<a name="line.890"></a>
-<span class="sourceLineNo">891</span> return getDouble(key, 0);<a name="line.891"></a>
-<span class="sourceLineNo">892</span> }<a name="line.892"></a>
-<span class="sourceLineNo">893</span><a name="line.893"></a>
-<span class="sourceLineNo">894</span> /**<a name="line.894"></a>
-<span class="sourceLineNo">895</span> * Same as {@link #getDouble(String)} but returns a default value if not set.<a name="line.895"></a>
-<span class="sourceLineNo">896</span> *<a name="line.896"></a>
-<span class="sourceLineNo">897</span> * @param key The key.<a name="line.897"></a>
-<span class="sourceLineNo">898</span> * @param def The default value if the value does not exist.<a name="line.898"></a>
-<span class="sourceLineNo">899</span> * @return The value, or the default value if the value does not exist or the value is empty.<a name="line.899"></a>
-<span class="sourceLineNo">900</span> */<a name="line.900"></a>
-<span class="sourceLineNo">901</span> public double getDouble(String key, double def) {<a name="line.901"></a>
-<span class="sourceLineNo">902</span> String s = getString(key);<a name="line.902"></a>
-<span class="sourceLineNo">903</span> if (isEmpty(s))<a name="line.903"></a>
-<span class="sourceLineNo">904</span> return def;<a name="line.904"></a>
-<span class="sourceLineNo">905</span> return Double.valueOf(s);<a name="line.905"></a>
-<span class="sourceLineNo">906</span> }<a name="line.906"></a>
-<span class="sourceLineNo">907</span><a name="line.907"></a>
-<span class="sourceLineNo">908</span> /**<a name="line.908"></a>
-<span class="sourceLineNo">909</span> * Convenience method for getting float config values.<a name="line.909"></a>
-<span class="sourceLineNo">910</span> *<a name="line.910"></a>
-<span class="sourceLineNo">911</span> * <p><a name="line.911"></a>
-<span class="sourceLineNo">912</span> * Uses {@link Float#valueOf(String)} underneath, so any of the following number formats are supported:<a name="line.912"></a>
-<span class="sourceLineNo">913</span> * <ul><a name="line.913"></a>
-<span class="sourceLineNo">914</span> * <li><js>"0x..."</js><a name="line.914"></a>
-<span class="sourceLineNo">915</span> * <li><js>"0X..."</js><a name="line.915"></a>
-<span class="sourceLineNo">916</span> * <li><js>"#..."</js><a name="line.916"></a>
-<span class="sourceLineNo">917</span> * <li><js>"0..."</js><a name="line.917"></a>
-<span class="sourceLineNo">918</span> * </ul><a name="line.918"></a>
-<span class="sourceLineNo">919</span> *<a name="line.919"></a>
-<span class="sourceLineNo">920</span> * @param key The key.<a name="line.920"></a>
-<span class="sourceLineNo">921</span> * @return The value, or <code>0</code> if the value does not exist or the value is empty.<a name="line.921"></a>
-<span class="sourceLineNo">922</span> */<a name="line.922"></a>
-<span class="sourceLineNo">923</span> public float getFloat(String key) {<a name="line.923"></a>
-<span class="sourceLineNo">924</span> return getFloat(key, 0);<a name="line.924"></a>
-<span class="sourceLineNo">925</span> }<a name="line.925"></a>
-<span class="sourceLineNo">926</span><a name="line.926"></a>
-<span class="sourceLineNo">927</span> /**<a name="line.927"></a>
-<span class="sourceLineNo">928</span> * Same as {@link #getFloat(String)} but returns a default value if not set.<a name="line.928"></a>
-<span class="sourceLineNo">929</span> *<a name="line.929"></a>
-<span class="sourceLineNo">930</span> * @param key The key.<a name="line.930"></a>
-<span class="sourceLineNo">931</span> * @param def The default value if the value does not exist.<a name="line.931"></a>
-<span class="sourceLineNo">932</span> * @return The value, or the default value if the value does not exist or the value is empty.<a name="line.932"></a>
-<span class="sourceLineNo">933</span> */<a name="line.933"></a>
-<span class="sourceLineNo">934</span> public float getFloat(String key, float def) {<a name="line.934"></a>
-<span class="sourceLineNo">935</span> String s = getString(key);<a name="line.935"></a>
-<span class="sourceLineNo">936</span> if (isEmpty(s))<a name="line.936"></a>
-<span class="sourceLineNo">937</span> return def;<a name="line.937"></a>
-<span class="sourceLineNo">938</span> return Float.valueOf(s);<a name="line.938"></a>
-<span class="sourceLineNo">939</span> }<a name="line.939"></a>
-<span class="sourceLineNo">940</span><a name="line.940"></a>
-<span class="sourceLineNo">941</span> /**<a name="line.941"></a>
-<span class="sourceLineNo">942</span> * Convenience method for getting byte array config values.<a name="line.942"></a>
-<span class="sourceLineNo">943</span> *<a name="line.943"></a>
-<span class="sourceLineNo">944</span> * <p><a name="line.944"></a>
-<span class="sourceLineNo">945</span> * This is equivalent to calling the following:<a name="line.945"></a>
-<span class="sourceLineNo">946</span> * <p class='bcode w800'><a name="line.946"></a>
-<span class="sourceLineNo">947</span> * <jk>byte</jk>[] b = config.getObject(key, <jk>byte</jk>[].<jk>class</jk>);<a name="line.947"></a>
-<span class="sourceLineNo">948</span> * </p><a name="line.948"></a>
+<span class="sourceLineNo">624</span> * @param comment<a name="line.624"></a>
+<span class="sourceLineNo">625</span> * Optional same-line comment to add to this value.<a name="line.625"></a>
+<span class="sourceLineNo">626</span> * <br>If <jk>null</jk>, then previous value will not be replaced.<a name="line.626"></a>
+<span class="sourceLineNo">627</span> * @param preLines<a name="line.627"></a>
+<span class="sourceLineNo">628</span> * Optional comment or blank lines to add before this entry.<a name="line.628"></a>
+<span class="sourceLineNo">629</span> * <br>If <jk>null</jk>, then previous value will not be replaced.<a name="line.629"></a>
+<span class="sourceLineNo">630</span> * @return The previous value, or <jk>null</jk> if the section or key did not previously exist.<a name="line.630"></a>
+<span class="sourceLineNo">631</span> * @throws SerializeException<a name="line.631"></a>
+<span class="sourceLineNo">632</span> * If serializer could not serialize the value or if a serializer is not registered with this config file.<a name="line.632"></a>
+<span class="sourceLineNo">633</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.633"></a>
+<span class="sourceLineNo">634</span> */<a name="line.634"></a>
+<span class="sourceLineNo">635</span> public Config set(String key, Object value, Serializer serializer, ConfigMod[] modifiers, String comment, List<String> preLines) throws SerializeException {<a name="line.635"></a>
+<span class="sourceLineNo">636</span> checkWrite();<a name="line.636"></a>
+<span class="sourceLineNo">637</span> assertFieldNotNull(key, "key");<a name="line.637"></a>
+<span class="sourceLineNo">638</span> String sname = sname(key);<a name="line.638"></a>
+<span class="sourceLineNo">639</span> String skey = skey(key);<a name="line.639"></a>
+<span class="sourceLineNo">640</span><a name="line.640"></a>
+<span class="sourceLineNo">641</span> String s = serialize(value, serializer);<a name="line.641"></a>
+<span class="sourceLineNo">642</span> if (modifiers != null) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span> for (ConfigMod m : modifiers) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span> if (m == ENCODED) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span> s = encoder.encode(key, s);<a name="line.645"></a>
+<span class="sourceLineNo">646</span> }<a name="line.646"></a>
+<span class="sourceLineNo">647</span> }<a name="line.647"></a>
+<span class="sourceLineNo">648</span> }<a name="line.648"></a>
+<span class="sourceLineNo">649</span><a name="line.649"></a>
+<span class="sourceLineNo">650</span> configMap.setEntry(sname, skey, s, modifiers == null ? null : ConfigMod.asString(modifiers), comment, preLines);<a name="line.650"></a>
+<span class="sourceLineNo">651</span> return this;<a name="line.651"></a>
+<span class="sourceLineNo">652</span> }<a name="line.652"></a>
+<span class="sourceLineNo">653</span><a name="line.653"></a>
+<span class="sourceLineNo">654</span> /**<a name="line.654"></a>
+<span class="sourceLineNo">655</span> * Removes an entry with the specified key.<a name="line.655"></a>
+<span class="sourceLineNo">656</span> *<a name="line.656"></a>
+<span class="sourceLineNo">657</span> * @param key The key.<a name="line.657"></a>
+<span class="sourceLineNo">658</span> * @return The previous value, or <jk>null</jk> if the section or key did not previously exist.<a name="line.658"></a>
+<span class="sourceLineNo">659</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.659"></a>
+<span class="sourceLineNo">660</span> */<a name="line.660"></a>
+<span class="sourceLineNo">661</span> public Config remove(String key) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span> checkWrite();<a name="line.662"></a>
+<span class="sourceLineNo">663</span> String sname = sname(key);<a name="line.663"></a>
+<span class="sourceLineNo">664</span> String skey = skey(key);<a name="line.664"></a>
+<span class="sourceLineNo">665</span> configMap.removeEntry(sname, skey);<a name="line.665"></a>
+<span class="sourceLineNo">666</span> return this;<a name="line.666"></a>
+<span class="sourceLineNo">667</span> }<a name="line.667"></a>
+<span class="sourceLineNo">668</span><a name="line.668"></a>
+<span class="sourceLineNo">669</span> /**<a name="line.669"></a>
+<span class="sourceLineNo">670</span> * Encodes and unencoded entries in this config.<a name="line.670"></a>
+<span class="sourceLineNo">671</span> *<a name="line.671"></a>
+<span class="sourceLineNo">672</span> * <p><a name="line.672"></a>
+<span class="sourceLineNo">673</span> * If any entries in the config are marked as encoded but not actually encoded,<a name="line.673"></a>
+<span class="sourceLineNo">674</span> * this will encode them.<a name="line.674"></a>
+<span class="sourceLineNo">675</span> *<a name="line.675"></a>
+<span class="sourceLineNo">676</span> * @return This object (for method chaining).<a name="line.676"></a>
+<span class="sourceLineNo">677</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.677"></a>
+<span class="sourceLineNo">678</span> */<a name="line.678"></a>
+<span class="sourceLineNo">679</span> public Config encodeEntries() {<a name="line.679"></a>
+<span class="sourceLineNo">680</span> checkWrite();<a name="line.680"></a>
+<span class="sourceLineNo">681</span> for (String section : configMap.getSections()) {<a name="line.681"></a>
+<span class="sourceLineNo">682</span> for (String key : configMap.getKeys(section)) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span> ConfigEntry ce = configMap.getEntry(section, key);<a name="line.683"></a>
+<span class="sourceLineNo">684</span> if (ce != null && ce.hasModifier('*') && ! encoder.isEncoded(ce.getValue())) {<a name="line.684"></a>
+<span class="sourceLineNo">685</span> configMap.setEntry(section, key, encoder.encode(section + '/' + key, ce.getValue()), null, null, null);<a name="line.685"></a>
+<span class="sourceLineNo">686</span> }<a name="line.686"></a>
+<span class="sourceLineNo">687</span> }<a name="line.687"></a>
+<span class="sourceLineNo">688</span> }<a name="line.688"></a>
+<span class="sourceLineNo">689</span><a name="line.689"></a>
+<span class="sourceLineNo">690</span> return this;<a name="line.690"></a>
+<span class="sourceLineNo">691</span> }<a name="line.691"></a>
+<span class="sourceLineNo">692</span><a name="line.692"></a>
+<span class="sourceLineNo">693</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.693"></a>
+<span class="sourceLineNo">694</span> // API methods<a name="line.694"></a>
+<span class="sourceLineNo">695</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.695"></a>
+<span class="sourceLineNo">696</span><a name="line.696"></a>
+<span class="sourceLineNo">697</span> /**<a name="line.697"></a>
+<span class="sourceLineNo">698</span> * Gets the entry with the specified key.<a name="line.698"></a>
+<span class="sourceLineNo">699</span> *<a name="line.699"></a>
+<span class="sourceLineNo">700</span> * <p><a name="line.700"></a>
+<span class="sourceLineNo">701</span> * The key can be in one of the following formats...<a name="line.701"></a>
+<span class="sourceLineNo">702</span> * <ul class='spaced-list'><a name="line.702"></a>
+<span class="sourceLineNo">703</span> * <li><a name="line.703"></a>
+<span class="sourceLineNo">704</span> * <js>"key"</js> - A value in the default section (i.e. defined above any <code>[section]</code> header).<a name="line.704"></a>
+<span class="sourceLineNo">705</span> * <li><a name="line.705"></a>
+<span class="sourceLineNo">706</span> * <js>"section/key"</js> - A value from the specified section.<a name="line.706"></a>
+<span class="sourceLineNo">707</span> * </ul><a name="line.707"></a>
+<span class="sourceLineNo">708</span> *<a name="line.708"></a>
+<span class="sourceLineNo">709</span> * @param key The key.<a name="line.709"></a>
+<span class="sourceLineNo">710</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.710"></a>
+<span class="sourceLineNo">711</span> */<a name="line.711"></a>
+<span class="sourceLineNo">712</span> public String getString(String key) {<a name="line.712"></a>
+<span class="sourceLineNo">713</span> String s = get(key);<a name="line.713"></a>
+<span class="sourceLineNo">714</span> if (s == null)<a name="line.714"></a>
+<span class="sourceLineNo">715</span> return null;<a name="line.715"></a>
+<span class="sourceLineNo">716</span> if (varSession != null)<a name="line.716"></a>
+<span class="sourceLineNo">717</span> s = varSession.resolve(s);<a name="line.717"></a>
+<span class="sourceLineNo">718</span> return s;<a name="line.718"></a>
+<span class="sourceLineNo">719</span> }<a name="line.719"></a>
+<span class="sourceLineNo">720</span><a name="line.720"></a>
+<span class="sourceLineNo">721</span> /**<a name="line.721"></a>
+<span class="sourceLineNo">722</span> * Gets the entry with the specified key.<a name="line.722"></a>
+<span class="sourceLineNo">723</span> *<a name="line.723"></a>
+<span class="sourceLineNo">724</span> * <p><a name="line.724"></a>
+<span class="sourceLineNo">725</span> * The key can be in one of the following formats...<a name="line.725"></a>
+<span class="sourceLineNo">726</span> * <ul class='spaced-list'><a name="line.726"></a>
+<span class="sourceLineNo">727</span> * <li><a name="line.727"></a>
+<span class="sourceLineNo">728</span> * <js>"key"</js> - A value in the default section (i.e. defined above any <code>[section]</code> header).<a name="line.728"></a>
+<span class="sourceLineNo">729</span> * <li><a name="line.729"></a>
+<span class="sourceLineNo">730</span> * <js>"section/key"</js> - A value from the specified section.<a name="line.730"></a>
+<span class="sourceLineNo">731</span> * </ul><a name="line.731"></a>
+<span class="sourceLineNo">732</span> *<a name="line.732"></a>
+<span class="sourceLineNo">733</span> * @param key The key.<a name="line.733"></a>
+<span class="sourceLineNo">734</span> * @param def The default value if the value does not exist.<a name="line.734"></a>
+<span class="sourceLineNo">735</span> * @return The value, or the default value if the section or key does not exist.<a name="line.735"></a>
+<span class="sourceLineNo">736</span> */<a name="line.736"></a>
+<span class="sourceLineNo">737</span> public String getString(String key, String def) {<a name="line.737"></a>
+<span class="sourceLineNo">738</span> String s = get(key);<a name="line.738"></a>
+<span class="sourceLineNo">739</span> if (isEmpty(s))<a name="line.739"></a>
+<span class="sourceLineNo">740</span> return def;<a name="line.740"></a>
+<span class="sourceLineNo">741</span> if (varSession != null)<a name="line.741"></a>
+<span class="sourceLineNo">742</span> s = varSession.resolve(s);<a name="line.742"></a>
+<span class="sourceLineNo">743</span> return s;<a name="line.743"></a>
+<span class="sourceLineNo">744</span> }<a name="line.744"></a>
+<span class="sourceLineNo">745</span><a name="line.745"></a>
+<span class="sourceLineNo">746</span> /**<a name="line.746"></a>
+<span class="sourceLineNo">747</span> * Gets the entry with the specified key, splits the value on commas, and returns the values as trimmed strings.<a name="line.747"></a>
+<span class="sourceLineNo">748</span> *<a name="line.748"></a>
+<span class="sourceLineNo">749</span> * @param key The key.<a name="line.749"></a>
+<span class="sourceLineNo">750</span> * @return The value, or an empty array if the section or key does not exist.<a name="line.750"></a>
+<span class="sourceLineNo">751</span> */<a name="line.751"></a>
+<span class="sourceLineNo">752</span> public String[] getStringArray(String key) {<a name="line.752"></a>
+<span class="sourceLineNo">753</span> return getStringArray(key, new String[0]);<a name="line.753"></a>
+<span class="sourceLineNo">754</span> }<a name="line.754"></a>
+<span class="sourceLineNo">755</span><a name="line.755"></a>
+<span class="sourceLineNo">756</span> /**<a name="line.756"></a>
+<span class="sourceLineNo">757</span> * Same as {@link #getStringArray(String)} but returns a default value if the value cannot be found.<a name="line.757"></a>
+<span class="sourceLineNo">758</span> *<a name="line.758"></a>
+<span class="sourceLineNo">759</span> * @param key The key.<a name="line.759"></a>
+<span class="sourceLineNo">760</span> * @param def The default value if the value does not exist.<a name="line.760"></a>
+<span class="sourceLineNo">761</span> * @return The value, or the default value if the section or key does not exist or is blank.<a name="line.761"></a>
+<span class="sourceLineNo">762</span> */<a name="line.762"></a>
+<span class="sourceLineNo">763</span> public String[] getStringArray(String key, String[] def) {<a name="line.763"></a>
+<span class="sourceLineNo">764</span> String s = getString(key);<a name="line.764"></a>
+<span class="sourceLineNo">765</span> if (isEmpty(s))<a name="line.765"></a>
+<span class="sourceLineNo">766</span> return def;<a name="line.766"></a>
+<span class="sourceLineNo">767</span> String[] r = split(s);<a name="line.767"></a>
+<span class="sourceLineNo">768</span> return r.length == 0 ? def : r;<a name="line.768"></a>
+<span class="sourceLineNo">769</span> }<a name="line.769"></a>
+<span class="sourceLineNo">770</span><a name="line.770"></a>
+<span class="sourceLineNo">771</span> /**<a name="line.771"></a>
+<span class="sourceLineNo">772</span> * Convenience method for getting int config values.<a name="line.772"></a>
+<span class="sourceLineNo">773</span> *<a name="line.773"></a>
+<span class="sourceLineNo">774</span> * <p><a name="line.774"></a>
+<span class="sourceLineNo">775</span> * <js>"K"</js>, <js>"M"</js>, and <js>"G"</js> can be used to identify kilo, mega, and giga.<a name="line.775"></a>
+<span class="sourceLineNo">776</span> *<a name="line.776"></a>
+<span class="sourceLineNo">777</span> * <h5 class='section'>Example:</h5><a name="line.777"></a>
+<span class="sourceLineNo">778</span> * <ul class='spaced-list'><a name="line.778"></a>
+<span class="sourceLineNo">779</span> * <li><a name="line.779"></a>
+<span class="sourceLineNo">780</span> * <code><js>"100K"</js> => 1024000</code><a name="line.780"></a>
+<span class="sourceLineNo">781</span> * <li><a name="line.781"></a>
+<span class="sourceLineNo">782</span> * <code><js>"100M"</js> => 104857600</code><a name="line.782"></a>
+<span class="sourceLineNo">783</span> * </ul><a name="line.783"></a>
+<span class="sourceLineNo">784</span> *<a name="line.784"></a>
+<span class="sourceLineNo">785</span> * <p><a name="line.785"></a>
+<span class="sourceLineNo">786</span> * Uses {@link Integer#decode(String)} underneath, so any of the following integer formats are supported:<a name="line.786"></a>
+<span class="sourceLineNo">787</span> * <ul><a name="line.787"></a>
+<span class="sourceLineNo">788</span> * <li><js>"0x..."</js><a name="line.788"></a>
+<span class="sourceLineNo">789</span> * <li><js>"0X..."</js><a name="line.789"></a>
+<span class="sourceLineNo">790</span> * <li><js>"#..."</js><a name="line.790"></a>
+<span class="sourceLineNo">791</span> * <li><js>"0..."</js><a name="line.791"></a>
+<span class="sourceLineNo">792</span> * </ul><a name="line.792"></a>
+<span class="sourceLineNo">793</span> *<a name="line.793"></a>
+<span class="sourceLineNo">794</span> * @param key The key.<a name="line.794"></a>
+<span class="sourceLineNo">795</span> * @return The value, or <code>0</code> if the value does not exist or the value is empty.<a name="line.795"></a>
+<span class="sourceLineNo">796</span> */<a name="line.796"></a>
+<span class="sourceLineNo">797</span> public int getInt(String key) {<a name="line.797"></a>
+<span class="sourceLineNo">798</span> return getInt(key, 0);<a name="line.798"></a>
+<span class="sourceLineNo">799</span> }<a name="line.799"></a>
+<span class="sourceLineNo">800</span><a name="line.800"></a>
+<span class="sourceLineNo">801</span> /**<a name="line.801"></a>
+<span class="sourceLineNo">802</span> * Same as {@link #getInt(String)} but returns a default value if not set.<a name="line.802"></a>
+<span class="sourceLineNo">803</span> *<a name="line.803"></a>
+<span class="sourceLineNo">804</span> * @param key The key.<a name="line.804"></a>
+<span class="sourceLineNo">805</span> * @param def The default value if the value does not exist.<a name="line.805"></a>
+<span class="sourceLineNo">806</span> * @return The value, or the default value if the value does not exist or the value is empty.<a name="line.806"></a>
+<span class="sourceLineNo">807</span> */<a name="line.807"></a>
+<span class="sourceLineNo">808</span> public int getInt(String key, int def) {<a name="line.808"></a>
+<span class="sourceLineNo">809</span> String s = getString(key);<a name="line.809"></a>
+<span class="sourceLineNo">810</span> if (isEmpty(s))<a name="line.810"></a>
+<span class="sourceLineNo">811</span> return def;<a name="line.811"></a>
+<span class="sourceLineNo">812</span> return parseIntWithSuffix(s);<a name="line.812"></a>
+<span class="sourceLineNo">813</span> }<a name="line.813"></a>
+<span class="sourceLineNo">814</span><a name="line.814"></a>
+<span class="sourceLineNo">815</span> /**<a name="line.815"></a>
+<span class="sourceLineNo">816</span> * Convenience method for getting boolean config values.<a name="line.816"></a>
+<span class="sourceLineNo">817</span> *<a name="line.817"></a>
+<span class="sourceLineNo">818</span> * @param key The key.<a name="line.818"></a>
+<span class="sourceLineNo">819</span> * @return The value, or <jk>false</jk> if the section or key does not exist or cannot be parsed as a boolean.<a name="line.819"></a>
+<span class="sourceLineNo">820</span> */<a name="line.820"></a>
+<span class="sourceLineNo">821</span> public boolean getBoolean(String key) {<a name="line.821"></a>
+<span class="sourceLineNo">822</span> return getBoolean(key, false);<a name="line.822"></a>
+<span class="sourceLineNo">823</span> }<a name="line.823"></a>
+<span class="sourceLineNo">824</span><a name="line.824"></a>
+<span class="sourceLineNo">825</span> /**<a name="line.825"></a>
+<span class="sourceLineNo">826</span> * Convenience method for getting boolean config values.<a name="line.826"></a>
+<span class="sourceLineNo">827</span> *<a name="line.827"></a>
+<span class="sourceLineNo">828</span> * @param key The key.<a name="line.828"></a>
+<span class="sourceLineNo">829</span> * @param def The default value if the value does not exist.<a name="line.829"></a>
+<span class="sourceLineNo">830</span> * @return The value, or the default value if the section or key does not exist or cannot be parsed as a boolean.<a name="line.830"></a>
+<span class="sourceLineNo">831</span> */<a name="line.831"></a>
+<span class="sourceLineNo">832</span> public boolean getBoolean(String key, boolean def) {<a name="line.832"></a>
+<span class="sourceLineNo">833</span> String s = getString(key);<a name="line.833"></a>
+<span class="sourceLineNo">834</span> return isEmpty(s) ? def : Boolean.parseBoolean(s);<a name="line.834"></a>
+<span class="sourceLineNo">835</span> }<a name="line.835"></a>
+<span class="sourceLineNo">836</span><a name="line.836"></a>
+<span class="sourceLineNo">837</span> /**<a name="line.837"></a>
+<span class="sourceLineNo">838</span> * Convenience method for getting long config values.<a name="line.838"></a>
+<span class="sourceLineNo">839</span> *<a name="line.839"></a>
+<span class="sourceLineNo">840</span> * <p><a name="line.840"></a>
+<span class="sourceLineNo">841</span> * <js>"K"</js>, <js>"M"</js>, and <js>"G"</js> can be used to identify kilo, mega, and giga.<a name="line.841"></a>
+<span class="sourceLineNo">842</span> *<a name="line.842"></a>
+<span class="sourceLineNo">843</span> * <h5 class='section'>Example:</h5><a name="line.843"></a>
+<span class="sourceLineNo">844</span> * <ul class='spaced-list'><a name="line.844"></a>
+<span class="sourceLineNo">845</span> * <li><a name="line.845"></a>
+<span class="sourceLineNo">846</span> * <code><js>"100K"</js> => 1024000</code><a name="line.846"></a>
+<span class="sourceLineNo">847</span> * <li><a name="line.847"></a>
+<span class="sourceLineNo">848</span> * <code><js>"100M"</js> => 104857600</code><a name="line.848"></a>
+<span class="sourceLineNo">849</span> * </ul><a name="line.849"></a>
+<span class="sourceLineNo">850</span> *<a name="line.850"></a>
+<span class="sourceLineNo">851</span> * <p><a name="line.851"></a>
+<span class="sourceLineNo">852</span> * Uses {@link Long#decode(String)} underneath, so any of the following number formats are supported:<a name="line.852"></a>
+<span class="sourceLineNo">853</span> * <ul><a name="line.853"></a>
+<span class="sourceLineNo">854</span> * <li><js>"0x..."</js><a name="line.854"></a>
+<span class="sourceLineNo">855</span> * <li><js>"0X..."</js><a name="line.855"></a>
+<span class="sourceLineNo">856</span> * <li><js>"#..."</js><a name="line.856"></a>
+<span class="sourceLineNo">857</span> * <li><js>"0..."</js><a name="line.857"></a>
+<span class="sourceLineNo">858</span> * </ul><a name="line.858"></a>
+<span class="sourceLineNo">859</span> *<a name="line.859"></a>
+<span class="sourceLineNo">860</span> * @param key The key.<a name="line.860"></a>
+<span class="sourceLineNo">861</span> * @return The value, or <code>0</code> if the value does not exist or the value is empty.<a name="line.861"></a>
+<span class="sourceLineNo">862</span> */<a name="line.862"></a>
+<span class="sourceLineNo">863</span> public long getLong(String key) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span> return getLong(key, 0);<a name="line.864"></a>
+<span class="sourceLineNo">865</span> }<a name="line.865"></a>
+<span class="sourceLineNo">866</span><a name="line.866"></a>
+<span class="sourceLineNo">867</span> /**<a name="line.867"></a>
+<span class="sourceLineNo">868</span> * Same as {@link #getLong(String)} but returns a default value if not set.<a name="line.868"></a>
+<span class="sourceLineNo">869</span> *<a name="line.869"></a>
+<span class="sourceLineNo">870</span> * @param key The key.<a name="line.870"></a>
+<span class="sourceLineNo">871</span> * @param def The default value if the value does not exist.<a name="line.871"></a>
+<span class="sourceLineNo">872</span> * @return The value, or the default value if the value does not exist or the value is empty.<a name="line.872"></a>
+<span class="sourceLineNo">873</span> */<a name="line.873"></a>
+<span class="sourceLineNo">874</span> public long getLong(String key, long def) {<a name="line.874"></a>
+<span class="sourceLineNo">875</span> String s = getString(key);<a name="line.875"></a>
+<span class="sourceLineNo">876</span> if (isEmpty(s))<a name="line.876"></a>
+<span class="sourceLineNo">877</span> return def;<a name="line.877"></a>
+<span class="sourceLineNo">878</span> return parseLongWithSuffix(s);<a name="line.878"></a>
+<span class="sourceLineNo">879</span> }<a name="line.879"></a>
+<span class="sourceLineNo">880</span><a name="line.880"></a>
+<span class="sourceLineNo">881</span> /**<a name="line.881"></a>
+<span class="sourceLineNo">882</span> * Convenience method for getting double config values.<a name="line.882"></a>
+<span class="sourceLineNo">883</span> *<a name="line.883"></a>
+<span class="sourceLineNo">884</span> * <p><a name="line.884"></a>
+<span class="sourceLineNo">885</span> * Uses {@link Double#valueOf(String)} underneath, so any of the following number formats are supported:<a name="line.885"></a>
+<span class="sourceLineNo">886</span> * <ul><a name="line.886"></a>
+<span class="sourceLineNo">887</span> * <li><js>"0x..."</js><a name="line.887"></a>
+<span class="sourceLineNo">888</span> * <li><js>"0X..."</js><a name="line.888"></a>
+<span class="sourceLineNo">889</span> * <li><js>"#..."</js><a name="line.889"></a>
+<span class="sourceLineNo">890</span> * <li><js>"0..."</js><a name="line.890"></a>
+<span class="sourceLineNo">891</span> * </ul><a name="line.891"></a>
+<span class="sourceLineNo">892</span> *<a name="line.892"></a>
+<span class="sourceLineNo">893</span> * @param key The key.<a name="line.893"></a>
+<span class="sourceLineNo">894</span> * @return The value, or <code>0</code> if the value does not exist or the value is empty.<a name="line.894"></a>
+<span class="sourceLineNo">895</span> */<a name="line.895"></a>
+<span class="sourceLineNo">896</span> public double getDouble(String key) {<a name="line.896"></a>
+<span class="sourceLineNo">897</span> return getDouble(key, 0);<a name="line.897"></a>
+<span class="sourceLineNo">898</span> }<a name="line.898"></a>
+<span class="sourceLineNo">899</span><a name="line.899"></a>
+<span class="sourceLineNo">900</span> /**<a name="line.900"></a>
+<span class="sourceLineNo">901</span> * Same as {@link #getDouble(String)} but returns a default value if not set.<a name="line.901"></a>
+<span class="sourceLineNo">902</span> *<a name="line.902"></a>
+<span class="sourceLineNo">903</span> * @param key The key.<a name="line.903"></a>
+<span class="sourceLineNo">904</span> * @param def The default value if the value does not exist.<a name="line.904"></a>
+<span class="sourceLineNo">905</span> * @return The value, or the default value if the value does not exist or the value is empty.<a name="line.905"></a>
+<span class="sourceLineNo">906</span> */<a name="line.906"></a>
+<span class="sourceLineNo">907</span> public double getDouble(String key, double def) {<a name="line.907"></a>
+<span class="sourceLineNo">908</span> String s = getString(key);<a name="line.908"></a>
+<span class="sourceLineNo">909</span> if (isEmpty(s))<a name="line.909"></a>
+<span class="sourceLineNo">910</span> return def;<a name="line.910"></a>
+<span class="sourceLineNo">911</span> return Double.valueOf(s);<a name="line.911"></a>
+<span class="sourceLineNo">912</span> }<a name="line.912"></a>
+<span class="sourceLineNo">913</span><a name="line.913"></a>
+<span class="sourceLineNo">914</span> /**<a name="line.914"></a>
+<span class="sourceLineNo">915</span> * Convenience method for getting float config values.<a name="line.915"></a>
+<span class="sourceLineNo">916</span> *<a name="line.916"></a>
+<span class="sourceLineNo">917</span> * <p><a name="line.917"></a>
+<span class="sourceLineNo">918</span> * Uses {@link Float#valueOf(String)} underneath, so any of the following number formats are supported:<a name="line.918"></a>
+<span class="sourceLineNo">919</span> * <ul><a name="line.919"></a>
+<span class="sourceLineNo">920</span> * <li><js>"0x..."</js><a name="line.920"></a>
+<span class="sourceLineNo">921</span> * <li><js>"0X..."</js><a name="line.921"></a>
+<span class="sourceLineNo">922</span> * <li><js>"#..."</js><a name="line.922"></a>
+<span class="sourceLineNo">923</span> * <li><js>"0..."</js><a name="line.923"></a>
+<span class="sourceLineNo">924</span> * </ul><a name="line.924"></a>
+<span class="sourceLineNo">925</span> *<a name="line.925"></a>
+<span class="sourceLineNo">926</span> * @param key The key.<a name="line.926"></a>
+<span class="sourceLineNo">927</span> * @return The value, or <code>0</code> if the value does not exist or the value is empty.<a name="line.927"></a>
+<span class="sourceLineNo">928</span> */<a name="line.928"></a>
+<span class="sourceLineNo">929</span> public float getFloat(String key) {<a name="line.929"></a>
+<span class="sourceLineNo">930</span> return getFloat(key, 0);<a name="line.930"></a>
+<span class="sourceLineNo">931</span> }<a name="line.931"></a>
+<span class="sourceLineNo">932</span><a name="line.932"></a>
+<span class="sourceLineNo">933</span> /**<a name="line.933"></a>
+<span class="sourceLineNo">934</span> * Same as {@link #getFloat(String)} but returns a default value if not set.<a name="line.934"></a>
+<span class="sourceLineNo">935</span> *<a name="line.935"></a>
+<span class="sourceLineNo">936</span> * @param key The key.<a name="line.936"></a>
+<span class="sourceLineNo">937</span> * @param def The default value if the value does not exist.<a name="line.937"></a>
+<span class="sourceLineNo">938</span> * @return The value, or the default value if the value does not exist or the value is empty.<a name="line.938"></a>
+<span class="sourceLineNo">939</span> */<a name="line.939"></a>
+<span class="sourceLineNo">940</span> public float getFloat(String key, float def) {<a name="line.940"></a>
+<span class="sourceLineNo">941</span> String s = getString(key);<a name="line.941"></a>
+<span class="sourceLineNo">942</span> if (isEmpty(s))<a name="line.942"></a>
+<span class="sourceLineNo">943</span> return def;<a name="line.943"></a>
+<span class="sourceLineNo">944</span> return Float.valueOf(s);<a name="line.944"></a>
+<span class="sourceLineNo">945</span> }<a name="line.945"></a>
+<span class="sourceLineNo">946</span><a name="line.946"></a>
+<span class="sourceLineNo">947</span> /**<a name="line.947"></a>
+<span class="sourceLineNo">948</span> * Convenience method for getting byte array config values.<a name="line.948"></a>
<span class="sourceLineNo">949</span> *<a name="line.949"></a>
-<span class="sourceLineNo">950</span> * Byte arrays are stored as encoded strings, typically BASE64, but dependent on the {@link #CONFIG_binaryFormat} setting.<a name="line.950"></a>
-<span class="sourceLineNo">951</span> *<a name="line.951"></a>
-<span class="sourceLineNo">952</span> * @param key The key.<a name="line.952"></a>
-<span class="sourceLineNo">953</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.953"></a>
-<span class="sourceLineNo">954</span> * @throws ParseException If value could not be converted to a byte array.<a name="line.954"></a>
-<span class="sourceLineNo">955</span> */<a name="line.955"></a>
-<span class="sourceLineNo">956</span> public byte[] getBytes(String key) throws ParseException {<a name="line.956"></a>
-<span class="sourceLineNo">957</span> String s = get(key);<a name="line.957"></a>
-<span class="sourceLineNo">958</span> if (s == null)<a name="line.958"></a>
-<span class="sourceLineNo">959</span> return null;<a name="line.959"></a>
-<span class="sourceLineNo">960</span> if (s.isEmpty())<a name="line.960"></a>
-<span class="sourceLineNo">961</span> return new byte[0];<a name="line.961"></a>
-<span class="sourceLineNo">962</span> return getObject(key, byte[].class);<a name="line.962"></a>
-<span class="sourceLineNo">963</span> }<a name="line.963"></a>
-<span class="sourceLineNo">964</span><a name="line.964"></a>
-<span class="sourceLineNo">965</span> /**<a name="line.965"></a>
-<span class="sourceLineNo">966</span> * Same as {@link #getBytes(String)} but with a default value if the entry doesn't exist.<a name="line.966"></a>
-<span class="sourceLineNo">967</span> *<a name="line.967"></a>
-<span class="sourceLineNo">968</span> * @param key The key.<a name="line.968"></a>
-<span class="sourceLineNo">969</span> * @param def The default value if the value does not exist.<a name="line.969"></a>
-<span class="sourceLineNo">970</span> * @return The value, or the default value if the section or key does not exist.<a name="line.970"></a>
-<span class="sourceLineNo">971</span> * @throws ParseException If value could not be converted to a byte array.<a name="line.971"></a>
-<span class="sourceLineNo">972</span> */<a name="line.972"></a>
-<span class="sourceLineNo">973</span> public byte[] getBytes(String key, byte[] def) throws ParseException {<a name="line.973"></a>
-<span class="sourceLineNo">974</span> String s = get(key);<a name="line.974"></a>
-<span class="sourceLineNo">975</span> if (s == null)<a name="line.975"></a>
-<span class="sourceLineNo">976</span> return def;<a name="line.976"></a>
-<span class="sourceLineNo">977</span> if (s.isEmpty())<a name="line.977"></a>
-<span class="sourceLineNo">978</span> return def;<a name="line.978"></a>
-<span class="sourceLineNo">979</span> return getObjectWithDefault(key, def, byte[].class);<a name="line.979"></a>
-<span class="sourceLineNo">980</span> }<a name="line.980"></a>
-<span class="sourceLineNo">981</span><a name="line.981"></a>
-<span class="sourceLineNo">982</span> /**<a name="line.982"></a>
-<span class="sourceLineNo">983</span> * Gets the entry with the specified key and converts it to the specified value.<a name="line.983"></a>
-<span class="sourceLineNo">984</span> *<a name="line.984"></a>
-<span class="sourceLineNo">985</span> * <p><a name="line.985"></a>
-<span class="sourceLineNo">986</span> * The key can be in one of the following formats...<a name="line.986"></a>
-<span class="sourceLineNo">987</span> * <ul class='spaced-list'><a name="line.987"></a>
-<span class="sourceLineNo">988</span> * <li><a name="line.988"></a>
-<span class="sourceLineNo">989</span> * <js>"key"</js> - A value in the default section (i.e. defined above any <code>[section]</code> header).<a name="line.989"></a>
-<span class="sourceLineNo">990</span> * <li><a name="line.990"></a>
-<span class="sourceLineNo">991</span> * <js>"section/key"</js> - A value from the specified section.<a name="line.991"></a>
-<span class="sourceLineNo">992</span> * </ul><a name="line.992"></a>
-<span class="sourceLineNo">993</span> *<a name="line.993"></a>
-<span class="sourceLineNo">994</span> * <p><a name="line.994"></a>
-<span class="sourceLineNo">995</span> * The type can be a simple type (e.g. beans, strings, numbers) or parameterized type (collections/maps).<a name="line.995"></a>
-<span class="sourceLineNo">996</span> *<a name="line.996"></a>
-<span class="sourceLineNo">997</span> * <h5 class='section'>Examples:</h5><a name="line.997"></a>
-<span class="sourceLineNo">998</span> * <p class='bcode w800'><a name="line.998"></a>
-<span class="sourceLineNo">999</span> * Config cf = Config.<jsm>create</jsm>().name(<js>"MyConfig.cfg"</js>).build();<a name="line.999"></a>
-<span class="sourceLineNo">1000</span> *<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span> * <jc>// Parse into a linked-list of strings.</jc><a name="line.1001"></a>
-<span class="sourceLineNo">1002</span> * List l = cf.getObject(<js>"MySection/myListOfStrings"</js>, LinkedList.<jk>class</jk>, String.<jk>class</jk>);<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span> *<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span> * <jc>// Parse into a linked-list of beans.</jc><a name="line.1004"></a>
-<span class="sourceLineNo">1005</span> * List l = cf.getObject(<js>"MySection/myListOfBeans"</js>, LinkedList.<jk>class</jk>, MyBean.<jk>class</jk>);<a name="line.1005"></a>
+<span class="sourceLineNo">950</span> * <p><a name="line.950"></a>
+<span class="sourceLineNo">951</span> * This is equivalent to calling the following:<a name="line.951"></a>
+<span class="sourceLineNo">952</span> * <p class='bcode w800'><a name="line.952"></a>
+<span class="sourceLineNo">953</span> * <jk>byte</jk>[] b = config.getObject(key, <jk>byte</jk>[].<jk>class</jk>);<a name="line.953"></a>
+<span class="sourceLineNo">954</span> * </p><a name="line.954"></a>
+<span class="sourceLineNo">955</span> *<a name="line.955"></a>
+<span class="sourceLineNo">956</span> * Byte arrays are stored as encoded strings, typically BASE64, but dependent on the {@link #CONFIG_binaryFormat} setting.<a name="line.956"></a>
+<span class="sourceLineNo">957</span> *<a name="line.957"></a>
+<span class="sourceLineNo">958</span> * @param key The key.<a name="line.958"></a>
+<span class="sourceLineNo">959</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.959"></a>
+<span class="sourceLineNo">960</span> * @throws ParseException If value could not be converted to a byte array.<a name="line.960"></a>
+<span class="sourceLineNo">961</span> */<a name="line.961"></a>
+<span class="sourceLineNo">962</span> public byte[] getBytes(String key) throws ParseException {<a name="line.962"></a>
+<span class="sourceLineNo">963</span> String s = get(key);<a name="line.963"></a>
+<span class="sourceLineNo">964</span> if (s == null)<a name="line.964"></a>
+<span class="sourceLineNo">965</span> return null;<a name="line.965"></a>
+<span class="sourceLineNo">966</span> if (s.isEmpty())<a name="line.966"></a>
+<span class="sourceLineNo">967</span> return new byte[0];<a name="line.967"></a>
+<span class="sourceLineNo">968</span> return getObject(key, byte[].class);<a name="line.968"></a>
+<span class="sourceLineNo">969</span> }<a name="line.969"></a>
+<span class="sourceLineNo">970</span><a name="line.970"></a>
+<span class="sourceLineNo">971</span> /**<a name="line.971"></a>
+<span class="sourceLineNo">972</span> * Same as {@link #getBytes(String)} but with a default value if the entry doesn't exist.<a name="line.972"></a>
+<span class="sourceLineNo">973</span> *<a name="line.973"></a>
+<span class="sourceLineNo">974</span> * @param key The key.<a name="line.974"></a>
+<span class="sourceLineNo">975</span> * @param def The default value if the value does not exist.<a name="line.975"></a>
+<span class="sourceLineNo">976</span> * @return The value, or the default value if the section or key does not exist.<a name="line.976"></a>
+<span class="sourceLineNo">977</span> * @throws ParseException If value could not be converted to a byte array.<a name="line.977"></a>
+<span class="sourceLineNo">978</span> */<a name="line.978"></a>
+<span class="sourceLineNo">979</span> public byte[] getBytes(String key, byte[] def) throws ParseException {<a name="line.979"></a>
+<span class="sourceLineNo">980</span> String s = get(key);<a name="line.980"></a>
+<span class="sourceLineNo">981</span> if (s == null)<a name="line.981"></a>
+<span class="sourceLineNo">982</span> return def;<a name="line.982"></a>
+<span class="sourceLineNo">983</span> if (s.isEmpty())<a name="line.983"></a>
+<span class="sourceLineNo">984</span> return def;<a name="line.984"></a>
+<span class="sourceLineNo">985</span> return getObjectWithDefault(key, def, byte[].class);<a name="line.985"></a>
+<span class="sourceLineNo">986</span> }<a name="line.986"></a>
+<span class="sourceLineNo">987</span><a name="line.987"></a>
+<span class="sourceLineNo">988</span> /**<a name="line.988"></a>
+<span class="sourceLineNo">989</span> * Gets the entry with the specified key and converts it to the specified value.<a name="line.989"></a>
+<span class="sourceLineNo">990</span> *<a name="line.990"></a>
+<span class="sourceLineNo">991</span> * <p><a name="line.991"></a>
+<span class="sourceLineNo">992</span> * The key can be in one of the following formats...<a name="line.992"></a>
+<span class="sourceLineNo">993</span> * <ul class='spaced-list'><a name="line.993"></a>
+<span class="sourceLineNo">994</span> * <li><a name="line.994"></a>
+<span class="sourceLineNo">995</span> * <js>"key"</js> - A value in the default section (i.e. defined above any <code>[section]</code> header).<a name="line.995"></a>
+<span class="sourceLineNo">996</span> * <li><a name="line.996"></a>
+<span class="sourceLineNo">997</span> * <js>"section/key"</js> - A value from the specified section.<a name="line.997"></a>
+<span class="sourceLineNo">998</span> * </ul><a name="line.998"></a>
+<span class="sourceLineNo">999</span> *<a name="line.999"></a>
+<span class="sourceLineNo">1000</span> * <p><a name="line.1000"></a>
+<span class="sourceLineNo">1001</span> * The type can be a simple type (e.g. beans, strings, numbers) or parameterized type (collections/maps).<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span> *<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span> * <h5 class='section'>Examples:</h5><a name="line.1003"></a>
+<span class="sourceLineNo">1004</span> * <p class='bcode w800'><a name="line.1004"></a>
+<span class="sourceLineNo">1005</span> * Config cf = Config.<jsm>create</jsm>().name(<js>"MyConfig.cfg"</js>).build();<a name="line.1005"></a>
<span class="sourceLineNo">1006</span> *<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span> * <jc>// Parse into a linked-list of linked-lists of strings.</jc><a name="line.1007"></a>
-<span class="sourceLineNo">1008</span> * List l = cf.getObject(<js>"MySection/my2dListOfStrings"</js>, LinkedList.<jk>class</jk>,<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span> * LinkedList.<jk>class</jk>, String.<jk>class</jk>);<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span> *<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span> * <jc>// Parse into a map of string keys/values.</jc><a name="line.1011"></a>
-<span class="sourceLineNo">1012</span> * Map m = cf.getObject(<js>"MySection/myMap"</js>, TreeMap.<jk>class</jk>, String.<jk>class</jk>,<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span> * String.<jk>class</jk>);<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span> *<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span> * <jc>// Parse into a map containing string keys and values of lists containing beans.</jc><a name="line.1015"></a>
-<span class="sourceLineNo">1016</span> * Map m = cf.getObject(<js>"MySection/myMapOfListsOfBeans"</js>, TreeMap.<jk>class</jk>, String.<jk>class</jk>,<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span> * List.<jk>class</jk>, MyBean.<jk>class</jk>);<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span> * </p><a name="line.1018"></a>
-<span class="sourceLineNo">1019</span> *<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span> * <p><a name="line.1020"></a>
-<span class="sourceLineNo">1021</span> * <code>Collection</code> classes are assumed to be followed by zero or one objects indicating the element type.<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span> *<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span> * <p><a name="line.1023"></a>
-<span class="sourceLineNo">1024</span> * <code>Map</code> classes are assumed to be followed by zero or two meta objects indicating the key and value<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span> * types.<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span> *<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span> * <p><a name="line.1027"></a>
-<span class="sourceLineNo">1028</span> * The array can be arbitrarily long to indicate arbitrarily complex data structures.<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span> *<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span> * <h5 class='section'>Notes:</h5><a name="line.1030"></a>
-<span class="sourceLineNo">1031</span> * <ul class='spaced-list'><a name="line.1031"></a>
-<span class="sourceLineNo">1032</span> * <li><a name="line.1032"></a>
-<span class="sourceLineNo">1033</span> * Use the {@link #getObject(String, Class)} method instead if you don't need a parameterized map/collection.<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span> * </ul><a name="line.1034"></a>
+<span class="sourceLineNo">1007</span> * <jc>// Parse into a linked-list of strings.</jc><a name="line.1007"></a>
+<span class="sourceLineNo">1008</span> * List l = cf.getObject(<js>"MySection/myListOfStrings"</js>, LinkedList.<jk>class</jk>, String.<jk>class</jk>);<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span> *<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span> * <jc>// Parse into a linked-list of beans.</jc><a name="line.1010"></a>
+<span class="sourceLineNo">1011</span> * List l = cf.getObject(<js>"MySection/myListOfBeans"</js>, LinkedList.<jk>class</jk>, MyBean.<jk>class</jk>);<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span> *<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span> * <jc>// Parse into a linked-list of linked-lists of strings.</jc><a name="line.1013"></a>
+<span class="sourceLineNo">1014</span> * List l = cf.getObject(<js>"MySection/my2dListOfStrings"</js>, LinkedList.<jk>class</jk>,<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span> * LinkedList.<jk>class</jk>, String.<jk>class</jk>);<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span> *<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span> * <jc>// Parse into a map of string keys/values.</jc><a name="line.1017"></a>
+<span class="sourceLineNo">1018</span> * Map m = cf.getObject(<js>"MySection/myMap"</js>, TreeMap.<jk>class</jk>, String.<jk>class</jk>,<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span> * String.<jk>class</jk>);<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span> *<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span> * <jc>// Parse into a map containing string keys and values of lists containing beans.</jc><a name="line.1021"></a>
+<span class="sourceLineNo">1022</span> * Map m = cf.getObject(<js>"MySection/myMapOfListsOfBeans"</js>, TreeMap.<jk>class</jk>, String.<jk>class</jk>,<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span> * List.<jk>class</jk>, MyBean.<jk>class</jk>);<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span> * </p><a name="line.1024"></a>
+<span class="sourceLineNo">1025</span> *<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span> * <p><a name="line.1026"></a>
+<span class="sourceLineNo">1027</span> * <code>Collection</code> classes are assumed to be followed by zero or one objects indicating the element type.<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span> *<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span> * <p><a name="line.1029"></a>
+<span class="sourceLineNo">1030</span> * <code>Map</code> classes are assumed to be followed by zero or two meta objects indicating the key and value<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span> * types.<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span> *<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span> * <p><a name="line.1033"></a>
+<span class="sourceLineNo">1034</span> * The array can be arbitrarily long to indicate arbitrarily complex data structures.<a name="line.1034"></a>
<span class="sourceLineNo">1035</span> *<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span> * @param key The key.<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span> * @param type<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span> * The object type to create.<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span> * <br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span> * @param args<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span> * The type arguments of the class if it's a collection or map.<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span> * <br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span> * <br>Ignored if the main type is not a map or collection.<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span> * @throws ParseException If parser could not parse the value or if a parser is not registered with this config file.<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span> */<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span> public <T> T getObject(String key, Type type, Type...args) throws ParseException {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span> return getObject(key, (Parser)null, type, args);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span> }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span><a name="line.1050"></a>
-<span class="sourceLineNo">1051</span> /**<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span> * Same as {@link #getObject(String, Type, Type...)} but allows you to specify the parser to use to parse the value.<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span> *<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span> * @param key The key.<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span> * @param parser<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span> * The parser to use for parsing the object.<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span> * If <jk>null</jk>, then uses the predefined parser on the config file.<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span> * @param type<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span> * The object type to create.<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span> * <br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span> * @param args<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span> * The type arguments of the class if it's a collection or map.<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span> * <br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span> * <br>Ignored if the main type is not a map or collection.<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span> * @throws ParseException If parser could not parse the value or if a parser is not registered with this config file.<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span> */<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span> public <T> T getObject(String key, Parser parser, Type type, Type...args) throws ParseException {<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span> assertFieldNotNull(type, "type");<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span> return parse(getString(key), parser, type, args);<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span> }<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span><a name="line.1072"></a>
-<span class="sourceLineNo">1073</span> /**<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span> * Same as {@link #getObject(String, Type, Type...)} except optimized for a non-parameterized class.<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span> *<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span> * <p><a name="line.1076"></a>
-<span class="sourceLineNo">1077</span> * This is the preferred parse method for simple types since you don't need to cast the results.<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span> *<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span> * <h5 class='section'>Examples:</h5><a name="line.1079"></a>
-<span class="sourceLineNo">1080</span> * <p class='bcode w800'><a name="line.1080"></a>
-<span class="sourceLineNo">1081</span> * Config cf = Config.<jsm>create</jsm>().name(<js>"MyConfig.cfg"</js>).build();<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span> *<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span> * <jc>// Parse into a string.</jc><a name="line.1083"></a>
-<span class="sourceLineNo">1084</span> * String s = cf.getObject(<js>"MySection/mySimpleString"</js>, String.<jk>class</jk>);<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span> *<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span> * <jc>// Parse into a bean.</jc><a name="line.1086"></a>
-<span class="sourceLineNo">1087</span> * MyBean b = cf.getObject(<js>"MySection/myBean"</js>, MyBean.<jk>class</jk>);<a name="line.1087"></a>
+<span class="sourceLineNo">1036</span> * <h5 class='section'>Notes:</h5><a name="line.1036"></a>
+<span class="sourceLineNo">1037</span> * <ul class='spaced-list'><a name="line.1037"></a>
+<span class="sourceLineNo">1038</span> * <li><a name="line.1038"></a>
+<span class="sourceLineNo">1039</span> * Use the {@link #getObject(String, Class)} method instead if you don't need a parameterized map/collection.<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span> * </ul><a name="line.1040"></a>
+<span class="sourceLineNo">1041</span> *<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span> * @param key The key.<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span> * @param type<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span> * The object type to create.<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span> * <br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span> * @param args<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span> * The type arguments of the class if it's a collection or map.<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span> * <br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span> * <br>Ignored if the main type is not a map or collection.<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span> * @throws ParseException If parser could not parse the value or if a parser is not registered with this config file.<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span> */<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span> public <T> T getObject(String key, Type type, Type...args) throws ParseException {<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span> return getObject(key, (Parser)null, type, args);<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span> }<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span><a name="line.1056"></a>
+<span class="sourceLineNo">1057</span> /**<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span> * Same as {@link #getObject(String, Type, Type...)} but allows you to specify the parser to use to parse the value.<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span> *<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span> * @param key The key.<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span> * @param parser<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span> * The parser to use for parsing the object.<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span> * If <jk>null</jk>, then uses the predefined parser on the config file.<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span> * @param type<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span> * The object type to create.<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span> * <br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span> * @param args<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span> * The type arguments of the class if it's a collection or map.<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span> * <br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span> * <br>Ignored if the main type is not a map or collection.<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span> * @throws ParseException If parser could not parse the value or if a parser is not registered with this config file.<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span> */<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span> public <T> T getObject(String key, Parser parser, Type type, Type...args) throws ParseException {<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span> assertFieldNotNull(type, "type");<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span> return parse(getString(key), parser, type, args);<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span> }<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span><a name="line.1078"></a>
+<span class="sourceLineNo">1079</span> /**<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span> * Same as {@link #getObject(String, Type, Type...)} except optimized for a non-parameterized class.<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span> *<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span> * <p><a name="line.1082"></a>
+<span class="sourceLineNo">1083</span> * This is the preferred parse method for simple types since you don't need to cast the results.<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span> *<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span> * <h5 class='section'>Examples:</h5><a name="line.1085"></a>
+<span class="sourceLineNo">1086</span> * <p class='bcode w800'><a name="line.1086"></a>
+<span class="sourceLineNo">1087</span> * Config cf = Config.<jsm>create</jsm>().name(<js>"MyConfig.cfg"</js>).build();<a name="line.1087"></a>
<span class="sourceLineNo">1088</span> *<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span> * <jc>// Parse into a bean array.</jc><a name="line.1089"></a>
-<span class="sourceLineNo">1090</span> * MyBean[] b = cf.getObject(<js>"MySection/myBeanArray"</js>, MyBean[].<jk>class</jk>);<a name="line.1090"></a>
+<span class="sourceLineNo">1089</span> * <jc>// Parse into a string.</jc><a name="line.1089"></a>
+<span class="sourceLineNo">1090</span> * String s = cf.getObject(<js>"MySection/mySimpleString"</js>, String.<jk>class</jk>);<a name="line.1090"></a>
<span class="sourceLineNo">1091</span> *<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span> * <jc>// Parse into a linked-list of objects.</jc><a name="line.1092"></a>
-<span class="sourceLineNo">1093</span> * List l = cf.getObject(<js>"MySection/myList"</js>, LinkedList.<jk>class</jk>);<a name="line.1093"></a>
+<span class="sourceLineNo">1092</span> * <jc>// Parse into a bean.</jc><a name="line.1092"></a>
+<span class="sourceLineNo">1093</span> * MyBean b = cf.getObject(<js>"MySection/myBean"</js>, MyBean.<jk>class</jk>);<a name="line.1093"></a>
<span class="sourceLineNo">1094</span> *<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span> * <jc>// Parse into a map of object keys/values.</jc><a name="line.1095"></a>
-<span class="sourceLineNo">1096</span> * Map m = cf.getObject(<js>"MySection/myMap"</js>, TreeMap.<jk>class</jk>);<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span> * </p><a name="line.1097"></a>
-<span class="sourceLineNo">1098</span> *<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span> * @param <T> The class type of the object being created.<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span> * @param key The key.<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span> * @param type The object type to create.<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span> * @return The parsed object.<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span> * @throws ParseException<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span> * If the input contains a syntax error or is malformed, or is not valid for the specified type.<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span> * @see BeanSession#getClassMeta(Type,Type...) for argument syntax for maps and collections.<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span> */<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span> public <T> T getObject(String key, Class<T> type) throws ParseException {<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span> return getObject(key, (Parser)null, type);<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span> }<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span><a name="line.1110"></a>
-<span class="sourceLineNo">1111</span> /**<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span> * Same as {@link #getObject(String, Class)} but allows you to specify the parser to use to parse the value.<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span> *<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span> * @param <T> The class type of the object being created.<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span> * @param key The key.<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span> * @param parser<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span> * The parser to use for parsing the object.<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span> * If <jk>null</jk>, then uses the predefined parser on the config file.<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span> * @param type The object type to create.<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span> * @return The parsed object.<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span> * @throws ParseException<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span> * If the input contains a syntax error or is malformed, or is not valid for the specified type.<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span> * @see BeanSession#getClassMeta(Type,Type...) for argument syntax for maps and collections.<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span> */<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span> public <T> T getObject(String key, Parser parser, Class<T> type) throws ParseException {<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span> assertFieldNotNull(type, "c");<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span> return parse(getString(key), parser, type);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span> }<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span><a name="line.1129"></a>
-<span class="sourceLineNo">1130</span> /**<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span> * Gets the entry with the specified key and converts it to the specified value.<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span> *<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span> * <p><a name="line.1133"></a>
-<span class="sourceLineNo">1134</span> * Same as {@link #getObject(String, Class)}, but with a default value.<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span> *<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span> * @param key The key.<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span> * @param def The default value if the value does not exist.<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span> * @param type The class to convert the value to.<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span> * @throws ParseException If parser could not parse the value or if a parser is not registered with this config file.<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span> */<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span> public <T> T getObjectWithDefault(String key, T def, Class<T> type) throws ParseException {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span> return getObjectWithDefault(key, null, def, type);<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span> }<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span><a name="line.1145"></a>
-<span class="sourceLineNo">1146</span> /**<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span> * Same as {@link #getObjectWithDefault(String, Object, Class)} but allows you to specify the parser to use to parse<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span> * the value.<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span> *<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span> * @param key The key.<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span> * @param parser<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span> * The parser to use for parsing the object.<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span> * If <jk>null</jk>, then uses the predefined parser on the config file.<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span> * @param def The default value if the value does not exist.<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span> * @param type The class to convert the value to.<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span> * @throws ParseException If parser could not parse the value or if a parser is not registered with this config file.<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span> */<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span> public <T> T getObjectWithDefault(String key, Parser parser, T def, Class<T> type) throws ParseException {<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span> assertFieldNotNull(type, "c");<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span> T t = parse(getString(key), parser, type);<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span> return (t == null ? def : t);<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span> }<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span><a name="line.1164"></a>
-<span class="sourceLineNo">1165</span> /**<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span> * Gets the entry with the specified key and converts it to the specified value.<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span> *<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span> * <p><a name="line.1168"></a>
-<span class="sourceLineNo">1169</span> * Same as {@link #getObject(String, Type, Type...)}, but with a default value.<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span> *<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span> * @param key The key.<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span> * @param def The default value if the value does not exist.<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span> * @param type<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span> * The object type to create.<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span> * <br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span> * @param args<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span> * The type arguments of the class if it's a collection or map.<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span> * <br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span> * <br>Ignored if the main type is not a map or collection.<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span> * @throws ParseException If parser could not parse the value or if a parser is not registered with this config file.<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span> */<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span> public <T> T getObjectWithDefault(String key, T def, Type type, Type...args) throws ParseException {<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span> return getObjectWithDefault(key, null, def, type, args);<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span> }<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span><a name="line.1186"></a>
-<span class="sourceLineNo">1187</span> /**<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span> * Same as {@link #getObjectWithDefault(String, Object, Type, Type...)} but allows you to specify the parser to use<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span> * to parse the value.<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span> *<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span> * @param key The key.<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span> * @param parser<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span> * The parser to use for parsing the object.<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span> * If <jk>null</jk>, then uses the predefined parser on the config file.<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span> * @param def The default value if the value does not exist.<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span> * @param type<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span> * The object type to create.<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span> * <br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span> * @param args<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span> * The type arguments of the class if it's a collection or map.<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span> * <br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span> * <br>Ignored if the main type is not a map or collection.<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span> * @throws ParseException If parser could not parse the value or if a parser is not registered with this config file.<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span> */<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span> public <T> T getObjectWithDefault(String key, Parser parser, T def, Type type, Type...args) throws ParseException {<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span> assertFieldNotNull(type, "type");<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span> T t = parse(getString(key), parser, type, args);<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span> return (t == null ? def : t);<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span> }<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span><a name="line.1211"></a>
-<span class="sourceLineNo">1212</span> /**<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span> * Convenience method for returning a config entry as an {@link ObjectMap}.<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span> *<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span> * @param key The key.<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span> * @throws ParseException<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span> */<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span> public ObjectMap getObjectMap(String key) throws ParseException {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span> return getObject(key, ObjectMap.class);<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span> }<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span><a name="line.1222"></a>
-<span class="sourceLineNo">1223</span> /**<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span> * Convenience method for returning a config entry as an {@link ObjectMap}.<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span> *<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span> * @param key The key.<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span> * @param def The default value.<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span> * @return The value, or the default value if the section or key does not exist.<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span> * @throws ParseException<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span> */<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span> public ObjectMap getObjectMap(String key, ObjectMap def) throws ParseException {<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span> return getObjectWithDefault(key, def, ObjectMap.class);<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span> }<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span><a name="line.1234"></a>
-<span class="sourceLineNo">1235</span> /**<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span> * Convenience method for returning a config entry as an {@link ObjectList}.<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span> *<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span> * @param key The key.<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span> * @throws ParseException<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span> */<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span> public ObjectList getObjectList(String key) throws ParseException {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span> return getObject(key, ObjectList.class);<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span> }<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span><a name="line.1245"></a>
-<span class="sourceLineNo">1246</span> /**<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span> * Convenience method for returning a config entry as an {@link ObjectList}.<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span> *<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span> * @param key The key.<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span> * @param def The default value.<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span> * @return The value, or the default value if the section or key does not exist.<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span> * @throws ParseException<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span> */<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span> public ObjectList getObjectList(String key, ObjectList def) throws ParseException {<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span> return getObjectWithDefault(key, def, ObjectList.class);<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span> }<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span><a name="line.1257"></a>
-<span class="sourceLineNo">1258</span> /**<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span> * Returns the keys of the entries in the specified section.<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span> *<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span> * @param section<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span> * The section name to write from.<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span> * <br>If empty, refers to the default section.<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span> * <br>Must not be <jk>null</jk>.<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span> * @return<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span> * An unmodifiable set of keys, or an empty set if the section doesn't exist.<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span> */<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span> public Set<String> getKeys(String section) {<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span> return configMap.getKeys(section(section));<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span> }<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span><a name="line.1271"></a>
-<span class="sourceLineNo">1272</span> /**<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span> * Copies the entries in a section to the specified bean by calling the public setters on that bean.<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span> *<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span> * @param section<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span> * The section name to write from.<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span> * <br>If empty, refers to the default section.<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span> * <br>Must not be <jk>null</jk>.<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span> * @param bean The bean to set the properties on.<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span> * @param ignoreUnknownProperties<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span> * If <jk>true</jk>, don't throw an {@link IllegalArgumentException} if this section contains a key that doesn't<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span> * correspond to a setter method.<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span> * @return An object map of the changes made to the bean.<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span> * @throws ParseException If parser was not set on this config file or invalid properties were found in the section.<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span> * @throws IllegalArgumentException<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span> * @throws IllegalAccessException<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span> * @throws InvocationTargetException<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span> */<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span> public Config writeProperties(String section, Object bean, boolean ignoreUnknownProperties) throws ParseException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span> checkWrite();<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span> assertFieldNotNull(bean, "bean");<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span> section = section(section);<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span><a name="line.1294"></a>
-<span class="sourceLineNo">1295</span> Set<String> keys = configMap.getKeys(section);<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span> if (keys == null)<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span> throw new IllegalArgumentException("Section '"+section+"' not found in configuration.");<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span><a name="line.1298"></a>
-<span class="sourceLineNo">1299</span> BeanMap<?> bm = beanSession.toBeanMap(bean);<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span> for (String k : keys) {<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span> BeanPropertyMeta bpm = bm.getPropertyMeta(k);<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span> if (bpm == null) {<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span> if (! ignoreUnknownProperties)<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span> throw new ParseException("Unknown property ''{0}'' encountered in configuration section ''{1}''.", k, section);<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span> } else {<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span> bm.put(k, getObject(section + '/' + k, bpm.getClassMeta().getInnerClass()));<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span> }<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span> }<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span><a name="line.1309"></a>
-<span class="sourceLineNo">1310</span> return this;<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span> }<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span><a name="line.1312"></a>
-<span class="sourceLineNo">1313</span> /**<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span> * Shortcut for calling <code>getSectionAsBean(sectionName, c, <jk>false</jk>)</code>.<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span> *<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span> * @param section<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span> * The section name to write from.<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span> * <br>If empty, refers to the default section.<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span> * <br>Must not be <jk>null</jk>.<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span> * @param c The bean class to create.<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span> * @return A new bean instance.<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span> * @throws ParseException<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span> */<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span> public <T> T getSectionAsBean(String section, Class<T>c) throws ParseException {<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span> return getSectionAsBean(section, c, false);<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span> }<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span><a name="line.1327"></a>
-<span class="sourceLineNo">1328</span> /**<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span> * Converts this config file section to the specified bean instance.<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span> *<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span> * <p><a name="line.1331"></a>
-<span class="sourceLineNo">1332</span> * Key/value pairs in the config file section get copied as bean property values to the specified bean class.<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span> *<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span> * <h5 class='figure'>Example config file</h5><a name="line.1334"></a>
-<span class="sourceLineNo">1335</span> * <p class='bcode w800'><a name="line.1335"></a>
-<span class="sourceLineNo">1336</span> * <cs>[MyAddress]</cs><a name="line.1336"></a>
-<span class="sourceLineNo">1337</span> * <ck>name</ck> = <cv>John Smith</cv><a name="line.1337"></a>
-<span class="sourceLineNo">1338</span> * <ck>street</ck> = <cv>123 Main Street</cv><a name="line.1338"></a>
-<span class="sourceLineNo">1339</span> * <ck>city</ck> = <cv>Anywhere</cv><a name="line.1339"></a>
-<span class="sourceLineNo">1340</span> * <ck>state</ck> = <cv>NY</cv><a name="line.1340"></a>
-<span class="sourceLineNo">1341</span> * <ck>zip</ck> = <cv>12345</cv><a name="line.1341"></a>
-<span class="sourceLineNo">1342</span> * </p><a name="line.1342"></a>
-<span class="sourceLineNo">1343</span> *<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span> * <h5 class='figure'>Example bean</h5><a name="line.1344"></a>
-<span class="sourceLineNo">1345</span> * <p class='bcode w800'><a name="line.1345"></a>
-<span class="sourceLineNo">1346</span> * <jk>public class</jk> Address {<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span> * public String name, street, city;<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span> * public StateEnum state;<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span> * public int zip;<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span> * }<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span> * </p><a name="line.1351"></a>
-<span class="sourceLineNo">1352</span> *<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span> * <h5 class='figure'>Example usage</h5><a name="line.1353"></a>
-<span class="sourceLineNo">1354</span> * <p class='bcode w800'><a name="line.1354"></a>
-<span class="sourceLineNo">1355</span> * Config cf = Config.<jsm>create</jsm>().name(<js>"MyConfig.cfg"</js>).build();<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span> * Address myAddress = cf.getSectionAsBean(<js>"MySection"</js>, Address.<jk>class</jk>);<a name="line.1356"></a>
+<span class="sourceLineNo">1095</span> * <jc>// Parse into a bean array.</jc><a name="line.1095"></a>
+<span class="sourceLineNo">1096</span> * MyBean[] b = cf.getObject(<js>"MySection/myBeanArray"</js>, MyBean[].<jk>class</jk>);<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span> *<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span> * <jc>// Parse into a linked-list of objects.</jc><a name="line.1098"></a>
+<span class="sourceLineNo">1099</span> * List l = cf.getObject(<js>"MySection/myList"</js>, LinkedList.<jk>class</jk>);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span> *<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span> * <jc>// Parse into a map of object keys/values.</jc><a name="line.1101"></a>
+<span class="sourceLineNo">1102</span> * Map m = cf.getObject(<js>"MySection/myMap"</js>, TreeMap.<jk>class</jk>);<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span> * </p><a name="line.1103"></a>
+<span class="sourceLineNo">1104</span> *<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span> * @param <T> The class type of the object being created.<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span> * @param key The key.<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span> * @param type The object type to create.<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span> * @return The parsed object.<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span> * @throws ParseException<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span> * If the input contains a syntax error or is malformed, or is not valid for the specified type.<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span> * @see BeanSession#getClassMeta(Type,Type...) for argument syntax for maps and collections.<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span> */<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span> public <T> T getObject(String key, Class<T> type) throws ParseException {<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span> return getObject(key, (Parser)null, type);<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span> }<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span><a name="line.1116"></a>
+<span class="sourceLineNo">1117</span> /**<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span> * Same as {@link #getObject(String, Class)} but allows you to specify the parser to use to parse the value.<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span> *<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span> * @param <T> The class type of the object being created.<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span> * @param key The key.<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span> * @param parser<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span> * The parser to use for parsing the object.<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span> * If <jk>null</jk>, then uses the predefined parser on the config file.<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span> * @param type The object type to create.<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span> * @return The parsed object.<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span> * @throws ParseException<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span> * If the input contains a syntax error or is malformed, or is not valid for the specified type.<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span> * @see BeanSession#getClassMeta(Type,Type...) for argument syntax for maps and collections.<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span> */<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span> public <T> T getObject(String key, Parser parser, Class<T> type) throws ParseException {<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span> assertFieldNotNull(type, "c");<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span> return parse(getString(key), parser, type);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span> }<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span><a name="line.1135"></a>
+<span class="sourceLineNo">1136</span> /**<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span> * Gets the entry with the specified key and converts it to the specified value.<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span> *<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span> * <p><a name="line.1139"></a>
+<span class="sourceLineNo">1140</span> * Same as {@link #getObject(String, Class)}, but with a default value.<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span> *<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span> * @param key The key.<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span> * @param def The default value if the value does not exist.<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span> * @param type The class to convert the value to.<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span> * @throws ParseException If parser could not parse the value or if a parser is not registered with this config file.<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span> */<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span> public <T> T getObjectWithDefault(String key, T def, Class<T> type) throws ParseException {<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span> return getObjectWithDefault(key, null, def, type);<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span> }<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span><a name="line.1151"></a>
+<span class="sourceLineNo">1152</span> /**<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span> * Same as {@link #getObjectWithDefault(String, Object, Class)} but allows you to specify the parser to use to parse<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span> * the value.<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span> *<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span> * @param key The key.<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span> * @param parser<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span> * The parser to use for parsing the object.<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span> * If <jk>null</jk>, then uses the predefined parser on the config file.<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span> * @param def The default value if the value does not exist.<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span> * @param type The class to convert the value to.<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span> * @throws ParseException If parser could not parse the value or if a parser is not registered with this config file.<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span> */<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span> public <T> T getObjectWithDefault(String key, Parser parser, T def, Class<T> type) throws ParseException {<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span> assertFieldNotNull(type, "c");<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span> T t = parse(getString(key), parser, type);<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span> return (t == null ? def : t);<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span> }<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span><a name="line.1170"></a>
+<span class="sourceLineNo">1171</span> /**<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span> * Gets the entry with the specified key and converts it to the specified value.<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span> *<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span> * <p><a name="line.1174"></a>
+<span class="sourceLineNo">1175</span> * Same as {@link #getObject(String, Type, Type...)}, but with a default value.<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span> *<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span> * @param key The key.<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span> * @param def The default value if the value does not exist.<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span> * @param type<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span> * The object type to create.<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span> * <br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span> * @param args<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span> * The type arguments of the class if it's a collection or map.<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span> * <br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span> * <br>Ignored if the main type is not a map or collection.<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span> * @throws ParseException If parser could not parse the value or if a parser is not registered with this config file.<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span> */<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span> public <T> T getObjectWithDefault(String key, T def, Type type, Type...args) throws ParseException {<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span> return getObjectWithDefault(key, null, def, type, args);<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span> }<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span><a name="line.1192"></a>
+<span class="sourceLineNo">1193</span> /**<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span> * Same as {@link #getObjectWithDefault(String, Object, Type, Type...)} but allows you to specify the parser to use<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span> * to parse the value.<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span> *<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span> * @param key The key.<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span> * @param parser<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span> * The parser to use for parsing the object.<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span> * If <jk>null</jk>, then uses the predefined parser on the config file.<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span> * @param def The default value if the value does not exist.<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span> * @param type<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span> * The object type to create.<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span> * <br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span> * @param args<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span> * The type arguments of the class if it's a collection or map.<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span> * <br>Can be any of the following: {@link ClassMeta}, {@link Class}, {@link ParameterizedType}, {@link GenericArrayType}<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span> * <br>Ignored if the main type is not a map or collection.<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span> * @throws ParseException If parser could not parse the value or if a parser is not registered with this config file.<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span> */<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span> public <T> T getObjectWithDefault(String key, Parser parser, T def, Type type, Type...args) throws ParseException {<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span> assertFieldNotNull(type, "type");<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span> T t = parse(getString(key), parser, type, args);<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span> return (t == null ? def : t);<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span> }<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span><a name="line.1217"></a>
+<span class="sourceLineNo">1218</span> /**<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span> * Convenience method for returning a config entry as an {@link ObjectMap}.<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span> *<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span> * @param key The key.<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span> * @throws ParseException<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span> */<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span> public ObjectMap getObjectMap(String key) throws ParseException {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span> return getObject(key, ObjectMap.class);<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span> }<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span><a name="line.1228"></a>
+<span class="sourceLineNo">1229</span> /**<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span> * Convenience method for returning a config entry as an {@link ObjectMap}.<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span> *<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span> * @param key The key.<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span> * @param def The default value.<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span> * @return The value, or the default value if the section or key does not exist.<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span> * @throws ParseException<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span> */<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span> public ObjectMap getObjectMap(String key, ObjectMap def) throws ParseException {<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span> return getObjectWithDefault(key, def, ObjectMap.class);<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span> }<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span><a name="line.1240"></a>
+<span class="sourceLineNo">1241</span> /**<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span> * Convenience method for returning a config entry as an {@link ObjectList}.<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span> *<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span> * @param key The key.<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span> * @return The value, or <jk>null</jk> if the section or key does not exist.<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span> * @throws ParseException<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span> */<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span> public ObjectList getObjectList(String key) throws ParseException {<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span> return getObject(key, ObjectList.class);<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span> }<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span><a name="line.1251"></a>
+<span class="sourceLineNo">1252</span> /**<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span> * Convenience method for returning a config entry as an {@link ObjectList}.<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span> *<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span> * @param key The key.<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span> * @param def The default value.<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span> * @return The value, or the default value if the section or key does not exist.<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span> * @throws ParseException<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span> */<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span> public ObjectList getObjectList(String key, ObjectList def) throws ParseException {<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span> return getObjectWithDefault(key, def, ObjectList.class);<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span> }<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span><a name="line.1263"></a>
+<span class="sourceLineNo">1264</span> /**<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span> * Returns the keys of the entries in the specified section.<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span> *<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span> * @param section<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span> * The section name to write from.<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span> * <br>If empty, refers to the default section.<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span> * <br>Must not be <jk>null</jk>.<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span> * @return<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span> * An unmodifiable set of keys, or an empty set if the section doesn't exist.<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span> */<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span> public Set<String> getKeys(String section) {<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span> return configMap.getKeys(section(section));<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span> }<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span><a name="line.1277"></a>
+<span class="sourceLineNo">1278</span> /**<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span> * Copies the entries in a section to the specified bean by calling the public setters on that bean.<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span> *<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span> * @param section<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span> * The section name to write from.<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span> * <br>If empty, refers to the default section.<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span> * <br>Must not be <jk>null</jk>.<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span> * @param bean The bean to set the properties on.<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span> * @param ignoreUnknownProperties<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span> * If <jk>true</jk>, don't throw an {@link IllegalArgumentException} if this section contains a key that doesn't<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span> * correspond to a setter method.<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span> * @return An object map of the changes made to the bean.<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span> * @throws ParseException If parser was not set on this config file or invalid properties were found in the section.<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span> * @throws IllegalArgumentException<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span> * @throws IllegalAccessException<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span> * @throws InvocationTargetException<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span> */<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span> public Config writeProperties(String section, Object bean, boolean ignoreUnknownProperties) throws ParseException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span> checkWrite();<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span> assertFieldNotNull(bean, "bean");<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span> section = section(section);<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span><a name="line.1300"></a>
+<span class="sourceLineNo">1301</span> Set<String> keys = configMap.getKeys(section);<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span> if (keys == null)<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span> throw new IllegalArgumentException("Section '"+section+"' not found in configuration.");<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span><a name="line.1304"></a>
+<span class="sourceLineNo">1305</span> BeanMap<?> bm = beanSession.toBeanMap(bean);<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span> for (String k : keys) {<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span> BeanPropertyMeta bpm = bm.getPropertyMeta(k);<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span> if (bpm == null) {<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span> if (! ignoreUnknownProperties)<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span> throw new ParseException("Unknown property ''{0}'' encountered in configuration section ''{1}''.", k, section);<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span> } else {<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span> bm.put(k, getObject(section + '/' + k, bpm.getClassMeta().getInnerClass()));<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span> }<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span> }<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span><a name="line.1315"></a>
+<span class="sourceLineNo">1316</span> return this;<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span> }<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span><a name="line.1318"></a>
+<span class="sourceLineNo">1319</span> /**<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span> * Shortcut for calling <code>getSectionAsBean(sectionName, c, <jk>false</jk>)</code>.<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span> *<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span> * @param section<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span> * The section name to write from.<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span> * <br>If empty, refers to the default section.<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span> * <br>Must not be <jk>null</jk>.<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span> * @param c The bean class to create.<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span> * @return A new bean instance.<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span> * @throws ParseException<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span> */<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span> public <T> T getSectionAsBean(String section, Class<T>c) throws ParseException {<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span> return getSectionAsBean(section, c, false);<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span> }<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span><a name="line.1333"></a>
+<span class="sourceLineNo">1334</span> /**<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span> * Converts this config file section to the specified bean instance.<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span> *<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span> * <p><a name="line.1337"></a>
+<span class="sourceLineNo">1338</span> * Key/value pairs in the config file section get copied as bean property values to the specified bean class.<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span> *<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span> * <h5 class='figure'>Example config file</h5><a name="line.1340"></a>
+<span class="sourceLineNo">1341</span> * <p class='bcode w800'><a name="line.1341"></a>
+<span class="sourceLineNo">1342</span> * <cs>[MyAddress]</cs><a name="line.1342"></a>
+<span class="sourceLineNo">1343</span> * <ck>name</ck> = <cv>John Smith</cv><a name="line.1343"></a>
+<span class="sourceLineNo">1344</span> * <ck>street</ck> = <cv>123 Main Street</cv><a name="line.1344"></a>
+<span class="sourceLineNo">1345</span> * <ck>city</ck> = <cv>Anywhere</cv><a name="line.1345"></a>
+<span class="sourceLineNo">1346</span> * <ck>state</ck> = <cv>NY</cv><a name="line.1346"></a>
+<span class="sourceLineNo">1347</span> * <ck>zip</ck> = <cv>12345</cv><a name="line.1347"></a>
+<span class="sourceLineNo">1348</span> * </p><a name="line.1348"></a>
+<span class="sourceLineNo">1349</span> *<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span> * <h5 class='figure'>Example bean</h5><a name="line.1350"></a>
+<span class="sourceLineNo">1351</span> * <p class='bcode w800'><a name="line.1351"></a>
+<span class="sourceLineNo">1352</span> * <jk>public class</jk> Address {<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span> * public String name, street, city;<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span> * public StateEnum state;<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span> * public int zip;<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span> * }<a name="line.1356"></a>
<span class="sourceLineNo">1357</span> * </p><a name="line.1357"></a>
<span class="sourceLineNo">1358</span> *<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span> * @param section<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span> * The section name to write from.<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span> * <br>If empty, refers to the default section.<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span> * <br>Must not be <jk>null</jk>.<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span> * @param c The bean class to create.<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span> * @param ignoreUnknownProperties<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span> * If <jk>false</jk>, throws a {@link ParseException} if the section contains an entry that isn't a bean property<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span> * name.<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span> * @return A new bean instance, or <jk>null</jk> if the section doesn't exist.<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span> * @throws ParseException<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span> */<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span> public <T> T getSectionAsBean(String section, Class<T> c, boolean ignoreUnknownProperties) throws ParseException {<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span> assertFieldNotNull(c, "c");<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span> section = section(section);<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span><a name="line.1373"></a>
-<span class="sourceLineNo">1374</span> if (! configMap.hasSection(section))<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span> return null;<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span><a name="line.1376"></a>
-<span class="sourceLineNo">1377</span> Set<String> keys = configMap.getKeys(section);<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span><a name="line.1378"></a>
-<span class="sourceLineNo">1379</span> BeanMap<T> bm = beanSession.newBeanMap(c);<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span> for (String k : keys) {<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span> BeanPropertyMeta bpm = bm.getPropertyMeta(k);<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span> if (bpm == null) {<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span> if (! ignoreUnknownProperties)<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span> throw new ParseException("Unknown property ''{0}'' encountered in configuration section ''{1}''.", k, section);<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span> } else {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span> bm.put(k, getObject(section + '/' + k, bpm.getClassMeta().getInnerClass()));<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span> }<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span> }<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span><a name="line.1389"></a>
-<span class="sourceLineNo">1390</span> return bm.getBean();<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span> }<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span><a name="line.1392"></a>
-<span class="sourceLineNo">1393</span> /**<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span> * Returns a section of this config copied into an {@link ObjectMap}.<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span> *<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span> * @param section<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span> * The section name to write from.<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span> * <br>If empty, refers to the default section.<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span> * <br>Must not be <jk>null</jk>.<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span> * @return A new {@link ObjectMap}, or <jk>null</jk> if the section doesn't exist.<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span> * @throws ParseException<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span> */<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span> public ObjectMap getSectionAsMap(String section) throws ParseException {<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span> section = section(section);<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span><a name="line.1405"></a>
-<span class="sourceLineNo">1406</span> if (! configMap.hasSection(section))<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span> return null;<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span><a name="line.1408"></a>
-<span class="sourceLineNo">1409</span> Set<String> keys = configMap.getKeys(section);<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span><a name="line.1410"></a>
-<span class="sourceLineNo">1411</span> ObjectMap om = new ObjectMap();<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span> for (String k : keys)<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span> om.put(k, getObject(section + '/' + k, Object.class));<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span> return om;<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span> }<a name="line.1415"></a>
+<span class="sourceLineNo">1359</span> * <h5 class='figure'>Example usage</h5><a name="line.1359"></a>
+<span class="sourceLineNo">1360</span> * <p class='bcode w800'><a name="line.1360"></a>
+<span class="sourceLineNo">1361</span> * Config cf = Config.<jsm>create</jsm>().name(<js>"MyConfig.cfg"</js>).build();<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span> * Address myAddress = cf.getSectionAsBean(<js>"MySection"</js>, Address.<jk>class</jk>);<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span> * </p><a name="line.1363"></a>
+<span class="sourceLineNo">1364</span> *<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span> * @param section<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span> * The section name to write from.<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span> * <br>If empty, refers to the default section.<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span> * <br>Must not be <jk>null</jk>.<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span> * @param c The bean class to create.<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span> * @param ignoreUnknownProperties<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span> * If <jk>false</jk>, throws a {@link ParseException} if the section contains an entry that isn't a bean property<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span> * name.<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span> * @return A new bean instance, or <jk>null</jk> if the section doesn't exist.<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span> * @throws ParseException<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span> */<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span> public <T> T getSectionAsBean(String section, Class<T> c, boolean ignoreUnknownProperties) throws ParseException {<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span> assertFieldNotNull(c, "c");<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span> section = section(section);<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span><a name="line.1379"></a>
+<span class="sourceLineNo">1380</span> if (! configMap.hasSection(section))<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span> return null;<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span><a name="line.1382"></a>
+<span class="sourceLineNo">1383</span> Set<String> keys = configMap.getKeys(section);<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span><a name="line.1384"></a>
+<span class="sourceLineNo">1385</span> BeanMap<T> bm = beanSession.newBeanMap(c);<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span> for (String k : keys) {<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span> BeanPropertyMeta bpm = bm.getPropertyMeta(k);<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span> if (bpm == null) {<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span> if (! ignoreUnknownProperties)<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span> throw new ParseException("Unknown property ''{0}'' encountered in configuration section ''{1}''.", k, section);<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span> } else {<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span> bm.put(k, getObject(section + '/' + k, bpm.getClassMeta().getInnerClass()));<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span> }<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span> }<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span><a name="line.1395"></a>
+<span class="sourceLineNo">1396</span> return bm.getBean();<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span> }<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span><a name="line.1398"></a>
+<span class="sourceLineNo">1399</span> /**<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span> * Returns a section of this config copied into an {@link ObjectMap}.<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span> *<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span> * @param section<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span> * The section name to write from.<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span> * <br>If empty, refers to the default section.<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span> * <br>Must not be <jk>null</jk>.<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span> * @return A new {@link ObjectMap}, or <jk>null</jk> if the section doesn't exist.<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span> * @throws ParseException<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span> */<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span> public ObjectMap getSectionAsMap(String section) throws ParseException {<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span> section = section(section);<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span><a name="line.1411"></a>
+<span class="sourceLineNo">1412</span> if (! configMap.hasSection(section))<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span> return null;<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span><a name="line.1414"></a>
+<span class="sourceLineNo">1415</span> Set<String> keys = configMap.getKeys(section);<a name="line.1415"></a>
<span class="sourceLineNo">1416</span><a name="line.1416"></a>
-<span class="sourceLineNo">1417</span><a name="line.1417"></a>
-<span class="sourceLineNo">1418</span> /**<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span> * Wraps a config file section inside a Java interface so that values in the section can be read and<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span> * write using getters and setters.<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span> *<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span> * <h5 class='figure'>Example config file</h5><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span> * <p class='bcode w800'><a name="line.1423"></a>
-<span class="sourceLineNo">1424</span> * <cs>[MySection]</cs><a name="line.1424"></a>
-<span class="sourceLineNo">1425</span> * <ck>string</ck> = <cv>foo</cv><a name="line.1425"></a>
-<span class="sourceLineNo">1426</span> * <ck>int</ck> = <cv>123</cv><a name="line.1426"></a>
-<span class="sourceLineNo">1427</span> * <ck>enum</ck> = <cv>ONE</cv><a name="line.1427"></a>
-<span class="sourceLineNo">1428</span> * <ck>bean</ck> = <cv>{foo:'bar',baz:123}</cv><a name="line.1428"></a>
-<span class="sourceLineNo">1429</span> * <ck>int3dArray</ck> = <cv>[[[123,null],null],null]</cv><a name="line.1429"></a>
-<span class="sourceLineNo">1430</span> * <ck>bean1d3dListMap</ck> = <cv>{key:[[[[{foo:'bar',baz:123}]]]]}</cv><a name="line.1430"></a>
-<span class="sourceLineNo">1431</span> * </p><a name="line.1431"></a>
-<span class="sourceLineNo">1432</span> *<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span> * <h5 class='figure'>Example interface</h5><a name="line.1433"></a>
-<span class="sourceLineNo">1434</span> * <p class='bcode w800'><a name="line.1434"></a>
-<span class="sourceLineNo">1435</span> * <jk>public interface</jk> MyConfigInterface {<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span> *<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span> * String getString();<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span> * <jk>void</jk> setString(String x);<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span> *<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span> * <jk>int</jk> getInt();<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span> * <jk>void</jk> setInt(<jk>int</jk> x);<a name="line.1441"></a>
+<span class="sourceLineNo">1417</span> ObjectMap om = new ObjectMap();<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span> for (String k : keys)<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span> om.put(k, getObject(section + '/' + k, Object.class));<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span> return om;<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span> }<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span><a name="line.1422"></a>
+<span class="sourceLineNo">1423</span><a name="line.1423"></a>
+<span class="sourceLineNo">1424</span> /**<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span> * Wraps a config file section inside a Java interface so that values in the section can be read and<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span> * write using getters and setters.<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span> *<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span> * <h5 class='figure'>Example config file</h5><a name="line.1428"></a>
+<span class="sourceLineNo">1429</span> * <p class='bcode w800'><a name="line.1429"></a>
+<span class="sourceLineNo">1430</span> * <cs>[MySection]</cs><a name="line.1430"></a>
+<span class="sourceLineNo">1431</span> * <ck>string</ck> = <cv>foo</cv><a name="line.1431"></a>
+<span class="sourceLineNo">1432</span> * <ck>int</ck> = <cv>123</cv><a name="line.1432"></a>
+<span class="sourceLineNo">1433</span> * <ck>enum</ck> = <cv>ONE</cv><a name="line.1433"></a>
+<span class="sourceLineNo">1434</span> * <ck>bean</ck> = <cv>{foo:'bar',baz:123}</cv><a name="line.1434"></a>
+<span class="sourceLineNo">1435</span> * <ck>int3dArray</ck> = <cv>[[[123,null],null],null]</cv><a name="line.1435"></a>
+<span class="sourceLineNo">1436</span> * <ck>bean1d3dListMap</ck> = <cv>{key:[[[[{foo:'bar',baz:123}]]]]}</cv><a name="line.1436"></a>
+<span class="sourceLineNo">1437</span> * </p><a name="line.1437"></a>
+<span class="sourceLineNo">1438</span> *<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span> * <h5 class='figure'>Example interface</h5><a name="line.1439"></a>
+<span class="sourceLineNo">1440</span> * <p class='bcode w800'><a name="line.1440"></a>
+<span class="sourceLineNo">1441</span> * <jk>public interface</jk> MyConfigInterface {<a name="line.1441"></a>
<span class="sourceLineNo">1442</span> *<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span> * MyEnum getEnum();<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span> * <jk>void</jk> setEnum(MyEnum x);<a name="line.1444"></a>
+<span class="sourceLineNo">1443</span> * String getString();<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span> * <jk>void</jk> setString(String x);<a name="line.1444"></a>
<span class="sourceLineNo">1445</span> *<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span> * MyBean getBean();<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span> * <jk>void</jk> setBean(MyBean x);<a name="line.1447"></a>
+<span class="sourceLineNo">1446</span> * <jk>int</jk> getInt();<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span> * <jk>void</jk> setInt(<jk>int</jk> x);<a name="line.1447"></a>
<span class="sourceLineNo">1448</span> *<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span> * <jk>int</jk>[][][] getInt3dArray();<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span> * <jk>void</jk> setInt3dArray(<jk>int</jk>[][][] x);<a name="line.1450"></a>
+<span class="sourceLineNo">1449</span> * MyEnum getEnum();<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span> * <jk>void</jk> setEnum(MyEnum x);<a name="line.1450"></a>
<span class="sourceLineNo">1451</span> *<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span> * Map&lt;String,List&lt;MyBean[][][]&gt;&gt; getBean1d3dListMap();<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span> * <jk>void</jk> setBean1d3dListMap(Map&lt;String,List&lt;MyBean[][][]&gt;&gt; x);<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span> * }<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span> * </p><a name="line.1455"></a>
-<span class="sourceLineNo">1456</span> *<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span> * <h5 class='figure'>Example usage</h5><a name="line.1457"></a>
-<span class="sourceLineNo">1458</span> * <p class='bcode w800'><a name="line.1458"></a>
-<span class="sourceLineNo">1459</span> * Config cf = Config.<jsm>create</jsm>().name(<js>"MyConfig.cfg"</js>).build();<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span> *<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span> * MyConfigInterface ci = cf.getSectionAsInterface(<js>"MySection"</js>, MyConfigInterface.<jk>class</jk>);<a name="line.1461"></a>
+<span class="sourceLineNo">1452</span> * MyBean getBean();<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span> * <jk>void</jk> setBean(MyBean x);<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span> *<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span> * <jk>int</jk>[][][] getInt3dArray();<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span> * <jk>void</jk> setInt3dArray(<jk>int</jk>[][][] x);<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span> *<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span> * Map&lt;String,List&lt;MyBean[][][]&gt;&gt; getBean1d3dListMap();<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span> * <jk>void</jk> setBean1d3dListMap(Map&lt;String,List&lt;MyBean[][][]&gt;&gt; x);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span> * }<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span> * </p><a name="line.1461"></a>
<span class="sourceLineNo">1462</span> *<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span> * <jk>int</jk> myInt = ci.getInt();<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span> *<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span> * ci.setBean(<jk>new</jk> MyBean());<a name="line.1465"></a>
+<span class="sourceLineNo">1463</span> * <h5 class='figure'>Example usage</h5><a name="line.1463"></a>
+<span class="sourceLineNo">1464</span> * <p class='bcode w800'><a name="line.1464"></a>
+<span class="sourceLineNo">1465</span> * Config cf = Config.<jsm>create</jsm>().name(<js>"MyConfig.cfg"</js>).build();<a name="line.1465"></a>
<span class="sourceLineNo">1466</span> *<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span> * cf.save();<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span> * </p><a name="line.1468"></a>
-<span class="sourceLineNo">1469</span> *<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span> * <h5 class='section'>Notes</h5><a name="line.1470"></a>
-<span class="sourceLineNo">1471</span> * <ul class='spaced-list'><a name="line.1471"></a>
-<span class="sourceLineNo">1472</span> * <li>Calls to setters when the configuration is read-only will cause {@link UnsupportedOperationException} to be thrown.<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span> * </ul><a name="line.1473"></a>
-<span class="sourceLineNo">1474</span> *<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span> * @param section<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span> * The section name to write from.<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span> * <br>If empty, refers to the default section.<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span> * <br>Must not be <jk>null</jk>.<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span> * @param c The proxy interface class.<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span> * @return The proxy interface.<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span> */<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span> @SuppressWarnings("unchecked")<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span> public <T> T getSectionAsInterface(String section, final Class<T> c) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span> assertFieldNotNull(c, "c");<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span> final String section2 = section(section);<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span><a name="line.1486"></a>
-<span class="sourceLineNo">1487</span> if (! c.isInterface())<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span> throw new IllegalArgumentException("Class '"+c.getName()+"' passed to getSectionAsInterface() is not an interface.");<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span><a name="line.1489"></a>
-<span class="sourceLineNo">1490</span> InvocationHandler h = new InvocationHandler() {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span><a name="line.1491"></a>
-<span class="sourceLineNo">1492</span> @Override<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span> public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span> BeanInfo bi = Introspector.getBeanInfo(c, null);<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span> for (PropertyDescriptor pd : bi.getPropertyDescriptors()) {<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span> Method rm = pd.getReadMethod(), wm = pd.getWriteMethod();<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span> if (method.equals(rm))<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span> return Config.this.getObject(section2 + '/' + pd.getName(), rm.getGenericReturnType());<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span> if (method.equals(wm))<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span> return Config.this.set(section2 + '/' + pd.getName(), args[0]);<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span> }<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span> throw new UnsupportedOperationException("Unsupported interface method. method='" + method + "'");<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span> }<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span> };<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span><a name="line.1505"></a>
-<span class="sourceLineNo">1506</span> return (T)Proxy.newProxyInstance(c.getClassLoader(), new Class[] { c }, h);<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span> }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span><a name="line.1508"></a>
-<span class="sourceLineNo">1509</span> /**<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span> * Returns <jk>true</jk> if this section contains the specified key and the key has a non-blank value.<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span> *<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span> * @param key The key.<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span> * @return <jk>true</jk> if this section contains the specified key and the key has a non-blank value.<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span> */<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span> public boolean exists(String key) {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span> return isNotEmpty(getString(key, null));<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span> }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span><a name="line.1518"></a>
-<span class="sourceLineNo">1519</span> /**<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span> * Creates the specified section if it doesn't exist.<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span> *<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span> * <p><a name="line.1522"></a>
-<span class="sourceLineNo">1523</span> * Returns the existing section if it already exists.<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span> *<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span> * @param name<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span> * The section name.<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span> * <br>Must not be <jk>null</jk>.<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span> * <br>Use blank for the default section.<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span> * @param preLines<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span> * Optional comment and blank lines to add immediately before the section.<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span> * <br>If <jk>null</jk>, previous pre-lines will not be replaced.<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span> * @return The appended or existing section.<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span> */<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span> public Config setSection(String name, List<String> preLines) {<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span> try {<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span> return setSection(section(name), preLines, null);<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span> } catch (SerializeException e) {<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span> throw new RuntimeException(e); // Impossible.<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span> }<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span> }<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span><a name="line.1542"></a>
-<span class="sourceLineNo">1543</span> /**<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span> * Creates the specified section if it doesn't exist.<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span> *<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span> * @param name<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span> * The section name.<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span> * <br>Must not be <jk>null</jk>.<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span> * <br>Use blank for the default section.<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span> * @param preLines<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span> * Optional comment and blank lines to add immediately before the section.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span> * <br>If <jk>null</jk>, previous pre-lines will not be replaced.<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span> * @param contents<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span> * Values to set in the new section.<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span> * <br>Can be <jk>null</jk>.<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span> * @return The appended or existing section.<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span> * @throws SerializeException<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span> */<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span> public Config setSection(String name, List<String> preLines, Map<String,Object> contents) throws SerializeException {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span> checkWrite();<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span> configMap.setSection(section(name), preLines);<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span><a name="line.1563"></a>
-<span class="sourceLineNo">1564</span> if (contents != null)<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span> for (Map.Entry<String,Object> e : contents.entrySet())<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span> set(section(name) + '/' + e.getKey(), e.getValue());<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span><a name="line.1567"></a>
-<span class="sourceLineNo">1568</span> return this;<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span> }<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span><a name="line.1570"></a>
-<span class="sourceLineNo">1571</span> /**<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span> * Removes the section with the specified name.<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span> *<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span> * @param name The name of the section to remove<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span> * @return This object (for method chaining).<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span> */<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span> public Config removeSection(String name) {<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span> checkWrite();<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span> configMap.removeSection(name);<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span> return this;<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span> }<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span><a name="line.1583"></a>
-<span class="sourceLineNo">1584</span> /**<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span> * Creates the specified import statement if it doesn't exist.<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span> *<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span> * @param sectionName<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span> * The section name where to place the import statement.<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span> * <br>Must not be <jk>null</jk>.<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span> * <br>Use blank for the default section.<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span> * @param importName<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span> * The import name.<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span> * <br>Must not be <jk>null</jk>.<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span> * @param preLines<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span> * Optional comment and blank lines to add immediately before the import statement.<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span> * <br>If <jk>null</jk>, previous pre-lines will not be replaced.<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span> * @return The appended or existing import statement.<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span> */<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span> public Config setImport(String sectionName, String importName, List<String> preLines) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span> checkWrite();<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span> configMap.setImport(section(name), importName, preLines);<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span> return this;<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span> }<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span><a name="line.1605"></a>
-<span class="sourceLineNo">1606</span> /**<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span> * Removes the import statement with the specified name from the specified section.<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span> *<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span> * @param sectionName<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span> * The section name where to place the import statement.<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span> * <br>Must not be <jk>null</jk>.<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span> * <br>Use blank for the default section.<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span> * @param importName<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span> * The import name.<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span> * <br>Must not be <jk>null</jk>.<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span> * @return This object (for method chaining).<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span> */<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span> public Config removeImport(String sectionName, String importName) {<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span> checkWrite();<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span> configMap.removeImport(sectionName, importName);<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span> return this;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span> }<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span><a name="line.1624"></a>
-<span class="sourceLineNo">1625</span> /**<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span> * Loads the contents of the specified map of maps into this config.<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span> *<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span> * @param m The maps to load.<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span> * @return This object (for method chaining).<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span> * @throws SerializeException<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span> */<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span> public Config load(Map<String,Map<String,Object>> m) throws SerializeException {<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span> if (m != null)<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span> for (Map.Entry<String,Map<String,Object>> e : m.entrySet()) {<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span> setSection(e.getKey(), null, e.getValue());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span> }<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span> return this;<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span> }<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span><a name="line.1639"></a>
-<span class="sourceLineNo">1640</span> /**<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span> * Commit the changes in this config to the store.<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span> *<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span> * @return This object (for method chaining).<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span> * @throws IOException<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span> */<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span> public Config commit() throws IOException {<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span> checkWrite();<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span> configMap.commit();<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span> return this;<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span> }<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span><a name="line.1652"></a>
-<span class="sourceLineNo">1653</span> /**<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span> * Saves this config file to the specified writer as an INI file.<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span> *<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span> * <p><a name="line.1656"></a>
-<span class="sourceLineNo">1657</span> * The writer will automatically be closed.<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span> *<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span> * @param w The writer to send the output to.<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span> * @return This object (for method chaining).<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span> * @throws IOException If a problem occurred trying to send contents to the writer.<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span> */<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span> @Override /* Writable */<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span> public Writer writeTo(Writer w) throws IOException {<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span> return configMap.writeTo(w);<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span> }<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span><a name="line.1667"></a>
-<span class="sourceLineNo">1668</span> /**<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span> * Add a listener to this config to react to modification events.<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span> *<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span> * <p><a name="line.1671"></a>
-<span class="sourceLineNo">1672</span> * Listeners should be removed using {@link #removeListener(ConfigEventListener)}.<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span> *<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span> * @param listener The new listener to add.<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span> * @return This object (for method chaining).<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span> */<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span> public synchronized Config addListener(ConfigEventListener listener) {<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span> listeners.add(listener);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span> return this;<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span> }<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span><a name="line.1681"></a>
-<span class="sourceLineNo">1682</span> /**<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span> * Removes a listener from this config.<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span> *<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span> * @param listener The listener to remove.<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span> * @return This object (for method chaining).<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span> */<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span> public synchronized Config removeListener(ConfigEventListener listener) {<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span> listeners.remove(listener);<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span> return this;<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span> }<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span><a name="line.1692"></a>
-<span class="sourceLineNo">1693</span> /**<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span> * Closes this configuration object by unregistering it from the underlying config map.<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span> *<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span> * @throws IOException<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span> */<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span> public void close() throws IOException {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span> configMap.unregister(this);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span> }<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span><a name="line.1701"></a>
-<span class="sourceLineNo">1702</span> /**<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span> * Overwrites the contents of the config file.<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span> *<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span> * @param contents The new contents of the config file.<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span> * @param synchronous Wait until the change has been persisted before returning this map.<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span> * @return This object (for method chaining).<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span> * @throws IOException<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span> * @throws InterruptedException<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span> */<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span> public Config load(Reader contents, boolean synchronous) throws IOException, InterruptedException {<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span> checkWrite();<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span> configMap.load(IOUtils.read(contents), synchronous);<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span> return this;<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span> }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span><a name="line.1717"></a>
-<span class="sourceLineNo">1718</span> /**<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span> * Overwrites the contents of the config file.<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span> *<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span> * @param contents The new contents of the config file.<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span> * @param synchronous Wait until the change has been persisted before returning this map.<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span> * @return This object (for method chaining).<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span> * @throws IOException<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span> * @throws InterruptedException<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span> */<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span> public Config load(String contents, boolean synchronous) throws IOException, InterruptedException {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span> checkWrite();<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span> configMap.load(contents, synchronous);<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span> return this;<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span> }<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span><a name="line.1733"></a>
-<span class="sourceLineNo">1734</span> /**<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span> * Does a rollback of any changes on this config currently in memory.<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span> *<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span> * @return This object (for method chaining).<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span> */<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span> public Config rollback() {<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span> checkWrite();<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span> configMap.rollback();<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span> return this;<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span> }<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span><a name="line.1745"></a>
-<span class="sourceLineNo">1746</span> /**<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span> * Returns the values in this config map as a map of maps.<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span> *<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span> * <p><a name="line.1749"></a>
-<span class="sourceLineNo">1750</span> * This is considered a snapshot copy of the config map.<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span> *<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span> * <p><a name="line.1752"></a>
-<span class="sourceLineNo">1753</span> * The returned map is modifiable, but modifications to the returned map are not reflected in the config map.<a name="line.1753"></a>
+<span class="sourceLineNo">1467</span> * MyConfigInterface ci = cf.getSectionAsInterface(<js>"MySection"</js>, MyConfigInterface.<jk>class</jk>);<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span> *<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span> * <jk>int</jk> myInt = ci.getInt();<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span> *<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span> * ci.setBean(<jk>new</jk> MyBean());<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span> *<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span> * cf.save();<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span> * </p><a name="line.1474"></a>
+<span class="sourceLineNo">1475</span> *<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span> * <h5 class='section'>Notes</h5><a name="line.1476"></a>
+<span class="sourceLineNo">1477</span> * <ul class='spaced-list'><a name="line.1477"></a>
+<span class="sourceLineNo">1478</span> * <li>Calls to setters when the configuration is read-only will cause {@link UnsupportedOperationException} to be thrown.<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span> * </ul><a name="line.1479"></a>
+<span class="sourceLineNo">1480</span> *<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span> * @param section<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span> * The section name to write from.<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span> * <br>If empty, refers to the default section.<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span> * <br>Must not be <jk>null</jk>.<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span> * @param c The proxy interface class.<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span> * @return The proxy interface.<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span> */<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span> @SuppressWarnings("unchecked")<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span> public <T> T getSectionAsInterface(String section, final Class<T> c) {<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span> assertFieldNotNull(c, "c");<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span> final String section2 = section(section);<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span><a name="line.1492"></a>
+<span class="sourceLineNo">1493</span> if (! c.isInterface())<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span> throw new IllegalArgumentException("Class '"+c.getName()+"' passed to getSectionAsInterface() is not an interface.");<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span><a name="line.1495"></a>
+<span class="sourceLineNo">1496</span> InvocationHandler h = new InvocationHandler() {<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span><a name="line.1497"></a>
+<span class="sourceLineNo">1498</span> @Override<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span> public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span> BeanInfo bi = Introspector.getBeanInfo(c, null);<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span> for (PropertyDescriptor pd : bi.getPropertyDescriptors()) {<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span> Method rm = pd.getReadMethod(), wm = pd.getWriteMethod();<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span> if (method.equals(rm))<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span> return Config.this.getObject(section2 + '/' + pd.getName(), rm.getGenericReturnType());<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span> if (method.equals(wm))<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span> return Config.this.set(section2 + '/' + pd.getName(), args[0]);<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span> }<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span> throw new UnsupportedOperationException("Unsupported interface method. method='" + method + "'");<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span> }<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span> };<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span><a name="line.1511"></a>
+<span class="sourceLineNo">1512</span> return (T)Proxy.newProxyInstance(c.getClassLoader(), new Class[] { c }, h);<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span> }<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span><a name="line.1514"></a>
+<span class="sourceLineNo">1515</span> /**<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span> * Returns <jk>true</jk> if this section contains the specified key and the key has a non-blank value.<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span> *<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span> * @param key The key.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span> * @return <jk>true</jk> if this section contains the specified key and the key has a non-blank value.<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span> */<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span> public boolean exists(String key) {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span> return isNotEmpty(getString(key, null));<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span> }<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span><a name="line.1524"></a>
+<span class="sourceLineNo">1525</span> /**<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span> * Creates the specified section if it doesn't exist.<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span> *<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span> * <p><a name="line.1528"></a>
+<span class="sourceLineNo">1529</span> * Returns the existing section if it already exists.<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span> *<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span> * @param name<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span> * The section name.<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span> * <br>Must not be <jk>null</jk>.<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span> * <br>Use blank for the default section.<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span> * @param preLines<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span> * Optional comment and blank lines to add immediately before the section.<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span> * <br>If <jk>null</jk>, previous pre-lines will not be replaced.<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span> * @return The appended or existing section.<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span> */<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span> public Config setSection(String name, List<String> preLines) {<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span> try {<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span> return setSection(section(name), preLines, null);<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span> } catch (SerializeException e) {<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span> throw new RuntimeException(e); // Impossible.<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span> }<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span> }<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span><a name="line.1548"></a>
+<span class="sourceLineNo">1549</span> /**<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span> * Creates the specified section if it doesn't exist.<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span> *<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span> * @param name<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span> * The section name.<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span> * <br>Must not be <jk>null</jk>.<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span> * <br>Use blank for the default section.<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span> * @param preLines<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span> * Optional comment and blank lines to add immediately before the section.<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span> * <br>If <jk>null</jk>, previous pre-lines will not be replaced.<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span> * @param contents<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span> * Values to set in the new section.<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span> * <br>Can be <jk>null</jk>.<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span> * @return The appended or existing section.<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span> * @throws SerializeException<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span> */<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span> public Config setSection(String name, List<String> preLines, Map<String,Object> contents) throws SerializeException {<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span> checkWrite();<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span> configMap.setSection(section(name), preLines);<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span><a name="line.1569"></a>
+<span class="sourceLineNo">1570</span> if (contents != null)<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span> for (Map.Entry<String,Object> e : contents.entrySet())<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span> set(section(name) + '/' + e.getKey(), e.getValue());<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span><a name="line.1573"></a>
+<span class="sourceLineNo">1574</span> return this;<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span> }<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span><a name="line.1576"></a>
+<span class="sourceLineNo">1577</span> /**<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span> * Removes the section with the specified name.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span> *<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span> * @param name The name of the section to remove<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span> * @return This object (for method chaining).<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span> */<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span> public Config removeSection(String name) {<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span> checkWrite();<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span> configMap.removeSection(name);<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span> return this;<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span> }<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span><a name="line.1589"></a>
+<span class="sourceLineNo">1590</span> /**<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span> * Creates the specified import statement if it doesn't exist.<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span> *<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span> * @param sectionName<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span> * The section name where to place the import statement.<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span> * <br>Must not be <jk>null</jk>.<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span> * <br>Use blank for the default section.<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span> * @param importName<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span> * The import name.<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span> * <br>Must not be <jk>null</jk>.<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span> * @param preLines<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span> * Optional comment and blank lines to add immediately before the import statement.<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span> * <br>If <jk>null</jk>, previous pre-lines will not be replaced.<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span> * @return The appended or existing import statement.<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span> */<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span> public Config setImport(String sectionName, String importName, List<String> preLines) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span> checkWrite();<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span> configMap.setImport(section(name), importName, preLines);<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span> return this;<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span> }<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span><a name="line.1611"></a>
+<span class="sourceLineNo">1612</span> /**<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span> * Removes the import statement with the specified name from the specified section.<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span> *<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span> * @param sectionName<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span> * The section name where to place the import statement.<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span> * <br>Must not be <jk>null</jk>.<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span> * <br>Use blank for the default section.<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span> * @param importName<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span> * The import name.<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span> * <br>Must not be <jk>null</jk>.<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span> * @return This object (for method chaining).<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span> */<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span> public Config removeImport(String sectionName, String importName) {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span> checkWrite();<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span> configMap.removeImport(sectionName, importName);<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span> return this;<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span> }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span><a name="line.1630"></a>
+<span class="sourceLineNo">1631</span> /**<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span> * Loads the contents of the specified map of maps into this config.<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span> *<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span> * @param m The maps to load.<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span> * @return This object (for method chaining).<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span> * @throws SerializeException<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span> */<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span> public Config load(Map<String,Map<String,Object>> m) throws SerializeException {<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span> if (m != null)<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span> for (Map.Entry<String,Map<String,Object>> e : m.entrySet()) {<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span> setSection(e.getKey(), null, e.getValue());<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span> }<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span> return this;<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span> }<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span><a name="line.1645"></a>
+<span class="sourceLineNo">1646</span> /**<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span> * Commit the changes in this config to the store.<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span> *<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span> * @return This object (for method chaining).<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span> * @throws IOException<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span> */<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span> public Config commit() throws IOException {<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span> checkWrite();<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span> configMap.commit();<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span> return this;<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span> }<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span><a name="line.1658"></a>
+<span class="sourceLineNo">1659</span> /**<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span> * Saves this config file to the specified writer as an INI file.<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span> *<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span> * <p><a name="line.1662"></a>
+<span class="sourceLineNo">1663</span> * The writer will automatically be closed.<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span> *<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span> * @param w The writer to send the output to.<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span> * @return This object (for method chaining).<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span> * @throws IOException If a problem occurred trying to send contents to the writer.<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span> */<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span> @Override /* Writable */<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span> public Writer writeTo(Writer w) throws IOException {<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span> return configMap.writeTo(w);<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span> }<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span><a name="line.1673"></a>
+<span class="sourceLineNo">1674</span> /**<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span> * Add a listener to this config to react to modification events.<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span> *<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span> * <p><a name="line.1677"></a>
+<span class="sourceLineNo">1678</span> * Listeners should be removed using {@link #removeListener(ConfigEventListener)}.<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span> *<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span> * @param listener The new listener to add.<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span> * @return This object (for method chaining).<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span> */<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span> public synchronized Config addListener(ConfigEventListener listener) {<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span> listeners.add(listener);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span> return this;<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span> }<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span><a name="line.1687"></a>
+<span class="sourceLineNo">1688</span> /**<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span> * Removes a listener from this config.<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span> *<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span> * @param listener The listener to remove.<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span> * @return This object (for method chaining).<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span> */<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span> public synchronized Config removeListener(ConfigEventListener listener) {<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span> listeners.remove(listener);<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span> return this;<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span> }<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span><a name="line.1698"></a>
+<span class="sourceLineNo">1699</span> /**<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span> * Closes this configuration object by unregistering it from the underlying config map.<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span> *<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span> * @throws IOException<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span> */<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span> public void close() throws IOException {<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span> configMap.unregister(this);<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span> }<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span><a name="line.1707"></a>
+<span class="sourceLineNo">1708</span> /**<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span> * Overwrites the contents of the config file.<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span> *<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span> * @param contents The new contents of the config file.<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span> * @param synchronous Wait until the change has been persisted before returning this map.<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span> * @return This object (for method chaining).<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span> * @throws IOException<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span> * @throws InterruptedException<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span> */<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span> public Config load(Reader contents, boolean synchronous) throws IOException, InterruptedException {<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span> checkWrite();<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span> configMap.load(IOUtils.read(contents), synchronous);<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span> return this;<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span> }<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span><a name="line.1723"></a>
+<span class="sourceLineNo">1724</span> /**<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span> * Overwrites the contents of the config file.<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span> *<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span> * @param contents The new contents of the config file.<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span> * @param synchronous Wait until the change has been persisted before returning this map.<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span> * @return This object (for method chaining).<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span> * @throws IOException<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span> * @throws InterruptedException<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span> */<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span> public Config load(String contents, boolean synchronous) throws IOException, InterruptedException {<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span> checkWrite();<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span> configMap.load(contents, synchronous);<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span> return this;<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span> }<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span><a name="line.1739"></a>
+<span class="sourceLineNo">1740</span> /**<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span> * Does a rollback of any changes on this config currently in memory.<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span> *<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span> * @return This object (for method chaining).<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span> * @throws UnsupportedOperationException If configuration is read only.<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span> */<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span> public Config rollback() {<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span> checkWrite();<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span> configMap.rollback();<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span> return this;<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span> }<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span><a name="line.1751"></a>
+<span class="sourceLineNo">1752</span> /**<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span> * Returns the values in this config map as a map of maps.<a name="line.1753"></a>
<span class="sourceLineNo">1754</span> *<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span> * @return A copy of this config as a map of maps.<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span> */<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span> @Override /* Context */<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span> public ObjectMap asMap() {<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span> return configMap.asMap();<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span> }<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span><a name="line.1761"></a>
-<span class="sourceLineNo">1762</span><a name="line.1762"></a>
-<span class="sourceLineNo">1763</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span> // Test methods<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span> ConfigMap getConfigMap() {<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span> return configMap;<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span> }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span><a name="line.1770"></a>
-<span class="sourceLineNo">1771</span> List<ConfigEventListener> getListeners() {<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span> return Collections.unmodifiableList(listeners);<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span> }<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span><a name="line.1774"></a>
-<span class="sourceLineNo">1775</span><a name="line.1775"></a>
-<span class="sourceLineNo">1776</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span> // Interface methods<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span><a name="line.1779"></a>
-<span class="sourceLineNo">1780</span> /**<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span> * Unused.<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span> */<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span> @Override /* Context */<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span> public Session createSession(SessionArgs args) {<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span> throw new UnsupportedOperationException();<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span> }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span><a name="line.1787"></a>
-<span class="sourceLineNo">1788</span> /**<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span> * Unused.<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span> */<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span> @Override /* Context */<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span> public SessionArgs createDefaultSessionArgs() {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span> throw new UnsupportedOperationException();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span> }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span> @Override /* ConfigEventListener */<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span> public void onConfigChange(ConfigEvents events) {<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span> for (ConfigEventListener l : listeners)<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span> l.onConfigChange(events);<a name="line.1799"></a>
+<span class="sourceLineNo">1755</span> * <p><a name="line.1755"></a>
+<span class="sourceLineNo">1756</span> * This is considered a snapshot copy of the config map.<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span> *<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span> * <p><a name="line.1758"></a>
+<span class="sourceLineNo">1759</span> * The returned map is modifiable, but modifications to the returned map are not reflected in the config map.<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span> *<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span> * @return A copy of this config as a map of maps.<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span> */<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span> @Override /* Context */<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span> public ObjectMap asMap() {<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span> return configMap.asMap();<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span> }<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span><a name="line.1767"></a>
+<span class="sourceLineNo">1768</span><a name="line.1768"></a>
+<span class="sourceLineNo">1769</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span> // Test methods<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span><a name="line.1772"></a>
+<span class="sourceLineNo">1773</span> ConfigMap getConfigMap() {<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span> return configMap;<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span> }<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span><a name="line.1776"></a>
+<span class="sourceLineNo">1777</span> List<ConfigEventListener> getListeners() {<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span> return Collections.unmodifiableList(listeners);<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span> }<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span><a name="line.1780"></a>
+<span class="sourceLineNo">1781</span><a name="line.1781"></a>
+<span class="sourceLineNo">1782</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span> // Interface methods<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span><a name="line.1785"></a>
+<span class="sourceLineNo">1786</span> /**<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span> * Unused.<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span> */<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span> @Override /* Context */<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span> public Session createSession(SessionArgs args) {<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span> throw new UnsupportedOperationException();<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span> }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span><a name="line.1793"></a>
+<span class="sourceLineNo">1794</span> /**<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span> * Unused.<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span> */<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span> @Override /* Context */<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span> public SessionArgs createDefaultSessionArgs() {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span> throw new UnsupportedOperationException();<a name="line.1799"></a>
<span class="sourceLineNo">1800</span> }<a name="line.1800"></a>
<span class="sourceLineNo">1801</span><a name="line.1801"></a>
-<span class="sourceLineNo">1802</span> @Override /* Writable */<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span> public MediaType getMediaType() {<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span> return MediaType.PLAIN;<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span> }<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span><a name="line.1806"></a>
+<span class="sourceLineNo">1802</span> @Override /* ConfigEventListener */<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span> public void onConfigChange(ConfigEvents events) {<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span> for (ConfigEventListener l : listeners)<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span> l.onConfigChange(events);<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span> }<a name="line.1806"></a>
<span class="sourceLineNo">1807</span><a name="line.1807"></a>
-<span class="sourceLineNo">1808</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span> // Private methods<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span><a name="line.1811"></a>
-<span class="sourceLineNo">1812</span> private String serialize(Object value, Serializer serializer) throws SerializeException {<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span> if (value == null)<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span> return "";<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span> if (serializer == null)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span> serializer = this.serializer;<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span> Class<?> c = value.getClass();<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span> if (value instanceof CharSequence)<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span> return nlIfMl((CharSequence)value);<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span> if (isSimpleType(c))<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span> return value.toString();<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span><a name="line.1822"></a>
-<span class="sourceLineNo">1823</span> if (value instanceof byte[]) {<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span> String s = null;<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span> byte[] b = (byte[])value;<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span> if (binaryFormat == BinaryFormat.HEX)<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span> s = toHex(b);<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span> else if (binaryFormat == BinaryFormat.SPACED_HEX)<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span> s = toSpacedHex(b);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span> else<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span> s = base64Encode(b);<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span> int l = binaryLineLength;<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span> if (l <= 0 || s.length() <= l)<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span> return s;<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span> StringBuilder sb = new StringBuilder();<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span> for (int i = 0; i < s.length(); i += l)<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span> sb.append(binaryLineLength > 0 ? "\n" : "").append(s.substring(i, Math.min(s.length(), i + l)));<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span> return sb.toString();<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span> }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span><a name="line.1840"></a>
-<span class="sourceLineNo">1841</span> String r = null;<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span> if (multiLineValuesOnSeparateLines)<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span> r = "\n" + (String)serializer.serialize(value);<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span> else<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span> r = (String)serializer.serialize(value);<a name="line.1845"></a>
+<span class="sourceLineNo">1808</span> @Override /* Writable */<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span> public MediaType getMediaType() {<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span> return MediaType.PLAIN;<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span> }<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span><a name="line.1812"></a>
+<span class="sourceLineNo">1813</span><a name="line.1813"></a>
+<span class="sourceLineNo">1814</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span> // Private methods<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span><a name="line.1817"></a>
+<span class="sourceLineNo">1818</span> private String serialize(Object value, Serializer serializer) throws SerializeException {<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span> if (value == null)<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span> return "";<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span> if (serializer == null)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span> serializer = this.serializer;<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span> Class<?> c = value.getClass();<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span> if (value instanceof CharSequence)<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span> return nlIfMl((CharSequence)value);<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span> if (isSimpleType(c))<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span> return value.toString();<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span><a name="line.1828"></a>
+<span class="sourceLineNo">1829</span> if (value instanceof byte[]) {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span> String s = null;<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span> byte[] b = (byte[])value;<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span> if (binaryFormat == BinaryFormat.HEX)<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span> s = toHex(b);<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span> else if (binaryFormat == BinaryFormat.SPACED_HEX)<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span> s = toSpacedHex(b);<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span> else<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span> s = base64Encode(b);<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span> int l = binaryLineLength;<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span> if (l <= 0 || s.length() <= l)<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span> return s;<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span> StringBuilder sb = new StringBuilder();<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span> for (int i = 0; i < s.length(); i += l)<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span> sb.append(binaryLineLength > 0 ? "\n" : "").append(s.substring(i, Math.min(s.length(), i + l)));<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span> return sb.toString();<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span> }<a name="line.1845"></a>
<span class="sourceLineNo">1846</span><a name="line.1846"></a>
-<span class="sourceLineNo">1847</span> if (r.startsWith("'"))<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span> return r.substring(1, r.length()-1);<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span> return r;<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span> }<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span><a name="line.1851"></a>
-<span class="sourceLineNo">1852</span> private String nlIfMl(CharSequence cs) {<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span> String s = cs.toString();<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span> if (s.indexOf('\n') != -1 && multiLineValuesOnSeparateLines)<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span> return "\n" + s;<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span> return s;<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span> }<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span><a name="line.1858"></a>
-<span class="sourceLineNo">1859</span> @SuppressWarnings({ "unchecked" })<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span> private <T> T parse(String s, Parser parser, Type type, Type...args) throws ParseException {<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span><a name="line.1861"></a>
-<span class="sourceLineNo">1862</span> if (isEmpty(s))<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span> return null;<a name="line.1863"></a>
+<span class="sourceLineNo">1847</span> String r = null;<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span> if (multiLineValuesOnSeparateLines)<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span> r = "\n" + (String)serializer.serialize(value);<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span> else<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span> r = (String)serializer.serialize(value);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span><a name="line.1852"></a>
+<span class="sourceLineNo">1853</span> if (r.startsWith("'"))<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span> return r.substring(1, r.length()-1);<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span> return r;<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span> }<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span><a name="line.1857"></a>
+<span class="sourceLineNo">1858</span> private String nlIfMl(CharSequence cs) {<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span> String s = cs.toString();<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span> if (s.indexOf('\n') != -1 && multiLineValuesOnSeparateLines)<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span> return "\n" + s;<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span> return s;<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span> }<a name="line.1863"></a>
<span class="sourceLineNo">1864</span><a name="line.1864"></a>
-<span class="sourceLineNo">1865</span> if (isSimpleType(type))<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span> return (T)beanSession.convertToType(s, (Class<?>)type);<a name="line.1866"></a>
+<span class="sourceLineNo">1865</span> @SuppressWarnings({ "unchecked" })<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span> private <T> T parse(String s, Parser parser, Type type, Type...args) throws ParseException {<a name="line.1866"></a>
<span class="sourceLineNo">1867</span><a name="line.1867"></a>
-<span class="sourceLineNo">1868</span> if (type == byte[].class) {<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span> if (s.indexOf('\n') != -1)<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span> s = s.replaceAll("\n", "");<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span> try {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span> switch (binaryFormat) {<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span> case HEX: return (T)fromHex(s);<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span> case SPACED_HEX: return (T)fromSpacedHex(s);<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span> default: return (T)base64Decode(s);<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span> }<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span> } catch (Exception e) {<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span> throw new ParseException(e, "Value could not be converted to a byte array.");<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span> }<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span> }<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span><a name="line.1881"></a>
-<span class="sourceLineNo">1882</span> if (parser == null)<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span> parser = this.parser;<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span><a name="line.1884"></a>
-<span class="sourceLineNo">1885</span> if (parser instanceof JsonParser) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span> char s1 = firstNonWhitespaceChar(s);<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span> if (isArray(type) && s1 != '[')<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span> s = '[' + s + ']';<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span> else if (s1 != '[' && s1 != '{' && ! "null".equals(s))<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span> s = '\'' + s + '\'';<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span> }<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span><a name="line.1892"></a>
-<span class="sourceLineNo">1893</span> return parser.parse(s, type, args);<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span> }<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span><a name="line.1895"></a>
-<span class="sourceLineNo">1896</span> private boolean isSimpleType(Type t) {<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span> if (! (t instanceof Class))<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span> return false;<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span> Class<?> c = (Class<?>)t;<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span> return (c == String.class || c.isPrimitive() || c.isAssignableFrom(Number.class) || c == Boolean.class || c.isEnum());<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span> }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span><a name="line.1902"></a>
-<span class="sourceLineNo">1903</span> private boolean isArray(Type t) {<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span> if (! (t instanceof Class))<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span> return false;<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span> Class<?> c = (Class<?>)t;<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span> return (c.isArray());<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span> }<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span><a name="line.1909"></a>
-<span class="sourceLineNo">1910</span> private String sname(String key) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span> assertFieldNotNull(key, "key");<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span> int i = key.indexOf('/');<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span> if (i == -1)<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span> return "";<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span> return key.substring(0, i);<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span> }<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span> private String skey(String key) {<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span> int i = key.indexOf('/');<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span> if (i == -1)<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span> return key;<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span> return key.substring(i+1);<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span> }<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span><a name="line.1924"></a>
-<span class="sourceLineNo">1925</span> private String section(String section) {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span> assertFieldNotNull(section, "section");<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span> if (isEmpty(section))<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span> return "";<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span> return section;<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span> }<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span> private void checkWrite() {<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span> if (readOnly)<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span> throw new UnsupportedOperationException("Cannot call this method on a read-only configuration.");<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span> }<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1868</span> if (isEmpty(s))<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span> return null;<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span><a name="line.1870"></a>
+<span class="sourceLineNo">1871</span> if (isSimpleType(type))<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span> return (T)beanSession.convertToType(s, (Class<?>)type);<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span><a name="line.1873"></a>
+<span class="sourceLineNo">1874</span> if (type == byte[].class) {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span> if (s.indexOf('\n') != -1)<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span> s = s.replaceAll("\n", "");<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span> try {<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span> switch (binaryFormat) {<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span> case HEX: return (T)fromHex(s);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span> case SPACED_HEX: return (T)fromSpacedHex(s);<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span> default: return (T)base64Decode(s);<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span> }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span> } catch (Exception e) {<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span> throw new ParseException(e, "Value could not be converted to a byte array.");<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span> }<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span> }<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span><a name="line.1887"></a>
+<span class="sourceLineNo">1888</span> if (parser == null)<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span> parser = this.parser;<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span><a name="line.1890"></a>
+<span class="sourceLineNo">1891</span> if (parser instanceof JsonParser) {<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span> char s1 = firstNonWhitespaceChar(s);<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span> if (isArray(type) && s1 != '[')<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span> s = '[' + s + ']';<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span> else if (s1 != '[' && s1 != '{' && ! "null".equals(s))<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span> s = '\'' + s + '\'';<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span> }<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span><a name="line.1898"></a>
+<span class="sourceLineNo">1899</span> return parser.parse(s, type, args);<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span> }<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span><a name="line.1901"></a>
+<span class="sourceLineNo">1902</span> private boolean isSimpleType(Type t) {<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span> if (! (t instanceof Class))<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span> return false;<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span> Class<?> c = (Class<?>)t;<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span> return (c == String.class || c.isPrimitive() || c.isAssignableFrom(Number.class) || c == Boolean.class || c.isEnum());<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span> }<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span><a name="line.1908"></a>
+<span class="sourceLineNo">1909</span> private boolean isArray(Type t) {<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span> if (! (t instanceof Class))<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span> return false;<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span> Class<?> c = (Class<?>)t;<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span> return (c.isArray());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span> }<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span><a name="line.1915"></a>
+<span class="sourceLineNo">1916</span> private String sname(String key) {<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span> assertFieldNotNull(key, "key");<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span> int i = key.indexOf('/');<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span> if (i == -1)<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span> return "";<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span> return key.substring(0, i);<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span> }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span> private String skey(String key) {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span> int i = key.indexOf('/');<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span> if (i == -1)<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span> return key;<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span> return key.substring(i+1);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span> }<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span><a name="line.1930"></a>
+<span class="sourceLineNo">1931</span> private String section(String section) {<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span> assertFieldNotNull(section, "section");<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span> if (isEmpty(section))<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span> return "";<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span> return section;<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span> }<a name="line.1936"></a>
<span class="sourceLineNo">1937</span><a name="line.1937"></a>
-<span class="sourceLineNo">1938</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span> // Other methods<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span><a name="line.1941"></a>
-<span class="sourceLineNo">1942</span> @Override /* Object */<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span> public String toString() {<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span> return configMap.toString();<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span> }<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span><a name="line.1946"></a>
-<span class="sourceLineNo">1947</span> @Override /* Object */<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span> protected void finalize() throws Throwable {<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span> close();<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span> }<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>}<a name="line.1951"></a>
+<span class="sourceLineNo">1938</span> private void checkWrite() {<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span> if (readOnly)<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span> throw new UnsupportedOperationException("Cannot call this method on a read-only configuration.");<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span> }<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span><a name="line.1942"></a>
+<span class="sourceLineNo">1943</span><a name="line.1943"></a>
+<span class="sourceLineNo">1944</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span> // Other methods<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span><a name="line.1947"></a>
+<span class="sourceLineNo">1948</span> @Override /* Object */<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span> public String toString() {<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span> return configMap.toString();<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span> }<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span> @Override /* Object */<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span> protected void finalize() throws Throwable {<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span> close();<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span> }<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>}<a name="line.1957"></a>
diff --git a/content/site/apidocs-8.0.1/src-html/org/apache/juneau/microservice/Microservice.html b/content/site/apidocs-8.0.1/src-html/org/apache/juneau/microservice/Microservice.html
index cb30eb0..c1209f7 100644
--- a/content/site/apidocs-8.0.1/src-html/org/apache/juneau/microservice/Microservice.html
+++ b/content/site/apidocs-8.0.1/src-html/org/apache/juneau/microservice/Microservice.html
@@ -178,610 +178,609 @@
<span class="sourceLineNo">170</span> }<a name="line.170"></a>
<span class="sourceLineNo">171</span> } else {<a name="line.171"></a>
<span class="sourceLineNo">172</span> // Otherwise, read from manifest file in the jar file containing the main class.<a name="line.172"></a>
-<span class="sourceLineNo">173</span> URLClassLoader cl = (URLClassLoader)getClass().getClassLoader();<a name="line.173"></a>
-<span class="sourceLineNo">174</span> URL url = cl.findResource("META-INF/MANIFEST.MF");<a name="line.174"></a>
-<span class="sourceLineNo">175</span> if (url != null) {<a name="line.175"></a>
-<span class="sourceLineNo">176</span> try {<a name="line.176"></a>
-<span class="sourceLineNo">177</span> m.read(url.openStream());<a name="line.177"></a>
-<span class="sourceLineNo">178</span> } catch (IOException e) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span> throw new IOException("Problem detected in MANIFEST.MF. Contents below:\n " + read(url.openStream()), e);<a name="line.179"></a>
-<span class="sourceLineNo">180</span> }<a name="line.180"></a>
-<span class="sourceLineNo">181</span> }<a name="line.181"></a>
-<span class="sourceLineNo">182</span> }<a name="line.182"></a>
-<span class="sourceLineNo">183</span> manifest = new ManifestFile(m);<a name="line.183"></a>
-<span class="sourceLineNo">184</span> }<a name="line.184"></a>
-<span class="sourceLineNo">185</span> ManifestFileVar.init(manifest);<a name="line.185"></a>
-<span class="sourceLineNo">186</span> this.manifest = manifest;<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span> // --------------------------------------------------------------------------------<a name="line.188"></a>
-<span class="sourceLineNo">189</span> // Try to resolve the configuration if not specified.<a name="line.189"></a>
-<span class="sourceLineNo">190</span> // --------------------------------------------------------------------------------<a name="line.190"></a>
-<span class="sourceLineNo">191</span> Config config = builder.config;<a name="line.191"></a>
-<span class="sourceLineNo">192</span> ConfigBuilder configBuilder = builder.configBuilder.varResolver(builder.varResolverBuilder.build()).store(ConfigMemoryStore.DEFAULT);<a name="line.192"></a>
-<span class="sourceLineNo">193</span> if (config == null) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span> ConfigStore store = builder.configStore;<a name="line.194"></a>
-<span class="sourceLineNo">195</span> for (String name : getCandidateConfigNames()) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span> if (store != null) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span> if (store.exists(name)) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span> configBuilder.store(store).name(name);<a name="line.198"></a>
-<span class="sourceLineNo">199</span> break;<a name="line.199"></a>
-<span class="sourceLineNo">200</span> }<a name="line.200"></a>
-<span class="sourceLineNo">201</span> } else {<a name="line.201"></a>
-<span class="sourceLineNo">202</span> if (ConfigFileStore.DEFAULT.exists(name)) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span> configBuilder.store(ConfigFileStore.DEFAULT).name(name);<a name="line.203"></a>
-<span class="sourceLineNo">204</span> break;<a name="line.204"></a>
-<span class="sourceLineNo">205</span> }<a name="line.205"></a>
-<span class="sourceLineNo">206</span> if (ConfigClasspathStore.DEFAULT.exists(name)) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span> configBuilder.store(ConfigClasspathStore.DEFAULT).name(name);<a name="line.207"></a>
-<span class="sourceLineNo">208</span> break;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> }<a name="line.209"></a>
-<span class="sourceLineNo">210</span> }<a name="line.210"></a>
-<span class="sourceLineNo">211</span> }<a name="line.211"></a>
-<span class="sourceLineNo">212</span> config = configBuilder.build();<a name="line.212"></a>
-<span class="sourceLineNo">213</span> }<a name="line.213"></a>
-<span class="sourceLineNo">214</span> this.config = config;<a name="line.214"></a>
-<span class="sourceLineNo">215</span> Config.setSystemDefault(this.config);<a name="line.215"></a>
-<span class="sourceLineNo">216</span> this.config.addListener(this);<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span> //-------------------------------------------------------------------------------------------------------------<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // Var resolver.<a name="line.219"></a>
-<span class="sourceLineNo">220</span> //-------------------------------------------------------------------------------------------------------------<a name="line.220"></a>
-<span class="sourceLineNo">221</span> VarResolverBuilder varResolverBuilder = builder.varResolverBuilder;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> this.varResolver = varResolverBuilder.contextObject(ConfigVar.SESSION_config, config).build();<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span> // --------------------------------------------------------------------------------<a name="line.224"></a>
-<span class="sourceLineNo">225</span> // Initialize console commands.<a name="line.225"></a>
-<span class="sourceLineNo">226</span> // --------------------------------------------------------------------------------<a name="line.226"></a>
-<span class="sourceLineNo">227</span> this.consoleEnabled = ObjectUtils.firstNonNull(builder.consoleEnabled, config.getBoolean("Console/enabled", false));<a name="line.227"></a>
-<span class="sourceLineNo">228</span> if (consoleEnabled) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span> Console c = System.console();<a name="line.229"></a>
-<span class="sourceLineNo">230</span> this.consoleReader = ObjectUtils.firstNonNull(builder.consoleReader, new Scanner(c == null ? new InputStreamReader(System.in) : c.reader()));<a name="line.230"></a>
-<span class="sourceLineNo">231</span> this.consoleWriter = ObjectUtils.firstNonNull(builder.consoleWriter, c == null ? new PrintWriter(System.out, true) : c.writer());<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span> for (ConsoleCommand cc : builder.consoleCommands) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span> consoleCommandMap.put(cc.getName(), cc);<a name="line.234"></a>
-<span class="sourceLineNo">235</span> }<a name="line.235"></a>
-<span class="sourceLineNo">236</span> for (String s : config.getStringArray("Console/commands")) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span> ConsoleCommand cc;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> try {<a name="line.238"></a>
-<span class="sourceLineNo">239</span> cc = (ConsoleCommand)Class.forName(s).newInstance();<a name="line.239"></a>
-<span class="sourceLineNo">240</span> consoleCommandMap.put(cc.getName(), cc);<a name="line.240"></a>
-<span class="sourceLineNo">241</span> } catch (Exception e) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span> getConsoleWriter().println("Could not create console command '"+s+"', " + e.getLocalizedMessage());<a name="line.242"></a>
-<span class="sourceLineNo">243</span> }<a name="line.243"></a>
-<span class="sourceLineNo">244</span> }<a name="line.244"></a>
-<span class="sourceLineNo">245</span> consoleThread = new Thread("ConsoleThread") {<a name="line.245"></a>
-<span class="sourceLineNo">246</span> @Override /* Thread */<a name="line.246"></a>
-<span class="sourceLineNo">247</span> public void run() {<a name="line.247"></a>
-<span class="sourceLineNo">248</span> Scanner in = getConsoleReader();<a name="line.248"></a>
-<span class="sourceLineNo">249</span> PrintWriter out = getConsoleWriter();<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> out.println(messages.getString("ListOfAvailableCommands"));<a name="line.251"></a>
-<span class="sourceLineNo">252</span> for (ConsoleCommand cc : new TreeMap<>(getConsoleCommands()).values())<a name="line.252"></a>
-<span class="sourceLineNo">253</span> out.append("\t").append(cc.getName()).append(" -- ").append(cc.getInfo()).println();<a name="line.253"></a>
-<span class="sourceLineNo">254</span> out.println();<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span> while (true) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span> String line = null;<a name="line.257"></a>
-<span class="sourceLineNo">258</span> out.append("> ").flush();<a name="line.258"></a>
-<span class="sourceLineNo">259</span> line = in.nextLine();<a name="line.259"></a>
-<span class="sourceLineNo">260</span> Args args = new Args(line);<a name="line.260"></a>
-<span class="sourceLineNo">261</span> if (! args.isEmpty())<a name="line.261"></a>
-<span class="sourceLineNo">262</span> executeCommand(args, in, out);<a name="line.262"></a>
-<span class="sourceLineNo">263</span> }<a name="line.263"></a>
-<span class="sourceLineNo">264</span> }<a name="line.264"></a>
-<span class="sourceLineNo">265</span> };<a name="line.265"></a>
-<span class="sourceLineNo">266</span> consoleThread.setDaemon(true);<a name="line.266"></a>
-<span class="sourceLineNo">267</span> } else {<a name="line.267"></a>
-<span class="sourceLineNo">268</span> this.consoleReader = null;<a name="line.268"></a>
-<span class="sourceLineNo">269</span> this.consoleWriter = null;<a name="line.269"></a>
-<span class="sourceLineNo">270</span> this.consoleThread = null;<a name="line.270"></a>
-<span class="sourceLineNo">271</span> }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> //-------------------------------------------------------------------------------------------------------------<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // Other.<a name="line.274"></a>
-<span class="sourceLineNo">275</span> //-------------------------------------------------------------------------------------------------------------<a name="line.275"></a>
-<span class="sourceLineNo">276</span> this.listener = builder.listener != null ? builder.listener : new BasicMicroserviceListener();<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span> init();<a name="line.278"></a>
-<span class="sourceLineNo">279</span> }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span> private List<String> getCandidateConfigNames() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span> Args args = getArgs();<a name="line.282"></a>
-<span class="sourceLineNo">283</span> if (getArgs().hasArg("configFile"))<a name="line.283"></a>
-<span class="sourceLineNo">284</span> return Collections.singletonList(args.getArg("configFile"));<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span> ManifestFile manifest = getManifest();<a name="line.286"></a>
-<span class="sourceLineNo">287</span> if (manifest.containsKey("Main-Config"))<a name="line.287"></a>
-<span class="sourceLineNo">288</span> return Collections.singletonList(manifest.getString("Main-Config"));<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span> return Config.getCandidateSystemDefaultConfigNames();<a name="line.290"></a>
-<span class="sourceLineNo">291</span> }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.293"></a>
-<span class="sourceLineNo">294</span> // Abstract lifecycle methods.<a name="line.294"></a>
-<span class="sourceLineNo">295</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span> /**<a name="line.297"></a>
-<span class="sourceLineNo">298</span> * Initializes this microservice.<a name="line.298"></a>
-<span class="sourceLineNo">299</span> *<a name="line.299"></a>
-<span class="sourceLineNo">300</span> * <p><a name="line.300"></a>
-<span class="sourceLineNo">301</span> * This method can be called whenever the microservice is not started.<a name="line.301"></a>
-<span class="sourceLineNo">302</span> *<a name="line.302"></a>
-<span class="sourceLineNo">303</span> * <p><a name="line.303"></a>
-<span class="sourceLineNo">304</span> * It will initialize (or reinitialize) the console commands, system properties, and logger.<a name="line.304"></a>
-<span class="sourceLineNo">305</span> *<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * @return This object (for method chaining).<a name="line.306"></a>
-<span class="sourceLineNo">307</span> * @throws Exception<a name="line.307"></a>
-<span class="sourceLineNo">308</span> */<a name="line.308"></a>
-<span class="sourceLineNo">309</span> public synchronized Microservice init() throws Exception {<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span> // --------------------------------------------------------------------------------<a name="line.311"></a>
-<span class="sourceLineNo">312</span> // Set system properties.<a name="line.312"></a>
-<span class="sourceLineNo">313</span> // --------------------------------------------------------------------------------<a name="line.313"></a>
-<span class="sourceLineNo">314</span> Set<String> spKeys = config.getKeys("SystemProperties");<a name="line.314"></a>
-<span class="sourceLineNo">315</span> if (spKeys != null)<a name="line.315"></a>
-<span class="sourceLineNo">316</span> for (String key : spKeys)<a name="line.316"></a>
-<span class="sourceLineNo">317</span> System.setProperty(key, config.getString("SystemProperties/"+key));<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span> // --------------------------------------------------------------------------------<a name="line.319"></a>
-<span class="sourceLineNo">320</span> // Initialize logging.<a name="line.320"></a>
-<span class="sourceLineNo">321</span> // --------------------------------------------------------------------------------<a name="line.321"></a>
-<span class="sourceLineNo">322</span> this.logger = builder.logger;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> LogConfig logConfig = builder.logConfig != null ? builder.logConfig : new LogConfig();<a name="line.323"></a>
-<span class="sourceLineNo">324</span> if (this.logger == null) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span> LogManager.getLogManager().reset();<a name="line.325"></a>
-<span class="sourceLineNo">326</span> this.logger = Logger.getLogger("");<a name="line.326"></a>
-<span class="sourceLineNo">327</span> String logFile = firstNonNull(logConfig.logFile, config.getString("Logging/logFile"));<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span> if (isNotEmpty(logFile)) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> String logDir = firstNonNull(logConfig.logDir, config.getString("Logging/logDir", "."));<a name="line.330"></a>
-<span class="sourceLineNo">331</span> mkdirs(new File(logDir), false);<a name="line.331"></a>
-<span class="sourceLineNo">332</span><a name="line.332"></a>
-<span class="sourceLineNo">333</span> boolean append = firstNonNull(logConfig.append, config.getBoolean("Logging/append"));<a name="line.333"></a>
-<span class="sourceLineNo">334</span> int limit = firstNonNull(logConfig.limit, config.getInt("Logging/limit", 1024*1024));<a name="line.334"></a>
-<span class="sourceLineNo">335</span> int count = firstNonNull(logConfig.count, config.getInt("Logging/count", 1));<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span> FileHandler fh = new FileHandler(logDir + '/' + logFile, limit, count, append);<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> Formatter f = logConfig.formatter;<a name="line.339"></a>
-<span class="sourceLineNo">340</span> if (f == null) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span> String format = config.getString("Logging/format", "[{date} {level}] {msg}%n");<a name="line.341"></a>
-<span class="sourceLineNo">342</span> String dateFormat = config.getString("Logging/dateFormat", "yyyy.MM.dd hh:mm:ss");<a name="line.342"></a>
-<span class="sourceLineNo">343</span> boolean useStackTraceHashes = config.getBoolean("Logging/useStackTraceHashes");<a name="line.343"></a>
-<span class="sourceLineNo">344</span> f = new LogEntryFormatter(format, dateFormat, useStackTraceHashes);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span> fh.setFormatter(f);<a name="line.346"></a>
-<span class="sourceLineNo">347</span> fh.setLevel(firstNonNull(logConfig.fileLevel, config.getObjectWithDefault("Logging/fileLevel", Level.INFO, Level.class)));<a name="line.347"></a>
-<span class="sourceLineNo">348</span> logger.addHandler(fh);<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span> ConsoleHandler ch = new ConsoleHandler();<a name="line.350"></a>
-<span class="sourceLineNo">351</span> ch.setLevel(firstNonNull(logConfig.consoleLevel, config.getObjectWithDefault("Logging/consoleLevel", Level.WARNING, Level.class)));<a name="line.351"></a>
-<span class="sourceLineNo">352</span> ch.setFormatter(f);<a name="line.352"></a>
-<span class="sourceLineNo">353</span> logger.addHandler(ch);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> }<a name="line.354"></a>
-<span class="sourceLineNo">355</span> }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> ObjectMap loggerLevels = config.getObject("Logging/levels", ObjectMap.class);<a name="line.357"></a>
-<span class="sourceLineNo">358</span> if (loggerLevels != null)<a name="line.358"></a>
-<span class="sourceLineNo">359</span> for (String l : loggerLevels.keySet())<a name="line.359"></a>
-<span class="sourceLineNo">360</span> Logger.getLogger(l).setLevel(loggerLevels.get(l, Level.class));<a name="line.360"></a>
-<span class="sourceLineNo">361</span> for (String l : logConfig.levels.keySet())<a name="line.361"></a>
-<span class="sourceLineNo">362</span> Logger.getLogger(l).setLevel(logConfig.levels.get(l));<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span> return this;<a name="line.364"></a>
-<span class="sourceLineNo">365</span> }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span> /**<a name="line.367"></a>
-<span class="sourceLineNo">368</span> * Start this application.<a name="line.368"></a>
-<span class="sourceLineNo">369</span> *<a name="line.369"></a>
-<span class="sourceLineNo">370</span> * <p><a name="line.370"></a>
-<span class="sourceLineNo">371</span> * Overridden methods MUST call this method FIRST so that the {@link MicroserviceListener#onStart(Microservice)} method is called.<a name="line.371"></a>
-<span class="sourceLineNo">372</span> *<a name="line.372"></a>
-<span class="sourceLineNo">373</span> * @return This object (for method chaining).<a name="line.373"></a>
-<span class="sourceLineNo">374</span> * @throws Exception<a name="line.374"></a>
-<span class="sourceLineNo">375</span> */<a name="line.375"></a>
-<span class="sourceLineNo">376</span> public synchronized Microservice start() throws Exception {<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (config.getName() == null)<a name="line.378"></a>
-<span class="sourceLineNo">379</span> err(messages, "RunningClassWithoutConfig", getClass().getSimpleName());<a name="line.379"></a>
-<span class="sourceLineNo">380</span> else<a name="line.380"></a>
-<span class="sourceLineNo">381</span> out(messages, "RunningClassWithConfig", getClass().getSimpleName(), config.getName());<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span> Runtime.getRuntime().addShutdownHook(<a name="line.383"></a>
-<span class="sourceLineNo">384</span> new Thread("ShutdownHookThread") {<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override /* Thread */<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public void run() {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> Microservice.this.stop();<a name="line.388"></a>
-<span class="sourceLineNo">389</span> Microservice.this.stopConsole();<a name="line.389"></a>
-<span class="sourceLineNo">390</span> } catch (Exception e) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span> e.printStackTrace();<a name="line.391"></a>
-<span class="sourceLineNo">392</span> }<a name="line.392"></a>
-<span class="sourceLineNo">393</span> }<a name="line.393"></a>
-<span class="sourceLineNo">394</span> }<a name="line.394"></a>
-<span class="sourceLineNo">395</span> );<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span> listener.onStart(this);<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span> return this;<a name="line.399"></a>
-<span class="sourceLineNo">400</span> }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span> /**<a name="line.402"></a>
-<span class="sourceLineNo">403</span> * Starts the console thread for this microservice.<a name="line.403"></a>
-<span class="sourceLineNo">404</span> *<a name="line.404"></a>
-<span class="sourceLineNo">405</span> * @return This object (for method chaining).<a name="line.405"></a>
-<span class="sourceLineNo">406</span> * @throws Exception<a name="line.406"></a>
-<span class="sourceLineNo">407</span> */<a name="line.407"></a>
-<span class="sourceLineNo">408</span> public synchronized Microservice startConsole() throws Exception {<a name="line.408"></a>
-<span class="sourceLineNo">409</span> if (consoleThread != null && ! consoleThread.isAlive())<a name="line.409"></a>
-<span class="sourceLineNo">410</span> consoleThread.start();<a name="line.410"></a>
-<span class="sourceLineNo">411</span> return this;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span> /**<a name="line.414"></a>
-<span class="sourceLineNo">415</span> * Stops the console thread for this microservice.<a name="line.415"></a>
-<span class="sourceLineNo">416</span> *<a name="line.416"></a>
-<span class="sourceLineNo">417</span> * @return This object (for method chaining).<a name="line.417"></a>
-<span class="sourceLineNo">418</span> * @throws Exception<a name="line.418"></a>
-<span class="sourceLineNo">419</span> */<a name="line.419"></a>
-<span class="sourceLineNo">420</span> public synchronized Microservice stopConsole() throws Exception {<a name="line.420"></a>
-<span class="sourceLineNo">421</span> if (consoleThread != null && consoleThread.isAlive())<a name="line.421"></a>
-<span class="sourceLineNo">422</span> consoleThread.interrupt();<a name="line.422"></a>
-<span class="sourceLineNo">423</span> return this;<a name="line.423"></a>
-<span class="sourceLineNo">424</span> }<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span> /**<a name="line.426"></a>
-<span class="sourceLineNo">427</span> * Returns the command-line arguments passed into the application.<a name="line.427"></a>
-<span class="sourceLineNo">428</span> *<a name="line.428"></a>
-<span class="sourceLineNo">429</span> * <p><a name="line.429"></a>
-<span class="sourceLineNo">430</span> * This method can be called from the class constructor.<a name="line.430"></a>
-<span class="sourceLineNo">431</span> *<a name="line.431"></a>
-<span class="sourceLineNo">432</span> * <p><a name="line.432"></a>
-<span class="sourceLineNo">433</span> * See {@link Args} for details on using this method.<a name="line.433"></a>
-<span class="sourceLineNo">434</span> *<a name="line.434"></a>
-<span class="sourceLineNo">435</span> * @return The command-line arguments passed into the application.<a name="line.435"></a>
-<span class="sourceLineNo">436</span> */<a name="line.436"></a>
-<span class="sourceLineNo">437</span> public Args getArgs() {<a name="line.437"></a>
-<span class="sourceLineNo">438</span> return args;<a name="line.438"></a>
-<span class="sourceLineNo">439</span> }<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span> /**<a name="line.441"></a>
-<span class="sourceLineNo">442</span> * Returns the external INI-style configuration file that can be used to configure your microservice.<a name="line.442"></a>
-<span class="sourceLineNo">443</span> *<a name="line.443"></a>
-<span class="sourceLineNo">444</span> * <p><a name="line.444"></a>
-<span class="sourceLineNo">445</span> * The config location is determined in the following order:<a name="line.445"></a>
-<span class="sourceLineNo">446</span> * <ol class='spaced-list'><a name="line.446"></a>
-<span class="sourceLineNo">447</span> * <li><a name="line.447"></a>
-<span class="sourceLineNo">448</span> * The first argument passed to the microservice jar.<a name="line.448"></a>
-<span class="sourceLineNo">449</span> * <li><a name="line.449"></a>
-<span class="sourceLineNo">450</span> * The <code>Main-Config</code> entry in the microservice jar manifest file.<a name="line.450"></a>
-<span class="sourceLineNo">451</span> * <li><a name="line.451"></a>
-<span class="sourceLineNo">452</span> * The name of the microservice jar with a <js>".cfg"</js> suffix (e.g.<a name="line.452"></a>
-<span class="sourceLineNo">453</span> * <js>"mymicroservice.jar"</js>-&gt;<js>"mymicroservice.cfg"</js>).<a name="line.453"></a>
-<span class="sourceLineNo">454</span> * </ol><a name="line.454"></a>
-<span class="sourceLineNo">455</span> *<a name="line.455"></a>
-<span class="sourceLineNo">456</span> * <p><a name="line.456"></a>
-<span class="sourceLineNo">457</span> * If all methods for locating the config fail, then this method returns an empty config.<a name="line.457"></a>
-<span class="sourceLineNo">458</span> *<a name="line.458"></a>
-<span class="sourceLineNo">459</span> * <p><a name="line.459"></a>
-<span class="sourceLineNo">460</span> * Subclasses can set their own config file by using the following methods:<a name="line.460"></a>
-<span class="sourceLineNo">461</span> * <ul class='doctree'><a name="line.461"></a>
-<span class="sourceLineNo">462</span> * <li class='jm'>{@link MicroserviceBuilder#configStore(ConfigStore)}<a name="line.462"></a>
-<span class="sourceLineNo">463</span> * <li class='jm'>{@link MicroserviceBuilder#configName(String)}<a name="line.463"></a>
-<span class="sourceLineNo">464</span> * </ul><a name="line.464"></a>
-<span class="sourceLineNo">465</span> *<a name="line.465"></a>
-<span class="sourceLineNo">466</span> * <p><a name="line.466"></a>
-<span class="sourceLineNo">467</span> * String variables are automatically resolved using the variable resolver returned by {@link #getVarResolver()}.<a name="line.467"></a>
-<span class="sourceLineNo">468</span> *<a name="line.468"></a>
-<span class="sourceLineNo">469</span> * <p><a name="line.469"></a>
-<span class="sourceLineNo">470</span> * This method can be called from the class constructor.<a name="line.470"></a>
-<span class="sourceLineNo">471</span> *<a name="line.471"></a>
-<span class="sourceLineNo">472</span> * <h5 class='section'>Example:</h5><a name="line.472"></a>
-<span class="sourceLineNo">473</span> * <p class='bcode w800'><a name="line.473"></a>
-<span class="sourceLineNo">474</span> * <cc>#--------------------------</cc><a name="line.474"></a>
-<span class="sourceLineNo">475</span> * <cc># My section</cc><a name="line.475"></a>
-<span class="sourceLineNo">476</span> * <cc>#--------------------------</cc><a name="line.476"></a>
-<span class="sourceLineNo">477</span> * <cs>[MySection]</cs><a name="line.477"></a>
-<span class="sourceLineNo">478</span> *<a name="line.478"></a>
-<span class="sourceLineNo">479</span> * <cc># An integer</cc><a name="line.479"></a>
-<span class="sourceLineNo">480</span> * <ck>anInt</ck> = 1<a name="line.480"></a>
-<span class="sourceLineNo">481</span> *<a name="line.481"></a>
-<span class="sourceLineNo">482</span> * <cc># A boolean</cc><a name="line.482"></a>
-<span class="sourceLineNo">483</span> * <ck>aBoolean</ck> = true<a name="line.483"></a>
-<span class="sourceLineNo">484</span> *<a name="line.484"></a>
-<span class="sourceLineNo">485</span> * <cc># An int array</cc><a name="line.485"></a>
-<span class="sourceLineNo">486</span> * <ck>anIntArray</ck> = 1,2,3<a name="line.486"></a>
-<span class="sourceLineNo">487</span> *<a name="line.487"></a>
-<span class="sourceLineNo">488</span> * <cc># A POJO that can be converted from a String</cc><a name="line.488"></a>
-<span class="sourceLineNo">489</span> * <ck>aURL</ck> = http://foo<a name="line.489"></a>
-<span class="sourceLineNo">490</span> *<a name="line.490"></a>
-<span class="sourceLineNo">491</span> * <cc># A POJO that can be converted from JSON</cc><a name="line.491"></a>
-<span class="sourceLineNo">492</span> * <ck>aBean</ck> = {foo:'bar',baz:123}<a name="line.492"></a>
-<span class="sourceLineNo">493</span> *<a name="line.493"></a>
-<span class="sourceLineNo">494</span> * <cc># A system property</cc><a name="line.494"></a>
-<span class="sourceLineNo">495</span> * <ck>locale</ck> = $S{java.locale, en_US}<a name="line.495"></a>
-<span class="sourceLineNo">496</span> *<a name="line.496"></a>
-<span class="sourceLineNo">497</span> * <cc># An environment variable</cc><a name="line.497"></a>
-<span class="sourceLineNo">498</span> * <ck>path</ck> = $E{PATH, unknown}<a name="line.498"></a>
-<span class="sourceLineNo">499</span> *<a name="line.499"></a>
-<span class="sourceLineNo">500</span> * <cc># A manifest file entry</cc><a name="line.500"></a>
-<span class="sourceLineNo">501</span> * <ck>mainClass</ck> = $MF{Main-Class}<a name="line.501"></a>
-<span class="sourceLineNo">502</span> *<a name="line.502"></a>
-<span class="sourceLineNo">503</span> * <cc># Another value in this config file</cc><a name="line.503"></a>
-<span class="sourceLineNo">504</span> * <ck>sameAsAnInt</ck> = $C{MySection/anInt}<a name="line.504"></a>
-<span class="sourceLineNo">505</span> *<a name="line.505"></a>
-<span class="sourceLineNo">506</span> * <cc># A command-line argument in the form "myarg=foo"</cc><a name="line.506"></a>
-<span class="sourceLineNo">507</span> * <ck>myArg</ck> = $A{myarg}<a name="line.507"></a>
-<span class="sourceLineNo">508</span> *<a name="line.508"></a>
-<span class="sourceLineNo">509</span> * <cc># The first command-line argument</cc><a name="line.509"></a>
-<span class="sourceLineNo">510</span> * <ck>firstArg</ck> = $A{0}<a name="line.510"></a>
-<span class="sourceLineNo">511</span> *<a name="line.511"></a>
-<span class="sourceLineNo">512</span> * <cc># Look for system property, or env var if that doesn't exist, or command-line arg if that doesn't exist.</cc><a name="line.512"></a>
-<span class="sourceLineNo">513</span> * <ck>nested</ck> = $S{mySystemProperty,$E{MY_ENV_VAR,$A{0}}}<a name="line.513"></a>
-<span class="sourceLineNo">514</span> *<a name="line.514"></a>
-<span class="sourceLineNo">515</span> * <cc># A POJO with embedded variables</cc><a name="line.515"></a>
-<span class="sourceLineNo">516</span> * <ck>aBean2</ck> = {foo:'$A{0}',baz:$C{MySection/anInt}}<a name="line.516"></a>
-<span class="sourceLineNo">517</span> * </p><a name="line.517"></a>
-<span class="sourceLineNo">518</span> *<a name="line.518"></a>
-<span class="sourceLineNo">519</span> * <p class='bcode w800'><a name="line.519"></a>
-<span class="sourceLineNo">520</span> * <jc>// Java code for accessing config entries above.</jc><a name="line.520"></a>
-<span class="sourceLineNo">521</span> * Config cf = getConfig();<a name="line.521"></a>
-<span class="sourceLineNo">522</span> *<a name="line.522"></a>
-<span class="sourceLineNo">523</span> * <jk>int</jk> anInt = cf.getInt(<js>"MySection/anInt"</js>);<a name="line.523"></a>
-<span class="sourceLineNo">524</span> * <jk>boolean</jk> aBoolean = cf.getBoolean(<js>"MySection/aBoolean"</js>);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> * <jk>int</jk>[] anIntArray = cf.getObject(<jk>int</jk>[].<jk>class</jk>, <js>"MySection/anIntArray"</js>);<a name="line.525"></a>
-<span class="sourceLineNo">526</span> * URL aURL = cf.getObject(URL.<jk>class</jk>, <js>"MySection/aURL"</js>);<a name="line.526"></a>
-<span class="sourceLineNo">527</span> * MyBean aBean = cf.getObject(MyBean.<jk>class</jk>, <js>"MySection/aBean"</js>);<a name="line.527"></a>
-<span class="sourceLineNo">528</span> * Locale locale = cf.getObject(Locale.<jk>class</jk>, <js>"MySection/locale"</js>);<a name="line.528"></a>
-<span class="sourceLineNo">529</span> * String path = cf.getString(<js>"MySection/path"</js>);<a name="line.529"></a>
-<span class="sourceLineNo">530</span> * String mainClass = cf.getString(<js>"MySection/mainClass"</js>);<a name="line.530"></a>
-<span class="sourceLineNo">531</span> * <jk>int</jk> sameAsAnInt = cf.getInt(<js>"MySection/sameAsAnInt"</js>);<a name="line.531"></a>
-<span class="sourceLineNo">532</span> * String myArg = cf.getString(<js>"MySection/myArg"</js>);<a name="line.532"></a>
-<span class="sourceLineNo">533</span> * String firstArg = cf.getString(<js>"MySection/firstArg"</js>);<a name="line.533"></a>
-<span class="sourceLineNo">534</span> * </p><a name="line.534"></a>
-<span class="sourceLineNo">535</span> *<a name="line.535"></a>
-<span class="sourceLineNo">536</span> * @return The config file for this application, or <jk>null</jk> if no config file is configured.<a name="line.536"></a>
-<span class="sourceLineNo">537</span> */<a name="line.537"></a>
-<span class="sourceLineNo">538</span> public Config getConfig() {<a name="line.538"></a>
-<span class="sourceLineNo">539</span> return config;<a name="line.539"></a>
-<span class="sourceLineNo">540</span> }<a name="line.540"></a>
-<span class="sourceLineNo">541</span><a name="line.541"></a>
-<span class="sourceLineNo">542</span> /**<a name="line.542"></a>
-<span class="sourceLineNo">543</span> * Returns the main jar manifest file contents as a simple {@link ObjectMap}.<a name="line.543"></a>
-<span class="sourceLineNo">544</span> *<a name="line.544"></a>
-<span class="sourceLineNo">545</span> * <p><a name="line.545"></a>
-<span class="sourceLineNo">546</span> * This map consists of the contents of {@link Manifest#getMainAttributes()} with the keys and entries converted to<a name="line.546"></a>
-<span class="sourceLineNo">547</span> * simple strings.<a name="line.547"></a>
-<span class="sourceLineNo">548</span> * <p><a name="line.548"></a>
-<span class="sourceLineNo">549</span> * This method can be called from the class constructor.<a name="line.549"></a>
-<span class="sourceLineNo">550</span> *<a name="line.550"></a>
-<span class="sourceLineNo">551</span> * <h5 class='section'>Example:</h5><a name="line.551"></a>
-<span class="sourceLineNo">552</span> * <p class='bcode w800'><a name="line.552"></a>
-<span class="sourceLineNo">553</span> * <jc>// Get Main-Class from manifest file.</jc><a name="line.553"></a>
-<span class="sourceLineNo">554</span> * String mainClass = Microservice.<jsm>getManifest</jsm>().getString(<js>"Main-Class"</js>, <js>"unknown"</js>);<a name="line.554"></a>
-<span class="sourceLineNo">555</span> *<a name="line.555"></a>
-<span class="sourceLineNo">556</span> * <jc>// Get Rest-Resources from manifest file.</jc><a name="line.556"></a>
-<span class="sourceLineNo">557</span> * String[] restResources = Microservice.<jsm>getManifest</jsm>().getStringArray(<js>"Rest-Resources"</js>);<a name="line.557"></a>
-<span class="sourceLineNo">558</span> * </p><a name="line.558"></a>
-<span class="sourceLineNo">559</span> *<a name="line.559"></a>
-<span class="sourceLineNo">560</span> * @return The manifest file from the main jar, or <jk>null</jk> if the manifest file could not be retrieved.<a name="line.560"></a>
-<span class="sourceLineNo">561</span> */<a name="line.561"></a>
-<span class="sourceLineNo">562</span> public ManifestFile getManifest() {<a name="line.562"></a>
-<span class="sourceLineNo">563</span> return manifest;<a name="line.563"></a>
-<span class="sourceLineNo">564</span> }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span> /**<a name="line.566"></a>
-<span class="sourceLineNo">567</span> * Returns the variable resolver for resolving variables in strings and files.<a name="line.567"></a>
-<span class="sourceLineNo">568</span> *<a name="line.568"></a>
-<span class="sourceLineNo">569</span> * <p><a name="line.569"></a>
-<span class="sourceLineNo">570</span> * Variables can be controlled by the following methods:<a name="line.570"></a>
-<span class="sourceLineNo">571</span> * <ul class='doctree'><a name="line.571"></a>
-<span class="sourceLineNo">572</span> * <li class='jm'>{@link MicroserviceBuilder#vars(Class...)}<a name="line.572"></a>
-<span class="sourceLineNo">573</span> * <li class='jm'>{@link MicroserviceBuilder#varContext(String, Object)}<a name="line.573"></a>
-<span class="sourceLineNo">574</span> * </ul><a name="line.574"></a>
-<span class="sourceLineNo">575</span> *<a name="line.575"></a>
-<span class="sourceLineNo">576</span> * @return The VarResolver used by this Microservice, or <jk>null</jk> if it was never created.<a name="line.576"></a>
-<span class="sourceLineNo">577</span> */<a name="line.577"></a>
-<span class="sourceLineNo">578</span> public VarResolver getVarResolver() {<a name="line.578"></a>
-<span class="sourceLineNo">579</span> return varResolver;<a name="line.579"></a>
-<span class="sourceLineNo">580</span> }<a name="line.580"></a>
-<span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span> /**<a name="line.582"></a>
-<span class="sourceLineNo">583</span> * Returns the logger for this microservice.<a name="line.583"></a>
-<span class="sourceLineNo">584</span> *<a name="line.584"></a>
-<span class="sourceLineNo">585</span> * @return The logger for this microservice.<a name="line.585"></a>
-<span class="sourceLineNo">586</span> */<a name="line.586"></a>
-<span class="sourceLineNo">587</span> public Logger getLogger() {<a name="line.587"></a>
-<span class="sourceLineNo">588</span> return logger;<a name="line.588"></a>
-<span class="sourceLineNo">589</span> }<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span> /**<a name="line.591"></a>
-<span class="sourceLineNo">592</span> * Executes a console command.<a name="line.592"></a>
-<span class="sourceLineNo">593</span> *<a name="line.593"></a>
-<span class="sourceLineNo">594</span> * @param args<a name="line.594"></a>
-<span class="sourceLineNo">595</span> * The command arguments.<a name="line.595"></a>
-<span class="sourceLineNo">596</span> * <br>The first entry in the arguments is always the command name.<a name="line.596"></a>
-<span class="sourceLineNo">597</span> * @param in Console input.<a name="line.597"></a>
-<span class="sourceLineNo">598</span> * @param out Console output.<a name="line.598"></a>
-<span class="sourceLineNo">599</span> * @return <jk>true</jk> if the command returned <jk>true</jk> meaning the console thread should exit.<a name="line.599"></a>
-<span class="sourceLineNo">600</span> */<a name="line.600"></a>
-<span class="sourceLineNo">601</span> public boolean executeCommand(Args args, Scanner in, PrintWriter out) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span> ConsoleCommand cc = consoleCommandMap.get(args.getArg(0));<a name="line.602"></a>
-<span class="sourceLineNo">603</span> if (cc == null) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span> out.println(messages.getString("UnknownCommand"));<a name="line.604"></a>
-<span class="sourceLineNo">605</span> } else {<a name="line.605"></a>
-<span class="sourceLineNo">606</span> try {<a name="line.606"></a>
-<span class="sourceLineNo">607</span> return cc.execute(in, out, args);<a name="line.607"></a>
-<span class="sourceLineNo">608</span> } catch (Exception e) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span> e.printStackTrace(out);<a name="line.609"></a>
-<span class="sourceLineNo">610</span> }<a name="line.610"></a>
-<span class="sourceLineNo">611</span> }<a name="line.611"></a>
-<span class="sourceLineNo">612</span> return false;<a name="line.612"></a>
-<span class="sourceLineNo">613</span> }<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span> /**<a name="line.615"></a>
-<span class="sourceLineNo">616</span> * Convenience method for executing a console command directly.<a name="line.616"></a>
-<span class="sourceLineNo">617</span> *<a name="line.617"></a>
-<span class="sourceLineNo">618</span> * <p><a name="line.618"></a>
-<span class="sourceLineNo">619</span> * Allows you to execute a console command outside the console by simulating input and output.<a name="line.619"></a>
-<span class="sourceLineNo">620</span> *<a name="line.620"></a>
-<span class="sourceLineNo">621</span> * @param command The command name to execute.<a name="line.621"></a>
-<span class="sourceLineNo">622</span> * @param input Optional input to the command. Can be <jk>null</jk>.<a name="line.622"></a>
-<span class="sourceLineNo">623</span> * @param args Optional command arguments to pass to the command.<a name="line.623"></a>
-<span class="sourceLineNo">624</span> * @return The command output.<a name="line.624"></a>
-<span class="sourceLineNo">625</span> */<a name="line.625"></a>
-<span class="sourceLineNo">626</span> public String executeCommand(String command, String input, Object...args) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span> StringWriter sw = new StringWriter();<a name="line.627"></a>
-<span class="sourceLineNo">628</span> List<String> l = new ArrayList<>();<a name="line.628"></a>
-<span class="sourceLineNo">629</span> l.add(command);<a name="line.629"></a>
-<span class="sourceLineNo">630</span> for (Object a : args)<a name="line.630"></a>
-<span class="sourceLineNo">631</span> l.add(asString(a));<a name="line.631"></a>
-<span class="sourceLineNo">632</span> Args args2 = new Args(l.toArray(new String[l.size()]));<a name="line.632"></a>
-<span class="sourceLineNo">633</span> try (Scanner in = new Scanner(input); PrintWriter out = new PrintWriter(sw)) {<a name="line.633"></a>
-<span class="sourceLineNo">634</span> executeCommand(args2, in, out);<a name="line.634"></a>
-<span class="sourceLineNo">635</span> }<a name="line.635"></a>
-<span class="sourceLineNo">636</span> return sw.toString();<a name="line.636"></a>
-<span class="sourceLineNo">637</span> }<a name="line.637"></a>
-<span class="sourceLineNo">638</span><a name="line.638"></a>
-<span class="sourceLineNo">639</span> /**<a name="line.639"></a>
-<span class="sourceLineNo">640</span> * Joins the application with the current thread.<a name="line.640"></a>
-<span class="sourceLineNo">641</span> *<a name="line.641"></a>
-<span class="sourceLineNo">642</span> * <p><a name="line.642"></a>
-<span class="sourceLineNo">643</span> * Default implementation is a no-op.<a name="line.643"></a>
-<span class="sourceLineNo">644</span> *<a name="line.644"></a>
-<span class="sourceLineNo">645</span> * @return This object (for method chaining).<a name="line.645"></a>
-<span class="sourceLineNo">646</span> * @throws Exception<a name="line.646"></a>
-<span class="sourceLineNo">647</span> */<a name="line.647"></a>
-<span class="sourceLineNo">648</span> public Microservice join() throws Exception {<a name="line.648"></a>
-<span class="sourceLineNo">649</span> return this;<a name="line.649"></a>
-<span class="sourceLineNo">650</span> }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span> /**<a name="line.652"></a>
-<span class="sourceLineNo">653</span> * Stop this application.<a name="line.653"></a>
-<span class="sourceLineNo">654</span> *<a name="line.654"></a>
-<span class="sourceLineNo">655</span> * <p><a name="line.655"></a>
-<span class="sourceLineNo">656</span> * Overridden methods MUST call this method LAST so that the {@link MicroserviceListener#onStop(Microservice)} method is called.<a name="line.656"></a>
-<span class="sourceLineNo">657</span> *<a name="line.657"></a>
-<span class="sourceLineNo">658</span> * @return This object (for method chaining).<a name="line.658"></a>
-<span class="sourceLineNo">659</span> * @throws Exception<a name="line.659"></a>
-<span class="sourceLineNo">660</span> */<a name="line.660"></a>
-<span class="sourceLineNo">661</span> public Microservice stop() throws Exception {<a name="line.661"></a>
-<span class="sourceLineNo">662</span> listener.onStop(this);<a name="line.662"></a>
-<span class="sourceLineNo">663</span> return this;<a name="line.663"></a>
-<span class="sourceLineNo">664</span> }<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span> /**<a name="line.666"></a>
-<span class="sourceLineNo">667</span> * Stops the console (if it's started) and calls {@link System#exit(int)}.<a name="line.667"></a>
-<span class="sourceLineNo">668</span> *<a name="line.668"></a>
-<span class="sourceLineNo">669</span> * @throws Exception<a name="line.669"></a>
-<span class="sourceLineNo">670</span> */<a name="line.670"></a>
-<span class="sourceLineNo">671</span> public void exit() throws Exception {<a name="line.671"></a>
-<span class="sourceLineNo">672</span> try {<a name="line.672"></a>
-<span class="sourceLineNo">673</span> stopConsole();<a name="line.673"></a>
-<span class="sourceLineNo">674</span> } catch (Exception e) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span> e.printStackTrace();<a name="line.675"></a>
-<span class="sourceLineNo">676</span> }<a name="line.676"></a>
-<span class="sourceLineNo">677</span> System.exit(0);<a name="line.677"></a>
-<span class="sourceLineNo">678</span> }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span> /**<a name="line.680"></a>
-<span class="sourceLineNo">681</span> * Kill the JVM by calling <code>System.exit(2);</code>.<a name="line.681"></a>
-<span class="sourceLineNo">682</span> */<a name="line.682"></a>
-<span class="sourceLineNo">683</span> public void kill() {<a name="line.683"></a>
-<span class="sourceLineNo">684</span> // This triggers the shutdown hook.<a name="line.684"></a>
-<span class="sourceLineNo">685</span> System.exit(2);<a name="line.685"></a>
-<span class="sourceLineNo">686</span> }<a name="line.686"></a>
+<span class="sourceLineNo">173</span> URL url = getClass().getResource("META-INF/MANIFEST.MF");<a name="line.173"></a>
+<span class="sourceLineNo">174</span> if (url != null) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span> try {<a name="line.175"></a>
+<span class="sourceLineNo">176</span> m.read(url.openStream());<a name="line.176"></a>
+<span class="sourceLineNo">177</span> } catch (IOException e) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span> throw new IOException("Problem detected in MANIFEST.MF. Contents below:\n " + read(url.openStream()), e);<a name="line.178"></a>
+<span class="sourceLineNo">179</span> }<a name="line.179"></a>
+<span class="sourceLineNo">180</span> }<a name="line.180"></a>
+<span class="sourceLineNo">181</span> }<a name="line.181"></a>
+<span class="sourceLineNo">182</span> manifest = new ManifestFile(m);<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> ManifestFileVar.init(manifest);<a name="line.184"></a>
+<span class="sourceLineNo">185</span> this.manifest = manifest;<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span> // --------------------------------------------------------------------------------<a name="line.187"></a>
+<span class="sourceLineNo">188</span> // Try to resolve the configuration if not specified.<a name="line.188"></a>
+<span class="sourceLineNo">189</span> // --------------------------------------------------------------------------------<a name="line.189"></a>
+<span class="sourceLineNo">190</span> Config config = builder.config;<a name="line.190"></a>
+<span class="sourceLineNo">191</span> ConfigBuilder configBuilder = builder.configBuilder.varResolver(builder.varResolverBuilder.build()).store(ConfigMemoryStore.DEFAULT);<a name="line.191"></a>
+<span class="sourceLineNo">192</span> if (config == null) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span> ConfigStore store = builder.configStore;<a name="line.193"></a>
+<span class="sourceLineNo">194</span> for (String name : getCandidateConfigNames()) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span> if (store != null) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span> if (store.exists(name)) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span> configBuilder.store(store).name(name);<a name="line.197"></a>
+<span class="sourceLineNo">198</span> break;<a name="line.198"></a>
+<span class="sourceLineNo">199</span> }<a name="line.199"></a>
+<span class="sourceLineNo">200</span> } else {<a name="line.200"></a>
+<span class="sourceLineNo">201</span> if (ConfigFileStore.DEFAULT.exists(name)) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span> configBuilder.store(ConfigFileStore.DEFAULT).name(name);<a name="line.202"></a>
+<span class="sourceLineNo">203</span> break;<a name="line.203"></a>
+<span class="sourceLineNo">204</span> }<a name="line.204"></a>
+<span class="sourceLineNo">205</span> if (ConfigClasspathStore.DEFAULT.exists(name)) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span> configBuilder.store(ConfigClasspathStore.DEFAULT).name(name);<a name="line.206"></a>
+<span class="sourceLineNo">207</span> break;<a name="line.207"></a>
+<span class="sourceLineNo">208</span> }<a name="line.208"></a>
+<span class="sourceLineNo">209</span> }<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span> config = configBuilder.build();<a name="line.211"></a>
+<span class="sourceLineNo">212</span> }<a name="line.212"></a>
+<span class="sourceLineNo">213</span> this.config = config;<a name="line.213"></a>
+<span class="sourceLineNo">214</span> Config.setSystemDefault(this.config);<a name="line.214"></a>
+<span class="sourceLineNo">215</span> this.config.addListener(this);<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span> //-------------------------------------------------------------------------------------------------------------<a name="line.217"></a>
+<span class="sourceLineNo">218</span> // Var resolver.<a name="line.218"></a>
+<span class="sourceLineNo">219</span> //-------------------------------------------------------------------------------------------------------------<a name="line.219"></a>
+<span class="sourceLineNo">220</span> VarResolverBuilder varResolverBuilder = builder.varResolverBuilder;<a name="line.220"></a>
+<span class="sourceLineNo">221</span> this.varResolver = varResolverBuilder.contextObject(ConfigVar.SESSION_config, config).build();<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span> // --------------------------------------------------------------------------------<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // Initialize console commands.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // --------------------------------------------------------------------------------<a name="line.225"></a>
+<span class="sourceLineNo">226</span> this.consoleEnabled = ObjectUtils.firstNonNull(builder.consoleEnabled, config.getBoolean("Console/enabled", false));<a name="line.226"></a>
+<span class="sourceLineNo">227</span> if (consoleEnabled) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span> Console c = System.console();<a name="line.228"></a>
+<span class="sourceLineNo">229</span> this.consoleReader = ObjectUtils.firstNonNull(builder.consoleReader, new Scanner(c == null ? new InputStreamReader(System.in) : c.reader()));<a name="line.229"></a>
+<span class="sourceLineNo">230</span> this.consoleWriter = ObjectUtils.firstNonNull(builder.consoleWriter, c == null ? new PrintWriter(System.out, true) : c.writer());<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span> for (ConsoleCommand cc : builder.consoleCommands) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> consoleCommandMap.put(cc.getName(), cc);<a name="line.233"></a>
+<span class="sourceLineNo">234</span> }<a name="line.234"></a>
+<span class="sourceLineNo">235</span> for (String s : config.getStringArray("Console/commands")) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span> ConsoleCommand cc;<a name="line.236"></a>
+<span class="sourceLineNo">237</span> try {<a name="line.237"></a>
+<span class="sourceLineNo">238</span> cc = (ConsoleCommand)Class.forName(s).newInstance();<a name="line.238"></a>
+<span class="sourceLineNo">239</span> consoleCommandMap.put(cc.getName(), cc);<a name="line.239"></a>
+<span class="sourceLineNo">240</span> } catch (Exception e) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span> getConsoleWriter().println("Could not create console command '"+s+"', " + e.getLocalizedMessage());<a name="line.241"></a>
+<span class="sourceLineNo">242</span> }<a name="line.242"></a>
+<span class="sourceLineNo">243</span> }<a name="line.243"></a>
+<span class="sourceLineNo">244</span> consoleThread = new Thread("ConsoleThread") {<a name="line.244"></a>
+<span class="sourceLineNo">245</span> @Override /* Thread */<a name="line.245"></a>
+<span class="sourceLineNo">246</span> public void run() {<a name="line.246"></a>
+<span class="sourceLineNo">247</span> Scanner in = getConsoleReader();<a name="line.247"></a>
+<span class="sourceLineNo">248</span> PrintWriter out = getConsoleWriter();<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span> out.println(messages.getString("ListOfAvailableCommands"));<a name="line.250"></a>
+<span class="sourceLineNo">251</span> for (ConsoleCommand cc : new TreeMap<>(getConsoleCommands()).values())<a name="line.251"></a>
+<span class="sourceLineNo">252</span> out.append("\t").append(cc.getName()).append(" -- ").append(cc.getInfo()).println();<a name="line.252"></a>
+<span class="sourceLineNo">253</span> out.println();<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> while (true) {<a name="line.255"></a>
+<span class="sourceLineNo">256</span> String line = null;<a name="line.256"></a>
+<span class="sourceLineNo">257</span> out.append("> ").flush();<a name="line.257"></a>
+<span class="sourceLineNo">258</span> line = in.nextLine();<a name="line.258"></a>
+<span class="sourceLineNo">259</span> Args args = new Args(line);<a name="line.259"></a>
+<span class="sourceLineNo">260</span> if (! args.isEmpty())<a name="line.260"></a>
+<span class="sourceLineNo">261</span> executeCommand(args, in, out);<a name="line.261"></a>
+<span class="sourceLineNo">262</span> }<a name="line.262"></a>
+<span class="sourceLineNo">263</span> }<a name="line.263"></a>
+<span class="sourceLineNo">264</span> };<a name="line.264"></a>
+<span class="sourceLineNo">265</span> consoleThread.setDaemon(true);<a name="line.265"></a>
+<span class="sourceLineNo">266</span> } else {<a name="line.266"></a>
+<span class="sourceLineNo">267</span> this.consoleReader = null;<a name="line.267"></a>
+<span class="sourceLineNo">268</span> this.consoleWriter = null;<a name="line.268"></a>
+<span class="sourceLineNo">269</span> this.consoleThread = null;<a name="line.269"></a>
+<span class="sourceLineNo">270</span> }<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span> //-------------------------------------------------------------------------------------------------------------<a name="line.272"></a>
+<span class="sourceLineNo">273</span> // Other.<a name="line.273"></a>
+<span class="sourceLineNo">274</span> //-------------------------------------------------------------------------------------------------------------<a name="line.274"></a>
+<span class="sourceLineNo">275</span> this.listener = builder.listener != null ? builder.listener : new BasicMicroserviceListener();<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span> init();<a name="line.277"></a>
+<span class="sourceLineNo">278</span> }<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span> private List<String> getCandidateConfigNames() {<a name="line.280"></a>
+<span class="sourceLineNo">281</span> Args args = getArgs();<a name="line.281"></a>
+<span class="sourceLineNo">282</span> if (getArgs().hasArg("configFile"))<a name="line.282"></a>
+<span class="sourceLineNo">283</span> return Collections.singletonList(args.getArg("configFile"));<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span> ManifestFile manifest = getManifest();<a name="line.285"></a>
+<span class="sourceLineNo">286</span> if (manifest.containsKey("Main-Config"))<a name="line.286"></a>
+<span class="sourceLineNo">287</span> return Collections.singletonList(manifest.getString("Main-Config"));<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span> return Config.getCandidateSystemDefaultConfigNames();<a name="line.289"></a>
+<span class="sourceLineNo">290</span> }<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.292"></a>
+<span class="sourceLineNo">293</span> // Abstract lifecycle methods.<a name="line.293"></a>
+<span class="sourceLineNo">294</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span> /**<a name="line.296"></a>
+<span class="sourceLineNo">297</span> * Initializes this microservice.<a name="line.297"></a>
+<span class="sourceLineNo">298</span> *<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * <p><a name="line.299"></a>
+<span class="sourceLineNo">300</span> * This method can be called whenever the microservice is not started.<a name="line.300"></a>
+<span class="sourceLineNo">301</span> *<a name="line.301"></a>
+<span class="sourceLineNo">302</span> * <p><a name="line.302"></a>
+<span class="sourceLineNo">303</span> * It will initialize (or reinitialize) the console commands, system properties, and logger.<a name="line.303"></a>
+<span class="sourceLineNo">304</span> *<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * @return This object (for method chaining).<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * @throws Exception<a name="line.306"></a>
+<span class="sourceLineNo">307</span> */<a name="line.307"></a>
+<span class="sourceLineNo">308</span> public synchronized Microservice init() throws Exception {<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span> // --------------------------------------------------------------------------------<a name="line.310"></a>
+<span class="sourceLineNo">311</span> // Set system properties.<a name="line.311"></a>
+<span class="sourceLineNo">312</span> // --------------------------------------------------------------------------------<a name="line.312"></a>
+<span class="sourceLineNo">313</span> Set<String> spKeys = config.getKeys("SystemProperties");<a name="line.313"></a>
+<span class="sourceLineNo">314</span> if (spKeys != null)<a name="line.314"></a>
+<span class="sourceLineNo">315</span> for (String key : spKeys)<a name="line.315"></a>
+<span class="sourceLineNo">316</span> System.setProperty(key, config.getString("SystemProperties/"+key));<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span> // --------------------------------------------------------------------------------<a name="line.318"></a>
+<span class="sourceLineNo">319</span> // Initialize logging.<a name="line.319"></a>
+<span class="sourceLineNo">320</span> // --------------------------------------------------------------------------------<a name="line.320"></a>
+<span class="sourceLineNo">321</span> this.logger = builder.logger;<a name="line.321"></a>
+<span class="sourceLineNo">322</span> LogConfig logConfig = builder.logConfig != null ? builder.logConfig : new LogConfig();<a name="line.322"></a>
+<span class="sourceLineNo">323</span> if (this.logger == null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span> LogManager.getLogManager().reset();<a name="line.324"></a>
+<span class="sourceLineNo">325</span> this.logger = Logger.getLogger("");<a name="line.325"></a>
+<span class="sourceLineNo">326</span> String logFile = firstNonNull(logConfig.logFile, config.getString("Logging/logFile"));<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span> if (isNotEmpty(logFile)) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span> String logDir = firstNonNull(logConfig.logDir, config.getString("Logging/logDir", "."));<a name="line.329"></a>
+<span class="sourceLineNo">330</span> mkdirs(new File(logDir), false);<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span> boolean append = firstNonNull(logConfig.append, config.getBoolean("Logging/append"));<a name="line.332"></a>
+<span class="sourceLineNo">333</span> int limit = firstNonNull(logConfig.limit, config.getInt("Logging/limit", 1024*1024));<a name="line.333"></a>
+<span class="sourceLineNo">334</span> int count = firstNonNull(logConfig.count, config.getInt("Logging/count", 1));<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span> FileHandler fh = new FileHandler(logDir + '/' + logFile, limit, count, append);<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span> Formatter f = logConfig.formatter;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> if (f == null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span> String format = config.getString("Logging/format", "[{date} {level}] {msg}%n");<a name="line.340"></a>
+<span class="sourceLineNo">341</span> String dateFormat = config.getString("Logging/dateFormat", "yyyy.MM.dd hh:mm:ss");<a name="line.341"></a>
+<span class="sourceLineNo">342</span> boolean useStackTraceHashes = config.getBoolean("Logging/useStackTraceHashes");<a name="line.342"></a>
+<span class="sourceLineNo">343</span> f = new LogEntryFormatter(format, dateFormat, useStackTraceHashes);<a name="line.343"></a>
+<span class="sourceLineNo">344</span> }<a name="line.344"></a>
+<span class="sourceLineNo">345</span> fh.setFormatter(f);<a name="line.345"></a>
+<span class="sourceLineNo">346</span> fh.setLevel(firstNonNull(logConfig.fileLevel, config.getObjectWithDefault("Logging/fileLevel", Level.INFO, Level.class)));<a name="line.346"></a>
+<span class="sourceLineNo">347</span> logger.addHandler(fh);<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span> ConsoleHandler ch = new ConsoleHandler();<a name="line.349"></a>
+<span class="sourceLineNo">350</span> ch.setLevel(firstNonNull(logConfig.consoleLevel, config.getObjectWithDefault("Logging/consoleLevel", Level.WARNING, Level.class)));<a name="line.350"></a>
+<span class="sourceLineNo">351</span> ch.setFormatter(f);<a name="line.351"></a>
+<span class="sourceLineNo">352</span> logger.addHandler(ch);<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span> }<a name="line.354"></a>
+<span class="sourceLineNo">355</span><a name="line.355"></a>
+<span class="sourceLineNo">356</span> ObjectMap loggerLevels = config.getObject("Logging/levels", ObjectMap.class);<a name="line.356"></a>
+<span class="sourceLineNo">357</span> if (loggerLevels != null)<a name="line.357"></a>
+<span class="sourceLineNo">358</span> for (String l : loggerLevels.keySet())<a name="line.358"></a>
+<span class="sourceLineNo">359</span> Logger.getLogger(l).setLevel(loggerLevels.get(l, Level.class));<a name="line.359"></a>
+<span class="sourceLineNo">360</span> for (String l : logConfig.levels.keySet())<a name="line.360"></a>
+<span class="sourceLineNo">361</span> Logger.getLogger(l).setLevel(logConfig.levels.get(l));<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span> return this;<a name="line.363"></a>
+<span class="sourceLineNo">364</span> }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span> /**<a name="line.366"></a>
+<span class="sourceLineNo">367</span> * Start this application.<a name="line.367"></a>
+<span class="sourceLineNo">368</span> *<a name="line.368"></a>
+<span class="sourceLineNo">369</span> * <p><a name="line.369"></a>
+<span class="sourceLineNo">370</span> * Overridden methods MUST call this method FIRST so that the {@link MicroserviceListener#onStart(Microservice)} method is called.<a name="line.370"></a>
+<span class="sourceLineNo">371</span> *<a name="line.371"></a>
+<span class="sourceLineNo">372</span> * @return This object (for method chaining).<a name="line.372"></a>
+<span class="sourceLineNo">373</span> * @throws Exception<a name="line.373"></a>
+<span class="sourceLineNo">374</span> */<a name="line.374"></a>
+<span class="sourceLineNo">375</span> public synchronized Microservice start() throws Exception {<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span> if (config.getName() == null)<a name="line.377"></a>
+<span class="sourceLineNo">378</span> err(messages, "RunningClassWithoutConfig", getClass().getSimpleName());<a name="line.378"></a>
+<span class="sourceLineNo">379</span> else<a name="line.379"></a>
+<span class="sourceLineNo">380</span> out(messages, "RunningClassWithConfig", getClass().getSimpleName(), config.getName());<a name="line.380"></a>
+<span class="sourceLineNo">381</span><a name="line.381"></a>
+<span class="sourceLineNo">382</span> Runtime.getRuntime().addShutdownHook(<a name="line.382"></a>
+<span class="sourceLineNo">383</span> new Thread("ShutdownHookThread") {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> @Override /* Thread */<a name="line.384"></a>
+<span class="sourceLineNo">385</span> public void run() {<a name="line.385"></a>
+<span class="sourceLineNo">386</span> try {<a name="line.386"></a>
+<span class="sourceLineNo">387</span> Microservice.this.stop();<a name="line.387"></a>
+<span class="sourceLineNo">388</span> Microservice.this.stopConsole();<a name="line.388"></a>
+<span class="sourceLineNo">389</span> } catch (Exception e) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> e.printStackTrace();<a name="line.390"></a>
+<span class="sourceLineNo">391</span> }<a name="line.391"></a>
+<span class="sourceLineNo">392</span> }<a name="line.392"></a>
+<span class="sourceLineNo">393</span> }<a name="line.393"></a>
+<span class="sourceLineNo">394</span> );<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span> listener.onStart(this);<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span> return this;<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> /**<a name="line.401"></a>
+<span class="sourceLineNo">402</span> * Starts the console thread for this microservice.<a name="line.402"></a>
+<span class="sourceLineNo">403</span> *<a name="line.403"></a>
+<span class="sourceLineNo">404</span> * @return This object (for method chaining).<a name="line.404"></a>
+<span class="sourceLineNo">405</span> * @throws Exception<a name="line.405"></a>
+<span class="sourceLineNo">406</span> */<a name="line.406"></a>
+<span class="sourceLineNo">407</span> public synchronized Microservice startConsole() throws Exception {<a name="line.407"></a>
+<span class="sourceLineNo">408</span> if (consoleThread != null && ! consoleThread.isAlive())<a name="line.408"></a>
+<span class="sourceLineNo">409</span> consoleThread.start();<a name="line.409"></a>
+<span class="sourceLineNo">410</span> return this;<a name="line.410"></a>
+<span class="sourceLineNo">411</span> }<a name="line.411"></a>
+<span class="sourceLineNo">412</span><a name="line.412"></a>
+<span class="sourceLineNo">413</span> /**<a name="line.413"></a>
+<span class="sourceLineNo">414</span> * Stops the console thread for this microservice.<a name="line.414"></a>
+<span class="sourceLineNo">415</span> *<a name="line.415"></a>
+<span class="sourceLineNo">416</span> * @return This object (for method chaining).<a name="line.416"></a>
+<span class="sourceLineNo">417</span> * @throws Exception<a name="line.417"></a>
+<span class="sourceLineNo">418</span> */<a name="line.418"></a>
+<span class="sourceLineNo">419</span> public synchronized Microservice stopConsole() throws Exception {<a name="line.419"></a>
+<span class="sourceLineNo">420</span> if (consoleThread != null && consoleThread.isAlive())<a name="line.420"></a>
+<span class="sourceLineNo">421</span> consoleThread.interrupt();<a name="line.421"></a>
+<span class="sourceLineNo">422</span> return this;<a name="line.422"></a>
+<span class="sourceLineNo">423</span> }<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span> /**<a name="line.425"></a>
+<span class="sourceLineNo">426</span> * Returns the command-line arguments passed into the application.<a name="line.426"></a>
+<span class="sourceLineNo">427</span> *<a name="line.427"></a>
+<span class="sourceLineNo">428</span> * <p><a name="line.428"></a>
+<span class="sourceLineNo">429</span> * This method can be called from the class constructor.<a name="line.429"></a>
+<span class="sourceLineNo">430</span> *<a name="line.430"></a>
+<span class="sourceLineNo">431</span> * <p><a name="line.431"></a>
+<span class="sourceLineNo">432</span> * See {@link Args} for details on using this method.<a name="line.432"></a>
+<span class="sourceLineNo">433</span> *<a name="line.433"></a>
+<span class="sourceLineNo">434</span> * @return The command-line arguments passed into the application.<a name="line.434"></a>
+<span class="sourceLineNo">435</span> */<a name="line.435"></a>
+<span class="sourceLineNo">436</span> public Args getArgs() {<a name="line.436"></a>
+<span class="sourceLineNo">437</span> return args;<a name="line.437"></a>
+<span class="sourceLineNo">438</span> }<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span> /**<a name="line.440"></a>
+<span class="sourceLineNo">441</span> * Returns the external INI-style configuration file that can be used to configure your microservice.<a name="line.441"></a>
+<span class="sourceLineNo">442</span> *<a name="line.442"></a>
+<span class="sourceLineNo">443</span> * <p><a name="line.443"></a>
+<span class="sourceLineNo">444</span> * The config location is determined in the following order:<a name="line.444"></a>
+<span class="sourceLineNo">445</span> * <ol class='spaced-list'><a name="line.445"></a>
+<span class="sourceLineNo">446</span> * <li><a name="line.446"></a>
+<span class="sourceLineNo">447</span> * The first argument passed to the microservice jar.<a name="line.447"></a>
+<span class="sourceLineNo">448</span> * <li><a name="line.448"></a>
+<span class="sourceLineNo">449</span> * The <code>Main-Config</code> entry in the microservice jar manifest file.<a name="line.449"></a>
+<span class="sourceLineNo">450</span> * <li><a name="line.450"></a>
+<span class="sourceLineNo">451</span> * The name of the microservice jar with a <js>".cfg"</js> suffix (e.g.<a name="line.451"></a>
+<span class="sourceLineNo">452</span> * <js>"mymicroservice.jar"</js>-&gt;<js>"mymicroservice.cfg"</js>).<a name="line.452"></a>
+<span class="sourceLineNo">453</span> * </ol><a name="line.453"></a>
+<span class="sourceLineNo">454</span> *<a name="line.454"></a>
+<span class="sourceLineNo">455</span> * <p><a name="line.455"></a>
+<span class="sourceLineNo">456</span> * If all methods for locating the config fail, then this method returns an empty config.<a name="line.456"></a>
+<span class="sourceLineNo">457</span> *<a name="line.457"></a>
+<span class="sourceLineNo">458</span> * <p><a name="line.458"></a>
+<span class="sourceLineNo">459</span> * Subclasses can set their own config file by using the following methods:<a name="line.459"></a>
+<span class="sourceLineNo">460</span> * <ul class='doctree'><a name="line.460"></a>
+<span class="sourceLineNo">461</span> * <li class='jm'>{@link MicroserviceBuilder#configStore(ConfigStore)}<a name="line.461"></a>
+<span class="sourceLineNo">462</span> * <li class='jm'>{@link MicroserviceBuilder#configName(String)}<a name="line.462"></a>
+<span class="sourceLineNo">463</span> * </ul><a name="line.463"></a>
+<span class="sourceLineNo">464</span> *<a name="line.464"></a>
+<span class="sourceLineNo">465</span> * <p><a name="line.465"></a>
+<span class="sourceLineNo">466</span> * String variables are automatically resolved using the variable resolver returned by {@link #getVarResolver()}.<a name="line.466"></a>
+<span class="sourceLineNo">467</span> *<a name="line.467"></a>
+<span class="sourceLineNo">468</span> * <p><a name="line.468"></a>
+<span class="sourceLineNo">469</span> * This method can be called from the class constructor.<a name="line.469"></a>
+<span class="sourceLineNo">470</span> *<a name="line.470"></a>
+<span class="sourceLineNo">471</span> * <h5 class='section'>Example:</h5><a name="line.471"></a>
+<span class="sourceLineNo">472</span> * <p class='bcode w800'><a name="line.472"></a>
+<span class="sourceLineNo">473</span> * <cc>#--------------------------</cc><a name="line.473"></a>
+<span class="sourceLineNo">474</span> * <cc># My section</cc><a name="line.474"></a>
+<span class="sourceLineNo">475</span> * <cc>#--------------------------</cc><a name="line.475"></a>
+<span class="sourceLineNo">476</span> * <cs>[MySection]</cs><a name="line.476"></a>
+<span class="sourceLineNo">477</span> *<a name="line.477"></a>
+<span class="sourceLineNo">478</span> * <cc># An integer</cc><a name="line.478"></a>
+<span class="sourceLineNo">479</span> * <ck>anInt</ck> = 1<a name="line.479"></a>
+<span class="sourceLineNo">480</span> *<a name="line.480"></a>
+<span class="sourceLineNo">481</span> * <cc># A boolean</cc><a name="line.481"></a>
+<span class="sourceLineNo">482</span> * <ck>aBoolean</ck> = true<a name="line.482"></a>
+<span class="sourceLineNo">483</span> *<a name="line.483"></a>
+<span class="sourceLineNo">484</span> * <cc># An int array</cc><a name="line.484"></a>
+<span class="sourceLineNo">485</span> * <ck>anIntArray</ck> = 1,2,3<a name="line.485"></a>
+<span class="sourceLineNo">486</span> *<a name="line.486"></a>
+<span class="sourceLineNo">487</span> * <cc># A POJO that can be converted from a String</cc><a name="line.487"></a>
+<span class="sourceLineNo">488</span> * <ck>aURL</ck> = http://foo<a name="line.488"></a>
+<span class="sourceLineNo">489</span> *<a name="line.489"></a>
+<span class="sourceLineNo">490</span> * <cc># A POJO that can be converted from JSON</cc><a name="line.490"></a>
+<span class="sourceLineNo">491</span> * <ck>aBean</ck> = {foo:'bar',baz:123}<a name="line.491"></a>
+<span class="sourceLineNo">492</span> *<a name="line.492"></a>
+<span class="sourceLineNo">493</span> * <cc># A system property</cc><a name="line.493"></a>
+<span class="sourceLineNo">494</span> * <ck>locale</ck> = $S{java.locale, en_US}<a name="line.494"></a>
+<span class="sourceLineNo">495</span> *<a name="line.495"></a>
+<span class="sourceLineNo">496</span> * <cc># An environment variable</cc><a name="line.496"></a>
+<span class="sourceLineNo">497</span> * <ck>path</ck> = $E{PATH, unknown}<a name="line.497"></a>
+<span class="sourceLineNo">498</span> *<a name="line.498"></a>
+<span class="sourceLineNo">499</span> * <cc># A manifest file entry</cc><a name="line.499"></a>
+<span class="sourceLineNo">500</span> * <ck>mainClass</ck> = $MF{Main-Class}<a name="line.500"></a>
+<span class="sourceLineNo">501</span> *<a name="line.501"></a>
+<span class="sourceLineNo">502</span> * <cc># Another value in this config file</cc><a name="line.502"></a>
+<span class="sourceLineNo">503</span> * <ck>sameAsAnInt</ck> = $C{MySection/anInt}<a name="line.503"></a>
+<span class="sourceLineNo">504</span> *<a name="line.504"></a>
+<span class="sourceLineNo">505</span> * <cc># A command-line argument in the form "myarg=foo"</cc><a name="line.505"></a>
+<span class="sourceLineNo">506</span> * <ck>myArg</ck> = $A{myarg}<a name="line.506"></a>
+<span class="sourceLineNo">507</span> *<a name="line.507"></a>
+<span class="sourceLineNo">508</span> * <cc># The first command-line argument</cc><a name="line.508"></a>
+<span class="sourceLineNo">509</span> * <ck>firstArg</ck> = $A{0}<a name="line.509"></a>
+<span class="sourceLineNo">510</span> *<a name="line.510"></a>
+<span class="sourceLineNo">511</span> * <cc># Look for system property, or env var if that doesn't exist, or command-line arg if that doesn't exist.</cc><a name="line.511"></a>
+<span class="sourceLineNo">512</span> * <ck>nested</ck> = $S{mySystemProperty,$E{MY_ENV_VAR,$A{0}}}<a name="line.512"></a>
+<span class="sourceLineNo">513</span> *<a name="line.513"></a>
+<span class="sourceLineNo">514</span> * <cc># A POJO with embedded variables</cc><a name="line.514"></a>
+<span class="sourceLineNo">515</span> * <ck>aBean2</ck> = {foo:'$A{0}',baz:$C{MySection/anInt}}<a name="line.515"></a>
+<span class="sourceLineNo">516</span> * </p><a name="line.516"></a>
+<span class="sourceLineNo">517</span> *<a name="line.517"></a>
+<span class="sourceLineNo">518</span> * <p class='bcode w800'><a name="line.518"></a>
+<span class="sourceLineNo">519</span> * <jc>// Java code for accessing config entries above.</jc><a name="line.519"></a>
+<span class="sourceLineNo">520</span> * Config cf = getConfig();<a name="line.520"></a>
+<span class="sourceLineNo">521</span> *<a name="line.521"></a>
+<span class="sourceLineNo">522</span> * <jk>int</jk> anInt = cf.getInt(<js>"MySection/anInt"</js>);<a name="line.522"></a>
+<span class="sourceLineNo">523</span> * <jk>boolean</jk> aBoolean = cf.getBoolean(<js>"MySection/aBoolean"</js>);<a name="line.523"></a>
+<span class="sourceLineNo">524</span> * <jk>int</jk>[] anIntArray = cf.getObject(<jk>int</jk>[].<jk>class</jk>, <js>"MySection/anIntArray"</js>);<a name="line.524"></a>
+<span class="sourceLineNo">525</span> * URL aURL = cf.getObject(URL.<jk>class</jk>, <js>"MySection/aURL"</js>);<a name="line.525"></a>
+<span class="sourceLineNo">526</span> * MyBean aBean = cf.getObject(MyBean.<jk>class</jk>, <js>"MySection/aBean"</js>);<a name="line.526"></a>
+<span class="sourceLineNo">527</span> * Locale locale = cf.getObject(Locale.<jk>class</jk>, <js>"MySection/locale"</js>);<a name="line.527"></a>
+<span class="sourceLineNo">528</span> * String path = cf.getString(<js>"MySection/path"</js>);<a name="line.528"></a>
+<span class="sourceLineNo">529</span> * String mainClass = cf.getString(<js>"MySection/mainClass"</js>);<a name="line.529"></a>
+<span class="sourceLineNo">530</span> * <jk>int</jk> sameAsAnInt = cf.getInt(<js>"MySection/sameAsAnInt"</js>);<a name="line.530"></a>
+<span class="sourceLineNo">531</span> * String myArg = cf.getString(<js>"MySection/myArg"</js>);<a name="line.531"></a>
+<span class="sourceLineNo">532</span> * String firstArg = cf.getString(<js>"MySection/firstArg"</js>);<a name="line.532"></a>
+<span class="sourceLineNo">533</span> * </p><a name="line.533"></a>
+<span class="sourceLineNo">534</span> *<a name="line.534"></a>
+<span class="sourceLineNo">535</span> * @return The config file for this application, or <jk>null</jk> if no config file is configured.<a name="line.535"></a>
+<span class="sourceLineNo">536</span> */<a name="line.536"></a>
+<span class="sourceLineNo">537</span> public Config getConfig() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span> return config;<a name="line.538"></a>
+<span class="sourceLineNo">539</span> }<a name="line.539"></a>
+<span class="sourceLineNo">540</span><a name="line.540"></a>
+<span class="sourceLineNo">541</span> /**<a name="line.541"></a>
+<span class="sourceLineNo">542</span> * Returns the main jar manifest file contents as a simple {@link ObjectMap}.<a name="line.542"></a>
+<span class="sourceLineNo">543</span> *<a name="line.543"></a>
+<span class="sourceLineNo">544</span> * <p><a name="line.544"></a>
+<span class="sourceLineNo">545</span> * This map consists of the contents of {@link Manifest#getMainAttributes()} with the keys and entries converted to<a name="line.545"></a>
+<span class="sourceLineNo">546</span> * simple strings.<a name="line.546"></a>
+<span class="sourceLineNo">547</span> * <p><a name="line.547"></a>
+<span class="sourceLineNo">548</span> * This method can be called from the class constructor.<a name="line.548"></a>
+<span class="sourceLineNo">549</span> *<a name="line.549"></a>
+<span class="sourceLineNo">550</span> * <h5 class='section'>Example:</h5><a name="line.550"></a>
+<span class="sourceLineNo">551</span> * <p class='bcode w800'><a name="line.551"></a>
+<span class="sourceLineNo">552</span> * <jc>// Get Main-Class from manifest file.</jc><a name="line.552"></a>
+<span class="sourceLineNo">553</span> * String mainClass = Microservice.<jsm>getManifest</jsm>().getString(<js>"Main-Class"</js>, <js>"unknown"</js>);<a name="line.553"></a>
+<span class="sourceLineNo">554</span> *<a name="line.554"></a>
+<span class="sourceLineNo">555</span> * <jc>// Get Rest-Resources from manifest file.</jc><a name="line.555"></a>
+<span class="sourceLineNo">556</span> * String[] restResources = Microservice.<jsm>getManifest</jsm>().getStringArray(<js>"Rest-Resources"</js>);<a name="line.556"></a>
+<span class="sourceLineNo">557</span> * </p><a name="line.557"></a>
+<span class="sourceLineNo">558</span> *<a name="line.558"></a>
+<span class="sourceLineNo">559</span> * @return The manifest file from the main jar, or <jk>null</jk> if the manifest file could not be retrieved.<a name="line.559"></a>
+<span class="sourceLineNo">560</span> */<a name="line.560"></a>
+<span class="sourceLineNo">561</span> public ManifestFile getManifest() {<a name="line.561"></a>
+<span class="sourceLineNo">562</span> return manifest;<a name="line.562"></a>
+<span class="sourceLineNo">563</span> }<a name="line.563"></a>
+<span class="sourceLineNo">564</span><a name="line.564"></a>
+<span class="sourceLineNo">565</span> /**<a name="line.565"></a>
+<span class="sourceLineNo">566</span> * Returns the variable resolver for resolving variables in strings and files.<a name="line.566"></a>
+<span class="sourceLineNo">567</span> *<a name="line.567"></a>
+<span class="sourceLineNo">568</span> * <p><a name="line.568"></a>
+<span class="sourceLineNo">569</span> * Variables can be controlled by the following methods:<a name="line.569"></a>
+<span class="sourceLineNo">570</span> * <ul class='doctree'><a name="line.570"></a>
+<span class="sourceLineNo">571</span> * <li class='jm'>{@link MicroserviceBuilder#vars(Class...)}<a name="line.571"></a>
+<span class="sourceLineNo">572</span> * <li class='jm'>{@link MicroserviceBuilder#varContext(String, Object)}<a name="line.572"></a>
+<span class="sourceLineNo">573</span> * </ul><a name="line.573"></a>
+<span class="sourceLineNo">574</span> *<a name="line.574"></a>
+<span class="sourceLineNo">575</span> * @return The VarResolver used by this Microservice, or <jk>null</jk> if it was never created.<a name="line.575"></a>
+<span class="sourceLineNo">576</span> */<a name="line.576"></a>
+<span class="sourceLineNo">577</span> public VarResolver getVarResolver() {<a name="line.577"></a>
+<span class="sourceLineNo">578</span> return varResolver;<a name="line.578"></a>
+<span class="sourceLineNo">579</span> }<a name="line.579"></a>
+<span class="sourceLineNo">580</span><a name="line.580"></a>
+<span class="sourceLineNo">581</span> /**<a name="line.581"></a>
+<span class="sourceLineNo">582</span> * Returns the logger for this microservice.<a name="line.582"></a>
+<span class="sourceLineNo">583</span> *<a name="line.583"></a>
+<span class="sourceLineNo">584</span> * @return The logger for this microservice.<a name="line.584"></a>
+<span class="sourceLineNo">585</span> */<a name="line.585"></a>
+<span class="sourceLineNo">586</span> public Logger getLogger() {<a name="line.586"></a>
+<span class="sourceLineNo">587</span> return logger;<a name="line.587"></a>
+<span class="sourceLineNo">588</span> }<a name="line.588"></a>
+<span class="sourceLineNo">589</span><a name="line.589"></a>
+<span class="sourceLineNo">590</span> /**<a name="line.590"></a>
+<span class="sourceLineNo">591</span> * Executes a console command.<a name="line.591"></a>
+<span class="sourceLineNo">592</span> *<a name="line.592"></a>
+<span class="sourceLineNo">593</span> * @param args<a name="line.593"></a>
+<span class="sourceLineNo">594</span> * The command arguments.<a name="line.594"></a>
+<span class="sourceLineNo">595</span> * <br>The first entry in the arguments is always the command name.<a name="line.595"></a>
+<span class="sourceLineNo">596</span> * @param in Console input.<a name="line.596"></a>
+<span class="sourceLineNo">597</span> * @param out Console output.<a name="line.597"></a>
+<span class="sourceLineNo">598</span> * @return <jk>true</jk> if the command returned <jk>true</jk> meaning the console thread should exit.<a name="line.598"></a>
+<span class="sourceLineNo">599</span> */<a name="line.599"></a>
+<span class="sourceLineNo">600</span> public boolean executeCommand(Args args, Scanner in, PrintWriter out) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span> ConsoleCommand cc = consoleCommandMap.get(args.getArg(0));<a name="line.601"></a>
+<span class="sourceLineNo">602</span> if (cc == null) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span> out.println(messages.getString("UnknownCommand"));<a name="line.603"></a>
+<span class="sourceLineNo">604</span> } else {<a name="line.604"></a>
+<span class="sourceLineNo">605</span> try {<a name="line.605"></a>
+<span class="sourceLineNo">606</span> return cc.execute(in, out, args);<a name="line.606"></a>
+<span class="sourceLineNo">607</span> } catch (Exception e) {<a name="line.607"></a>
+<span class="sourceLineNo">608</span> e.printStackTrace(out);<a name="line.608"></a>
+<span class="sourceLineNo">609</span> }<a name="line.609"></a>
+<span class="sourceLineNo">610</span> }<a name="line.610"></a>
+<span class="sourceLineNo">611</span> return false;<a name="line.611"></a>
+<span class="sourceLineNo">612</span> }<a name="line.612"></a>
+<span class="sourceLineNo">613</span><a name="line.613"></a>
+<span class="sourceLineNo">614</span> /**<a name="line.614"></a>
+<span class="sourceLineNo">615</span> * Convenience method for executing a console command directly.<a name="line.615"></a>
+<span class="sourceLineNo">616</span> *<a name="line.616"></a>
+<span class="sourceLineNo">617</span> * <p><a name="line.617"></a>
+<span class="sourceLineNo">618</span> * Allows you to execute a console command outside the console by simulating input and output.<a name="line.618"></a>
+<span class="sourceLineNo">619</span> *<a name="line.619"></a>
+<span class="sourceLineNo">620</span> * @param command The command name to execute.<a name="line.620"></a>
+<span class="sourceLineNo">621</span> * @param input Optional input to the command. Can be <jk>null</jk>.<a name="line.621"></a>
+<span class="sourceLineNo">622</span> * @param args Optional command arguments to pass to the command.<a name="line.622"></a>
+<span class="sourceLineNo">623</span> * @return The command output.<a name="line.623"></a>
+<span class="sourceLineNo">624</span> */<a name="line.624"></a>
+<span class="sourceLineNo">625</span> public String executeCommand(String command, String input, Object...args) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span> StringWriter sw = new StringWriter();<a name="line.626"></a>
+<span class="sourceLineNo">627</span> List<String> l = new ArrayList<>();<a name="line.627"></a>
+<span class="sourceLineNo">628</span> l.add(command);<a name="line.628"></a>
+<span class="sourceLineNo">629</span> for (Object a : args)<a name="line.629"></a>
+<span class="sourceLineNo">630</span> l.add(asString(a));<a name="line.630"></a>
+<span class="sourceLineNo">631</span> Args args2 = new Args(l.toArray(new String[l.size()]));<a name="line.631"></a>
+<span class="sourceLineNo">632</span> try (Scanner in = new Scanner(input); PrintWriter out = new PrintWriter(sw)) {<a name="line.632"></a>
+<span class="sourceLineNo">633</span> executeCommand(args2, in, out);<a name="line.633"></a>
+<span class="sourceLineNo">634</span> }<a name="line.634"></a>
+<span class="sourceLineNo">635</span> return sw.toString();<a name="line.635"></a>
+<span class="sourceLineNo">636</span> }<a name="line.636"></a>
+<span class="sourceLineNo">637</span><a name="line.637"></a>
+<span class="sourceLineNo">638</span> /**<a name="line.638"></a>
+<span class="sourceLineNo">639</span> * Joins the application with the current thread.<a name="line.639"></a>
+<span class="sourceLineNo">640</span> *<a name="line.640"></a>
+<span class="sourceLineNo">641</span> * <p><a name="line.641"></a>
+<span class="sourceLineNo">642</span> * Default implementation is a no-op.<a name="line.642"></a>
+<span class="sourceLineNo">643</span> *<a name="line.643"></a>
+<span class="sourceLineNo">644</span> * @return This object (for method chaining).<a name="line.644"></a>
+<span class="sourceLineNo">645</span> * @throws Exception<a name="line.645"></a>
+<span class="sourceLineNo">646</span> */<a name="line.646"></a>
+<span class="sourceLineNo">647</span> public Microservice join() throws Exception {<a name="line.647"></a>
+<span class="sourceLineNo">648</span> return this;<a name="line.648"></a>
+<span class="sourceLineNo">649</span> }<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span> /**<a name="line.651"></a>
+<span class="sourceLineNo">652</span> * Stop this application.<a name="line.652"></a>
+<span class="sourceLineNo">653</span> *<a name="line.653"></a>
+<span class="sourceLineNo">654</span> * <p><a name="line.654"></a>
+<span class="sourceLineNo">655</span> * Overridden methods MUST call this method LAST so that the {@link MicroserviceListener#onStop(Microservice)} method is called.<a name="line.655"></a>
+<span class="sourceLineNo">656</span> *<a name="line.656"></a>
+<span class="sourceLineNo">657</span> * @return This object (for method chaining).<a name="line.657"></a>
+<span class="sourceLineNo">658</span> * @throws Exception<a name="line.658"></a>
+<span class="sourceLineNo">659</span> */<a name="line.659"></a>
+<span class="sourceLineNo">660</span> public Microservice stop() throws Exception {<a name="line.660"></a>
+<span class="sourceLineNo">661</span> listener.onStop(this);<a name="line.661"></a>
+<span class="sourceLineNo">662</span> return this;<a name="line.662"></a>
+<span class="sourceLineNo">663</span> }<a name="line.663"></a>
+<span class="sourceLineNo">664</span><a name="line.664"></a>
+<span class="sourceLineNo">665</span> /**<a name="line.665"></a>
+<span class="sourceLineNo">666</span> * Stops the console (if it's started) and calls {@link System#exit(int)}.<a name="line.666"></a>
+<span class="sourceLineNo">667</span> *<a name="line.667"></a>
+<span class="sourceLineNo">668</span> * @throws Exception<a name="line.668"></a>
+<span class="sourceLineNo">669</span> */<a name="line.669"></a>
+<span class="sourceLineNo">670</span> public void exit() throws Exception {<a name="line.670"></a>
+<span class="sourceLineNo">671</span> try {<a name="line.671"></a>
+<span class="sourceLineNo">672</span> stopConsole();<a name="line.672"></a>
+<span class="sourceLineNo">673</span> } catch (Exception e) {<a name="line.673"></a>
+<span class="sourceLineNo">674</span> e.printStackTrace();<a name="line.674"></a>
+<span class="sourceLineNo">675</span> }<a name="line.675"></a>
+<span class="sourceLineNo">676</span> System.exit(0);<a name="line.676"></a>
+<span class="sourceLineNo">677</span> }<a name="line.677"></a>
+<span class="sourceLineNo">678</span><a name="line.678"></a>
+<span class="sourceLineNo">679</span> /**<a name="line.679"></a>
+<span class="sourceLineNo">680</span> * Kill the JVM by calling <code>System.exit(2);</code>.<a name="line.680"></a>
+<span class="sourceLineNo">681</span> */<a name="line.681"></a>
+<span class="sourceLineNo">682</span> public void kill() {<a name="line.682"></a>
+<span class="sourceLineNo">683</span> // This triggers the shutdown hook.<a name="line.683"></a>
+<span class="sourceLineNo">684</span> System.exit(2);<a name="line.684"></a>
+<span class="sourceLineNo">685</span> }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.689"></a>
-<span class="sourceLineNo">690</span> // Other methods.<a name="line.690"></a>
-<span class="sourceLineNo">691</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span> /**<a name="line.693"></a>
-<span class="sourceLineNo">694</span> * Returns the console commands associated with this microservice.<a name="line.694"></a>
-<span class="sourceLineNo">695</span> *<a name="line.695"></a>
-<span class="sourceLineNo">696</span> * @return The console commands associated with this microservice as an unmodifiable map.<a name="line.696"></a>
-<span class="sourceLineNo">697</span> */<a name="line.697"></a>
-<span class="sourceLineNo">698</span> public final Map<String,ConsoleCommand> getConsoleCommands() {<a name="line.698"></a>
-<span class="sourceLineNo">699</span> return consoleCommandMap;<a name="line.699"></a>
-<span class="sourceLineNo">700</span> }<a name="line.700"></a>
-<span class="sourceLineNo">701</span><a name="line.701"></a>
-<span class="sourceLineNo">702</span> /**<a name="line.702"></a>
-<span class="sourceLineNo">703</span> * Returns the console reader.<a name="line.703"></a>
-<span class="sourceLineNo">704</span> *<a name="line.704"></a>
-<span class="sourceLineNo">705</span> * <p><a name="line.705"></a>
-<span class="sourceLineNo">706</span> * Subclasses can override this method to provide their own console input.<a name="line.706"></a>
-<span class="sourceLineNo">707</span> *<a name="line.707"></a>
-<span class="sourceLineNo">708</span> * @return The console reader. Never <jk>null</jk>.<a name="line.708"></a>
-<span class="sourceLineNo">709</span> */<a name="line.709"></a>
-<span class="sourceLineNo">710</span> protected Scanner getConsoleReader() {<a name="line.710"></a>
-<span class="sourceLineNo">711</span> return consoleReader;<a name="line.711"></a>
-<span class="sourceLineNo">712</span> }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span> /**<a name="line.714"></a>
-<span class="sourceLineNo">715</span> * Returns the console writer.<a name="line.715"></a>
-<span class="sourceLineNo">716</span> *<a name="line.716"></a>
-<span class="sourceLineNo">717</span> * <p><a name="line.717"></a>
-<span class="sourceLineNo">718</span> * Subclasses can override this method to provide their own console output.<a name="line.718"></a>
-<span class="sourceLineNo">719</span> *<a name="line.719"></a>
-<span class="sourceLineNo">720</span> * @return The console writer. Never <jk>null</jk>.<a name="line.720"></a>
-<span class="sourceLineNo">721</span> */<a name="line.721"></a>
-<span class="sourceLineNo">722</span> protected PrintWriter getConsoleWriter() {<a name="line.722"></a>
-<span class="sourceLineNo">723</span> return consoleWriter;<a name="line.723"></a>
-<span class="sourceLineNo">724</span> }<a name="line.724"></a>
-<span class="sourceLineNo">725</span><a name="line.725"></a>
-<span class="sourceLineNo">726</span> /**<a name="line.726"></a>
-<span class="sourceLineNo">727</span> * Prints a localized message to the console writer.<a name="line.727"></a>
-<span class="sourceLineNo">728</span> *<a name="line.728"></a>
-<span class="sourceLineNo">729</span> * <p><a name="line.729"></a>
-<span class="sourceLineNo">730</span> * Ignored if <js>"Console/enabled"</js> is <jk>false</jk>.<a name="line.730"></a>
-<span class="sourceLineNo">731</span> *<a name="line.731"></a>
-<span class="sourceLineNo">732</span> * @param mb The message bundle containing the message.<a name="line.732"></a>
-<span class="sourceLineNo">733</span> * @param messageKey The message key.<a name="line.733"></a>
-<span class="sourceLineNo">734</span> * @param args Optional {@link MessageFormat}-style arguments.<a name="line.734"></a>
-<span class="sourceLineNo">735</span> */<a name="line.735"></a>
-<span class="sourceLineNo">736</span> public void out(MessageBundle mb, String messageKey, Object...args) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span> String msg = mb.getString(messageKey, args);<a name="line.737"></a>
-<span class="sourceLineNo">738</span> if (consoleEnabled)<a name="line.738"></a>
-<span class="sourceLineNo">739</span> getConsoleWriter().println(msg);<a name="line.739"></a>
-<span class="sourceLineNo">740</span> log(Level.INFO, msg);<a name="line.740"></a>
-<span class="sourceLineNo">741</span> }<a name="line.741"></a>
-<span class="sourceLineNo">742</span><a name="line.742"></a>
-<span class="sourceLineNo">743</span> /**<a name="line.743"></a>
-<span class="sourceLineNo">744</span> * Prints a localized message to STDERR.<a name="line.744"></a>
-<span class="sourceLineNo">745</span> *<a name="line.745"></a>
-<span class="sourceLineNo">746</span> * <p><a name="line.746"></a>
-<span class="sourceLineNo">747</span> * Ignored if <js>"Console/enabled"</js> is <jk>false</jk>.<a name="line.747"></a>
-<span class="sourceLineNo">748</span> *<a name="line.748"></a>
-<span class="sourceLineNo">749</span> * @param mb The message bundle containing the message.<a name="line.749"></a>
-<span class="sourceLineNo">750</span> * @param messageKey The message key.<a name="line.750"></a>
-<span class="sourceLineNo">751</span> * @param args Optional {@link MessageFormat}-style arguments.<a name="line.751"></a>
-<span class="sourceLineNo">752</span> */<a name="line.752"></a>
-<span class="sourceLineNo">753</span> public void err(MessageBundle mb, String messageKey, Object...args) {<a name="line.753"></a>
-<span class="sourceLineNo">754</span> String msg = mb.getString(messageKey, args);<a name="line.754"></a>
-<span class="sourceLineNo">755</span> if (consoleEnabled)<a name="line.755"></a>
-<span class="sourceLineNo">756</span> System.err.println(mb.getString(messageKey, args)); // NOT DEBUG<a name="line.756"></a>
-<span class="sourceLineNo">757</span> log(Level.SEVERE, msg);<a name="line.757"></a>
-<span class="sourceLineNo">758</span> }<a name="line.758"></a>
-<span class="sourceLineNo">759</span><a name="line.759"></a>
-<span class="sourceLineNo">760</span> /**<a name="line.760"></a>
-<span class="sourceLineNo">761</span> * Logs a message to the log file.<a name="line.761"></a>
-<span class="sourceLineNo">762</span> *<a name="line.762"></a>
-<span class="sourceLineNo">763</span> * @param level<a name="line.763"></a>
-<span class="sourceLineNo">764</span> * @param message The message text.<a name="line.764"></a>
-<span class="sourceLineNo">765</span> * @param args Optional {@link MessageFormat}-style arguments.<a name="line.765"></a>
-<span class="sourceLineNo">766</span> */<a name="line.766"></a>
-<span class="sourceLineNo">767</span> protected void log(Level level, String message, Object...args) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span> String msg = args.length == 0 ? message : MessageFormat.format(message, args);<a name="line.768"></a>
-<span class="sourceLineNo">769</span> getLogger().log(level, msg);<a name="line.769"></a>
-<span class="sourceLineNo">770</span> }<a name="line.770"></a>
-<span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span> @Override /* ConfigChangeListener */<a name="line.772"></a>
-<span class="sourceLineNo">773</span> public void onConfigChange(ConfigEvents events) {<a name="line.773"></a>
-<span class="sourceLineNo">774</span> listener.onConfigChange(this, events);<a name="line.774"></a>
-<span class="sourceLineNo">775</span> }<a name="line.775"></a>
-<span class="sourceLineNo">776</span>}<a name="line.776"></a>
+<span class="sourceLineNo">688</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.688"></a>
+<span class="sourceLineNo">689</span> // Other methods.<a name="line.689"></a>
+<span class="sourceLineNo">690</span> //-----------------------------------------------------------------------------------------------------------------<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span> /**<a name="line.692"></a>
+<span class="sourceLineNo">693</span> * Returns the console commands associated with this microservice.<a name="line.693"></a>
+<span class="sourceLineNo">694</span> *<a name="line.694"></a>
+<span class="sourceLineNo">695</span> * @return The console commands associated with this microservice as an unmodifiable map.<a name="line.695"></a>
+<span class="sourceLineNo">696</span> */<a name="line.696"></a>
+<span class="sourceLineNo">697</span> public final Map<String,ConsoleCommand> getConsoleCommands() {<a name="line.697"></a>
+<span class="sourceLineNo">698</span> return consoleCommandMap;<a name="line.698"></a>
+<span class="sourceLineNo">699</span> }<a name="line.699"></a>
+<span class="sourceLineNo">700</span><a name="line.700"></a>
+<span class="sourceLineNo">701</span> /**<a name="line.701"></a>
+<span class="sourceLineNo">702</span> * Returns the console reader.<a name="line.702"></a>
+<span class="sourceLineNo">703</span> *<a name="line.703"></a>
+<span class="sourceLineNo">704</span> * <p><a name="line.704"></a>
+<span class="sourceLineNo">705</span> * Subclasses can override this method to provide their own console input.<a name="line.705"></a>
+<span class="sourceLineNo">706</span> *<a name="line.706"></a>
+<span class="sourceLineNo">707</span> * @return The console reader. Never <jk>null</jk>.<a name="line.707"></a>
+<span class="sourceLineNo">708</span> */<a name="line.708"></a>
+<span class="sourceLineNo">709</span> protected Scanner getConsoleReader() {<a name="line.709"></a>
+<span class="sourceLineNo">710</span> return consoleReader;<a name="line.710"></a>
+<span class="sourceLineNo">711</span> }<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span> /**<a name="line.713"></a>
+<span class="sourceLineNo">714</span> * Returns the console writer.<a name="line.714"></a>
+<span class="sourceLineNo">715</span> *<a name="line.715"></a>
+<span class="sourceLineNo">716</span> * <p><a name="line.716"></a>
+<span class="sourceLineNo">717</span> * Subclasses can override this method to provide their own console output.<a name="line.717"></a>
+<span class="sourceLineNo">718</span> *<a name="line.718"></a>
+<span class="sourceLineNo">719</span> * @return The console writer. Never <jk>null</jk>.<a name="line.719"></a>
+<span class="sourceLineNo">720</span> */<a name="line.720"></a>
+<span class="sourceLineNo">721</span> protected PrintWriter getConsoleWriter() {<a name="line.721"></a>
+<span class="sourceLineNo">722</span> return consoleWriter;<a name="line.722"></a>
+<span class="sourceLineNo">723</span> }<a name="line.723"></a>
+<span class="sourceLineNo">724</span><a name="line.724"></a>
+<span class="sourceLineNo">725</span> /**<a name="line.725"></a>
+<span class="sourceLineNo">726</span> * Prints a localized message to the console writer.<a name="line.726"></a>
+<span class="sourceLineNo">727</span> *<a name="line.727"></a>
+<span class="sourceLineNo">728</span> * <p><a name="line.728"></a>
+<span class="sourceLineNo">729</span> * Ignored if <js>"Console/enabled"</js> is <jk>false</jk>.<a name="line.729"></a>
+<span class="sourceLineNo">730</span> *<a name="line.730"></a>
+<span class="sourceLineNo">731</span> * @param mb The message bundle containing the message.<a name="line.731"></a>
+<span class="sourceLineNo">732</span> * @param messageKey The message key.<a name="line.732"></a>
+<span class="sourceLineNo">733</span> * @param args Optional {@link MessageFormat}-style arguments.<a name="line.733"></a>
+<span class="sourceLineNo">734</span> */<a name="line.734"></a>
+<span class="sourceLineNo">735</span> public void out(MessageBundle mb, String messageKey, Object...args) {<a name="line.735"></a>
+<span class="sourceLineNo">736</span> String msg = mb.getString(messageKey, args);<a name="line.736"></a>
+<span class="sourceLineNo">737</span> if (consoleEnabled)<a name="line.737"></a>
+<span class="sourceLineNo">738</span> getConsoleWriter().println(msg);<a name="line.738"></a>
+<span class="sourceLineNo">739</span> log(Level.INFO, msg);<a name="line.739"></a>
+<span class="sourceLineNo">740</span> }<a name="line.740"></a>
+<span class="sourceLineNo">741</span><a name="line.741"></a>
+<span class="sourceLineNo">742</span> /**<a name="line.742"></a>
+<span class="sourceLineNo">743</span> * Prints a localized message to STDERR.<a name="line.743"></a>
+<span class="sourceLineNo">744</span> *<a name="line.744"></a>
+<span class="sourceLineNo">745</span> * <p><a name="line.745"></a>
+<span class="sourceLineNo">746</span> * Ignored if <js>"Console/enabled"</js> is <jk>false</jk>.<a name="line.746"></a>
+<span class="sourceLineNo">747</span> *<a name="line.747"></a>
+<span class="sourceLineNo">748</span> * @param mb The message bundle containing the message.<a name="line.748"></a>
+<span class="sourceLineNo">749</span> * @param messageKey The message key.<a name="line.749"></a>
+<span class="sourceLineNo">750</span> * @param args Optional {@link MessageFormat}-style arguments.<a name="line.750"></a>
+<span class="sourceLineNo">751</span> */<a name="line.751"></a>
+<span class="sourceLineNo">752</span> public void err(MessageBundle mb, String messageKey, Object...args) {<a name="line.752"></a>
+<span class="sourceLineNo">753</span> String msg = mb.getString(messageKey, args);<a name="line.753"></a>
+<span class="sourceLineNo">754</span> if (consoleEnabled)<a name="line.754"></a>
+<span class="sourceLineNo">755</span> System.err.println(mb.getString(messageKey, args)); // NOT DEBUG<a name="line.755"></a>
+<span class="sourceLineNo">756</span> log(Level.SEVERE, msg);<a name="line.756"></a>
+<span class="sourceLineNo">757</span> }<a name="line.757"></a>
+<span class="sourceLineNo">758</span><a name="line.758"></a>
+<span class="sourceLineNo">759</span> /**<a name="line.759"></a>
+<span class="sourceLineNo">760</span> * Logs a message to the log file.<a name="line.760"></a>
+<span class="sourceLineNo">761</span> *<a name="line.761"></a>
+<span class="sourceLineNo">762</span> * @param level<a name="line.762"></a>
+<span class="sourceLineNo">763</span> * @param message The message text.<a name="line.763"></a>
+<span class="sourceLineNo">764</span> * @param args Optional {@link MessageFormat}-style arguments.<a name="line.764"></a>
+<span class="sourceLineNo">765</span> */<a name="line.765"></a>
+<span class="sourceLineNo">766</span> protected void log(Level level, String message, Object...args) {<a name="line.766"></a>
+<span class="sourceLineNo">767</span> String msg = args.length == 0 ? message : MessageFormat.format(message, args);<a name="line.767"></a>
+<span class="sourceLineNo">768</span> getLogger().log(level, msg);<a name="line.768"></a>
+<span class="sourceLineNo">769</span> }<a name="line.769"></a>
+<span class="sourceLineNo">770</span><a name="line.770"></a>
+<span class="sourceLineNo">771</span> @Override /* ConfigChangeListener */<a name="line.771"></a>
+<span class="sourceLineNo">772</span> public void onConfigChange(ConfigEvents events) {<a name="line.772"></a>
+<span class="sourceLineNo">773</span> listener.onConfigChange(this, events);<a name="line.773"></a>
+<span class="sourceLineNo">774</span> }<a name="line.774"></a>
+<span class="sourceLineNo">775</span>}<a name="line.775"></a>
diff --git a/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRest.html b/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRest.html
index 63fc890..d71e213 100644
--- a/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRest.html
+++ b/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRest.html
@@ -23,88 +23,90 @@
<span class="sourceLineNo">015</span>import static org.apache.juneau.http.HttpMethodName.*;<a name="line.15"></a>
<span class="sourceLineNo">016</span>import static org.apache.juneau.jsonschema.JsonSchemaGenerator.*;<a name="line.16"></a>
<span class="sourceLineNo">017</span><a name="line.17"></a>
-<span class="sourceLineNo">018</span>import org.apache.juneau.dto.swagger.*;<a name="line.18"></a>
-<span class="sourceLineNo">019</span>import org.apache.juneau.dto.swagger.ui.*;<a name="line.19"></a>
-<span class="sourceLineNo">020</span>import org.apache.juneau.rest.annotation.*;<a name="line.20"></a>
-<span class="sourceLineNo">021</span><a name="line.21"></a>
-<span class="sourceLineNo">022</span>/**<a name="line.22"></a>
-<span class="sourceLineNo">023</span> *<a name="line.23"></a>
-<span class="sourceLineNo">024</span> *<a name="line.24"></a>
-<span class="sourceLineNo">025</span> * <h5 class='section'>See Also:</h5><a name="line.25"></a>
-<span class="sourceLineNo">026</span> * <ul><a name="line.26"></a>
-<span class="sourceLineNo">027</span> * <li class='link'>{@doc juneau-rest-server.Instantiation.BasicRestServlet}<a name="line.27"></a>
-<span class="sourceLineNo">028</span> * </ul><a name="line.28"></a>
-<span class="sourceLineNo">029</span> */<a name="line.29"></a>
-<span class="sourceLineNo">030</span>@RestResource(<a name="line.30"></a>
-<span class="sourceLineNo">031</span><a name="line.31"></a>
-<span class="sourceLineNo">032</span> // Allow OPTIONS requests to be simulated using ?method=OPTIONS query parameter.<a name="line.32"></a>
-<span class="sourceLineNo">033</span> allowedMethodParams="OPTIONS",<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span> // HTML-page specific settings.<a name="line.35"></a>
-<span class="sourceLineNo">036</span> htmldoc=@HtmlDoc(<a name="line.36"></a>
-<span class="sourceLineNo">037</span> // Basic page navigation links.<a name="line.37"></a>
-<span class="sourceLineNo">038</span> navlinks={<a name="line.38"></a>
-<span class="sourceLineNo">039</span> "up: request:/..",<a name="line.39"></a>
-<span class="sourceLineNo">040</span> "options: servlet:/?method=OPTIONS"<a name="line.40"></a>
-<span class="sourceLineNo">041</span> }<a name="line.41"></a>
-<span class="sourceLineNo">042</span> )<a name="line.42"></a>
-<span class="sourceLineNo">043</span>)<a name="line.43"></a>
-<span class="sourceLineNo">044</span>public abstract class BasicRest implements BasicRestConfig {<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span> /**<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * [OPTIONS /*] - Show resource options.<a name="line.47"></a>
-<span class="sourceLineNo">048</span> *<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * @param req The HTTP request.<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * @return A bean containing the contents for the OPTIONS page.<a name="line.50"></a>
-<span class="sourceLineNo">051</span> */<a name="line.51"></a>
-<span class="sourceLineNo">052</span> @RestMethod(name=OPTIONS, path="/*",<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span> summary="Swagger documentation",<a name="line.54"></a>
-<span class="sourceLineNo">055</span> description="Swagger documentation for this resource.",<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span> htmldoc=@HtmlDoc(<a name="line.57"></a>
-<span class="sourceLineNo">058</span> // Override the nav links for the swagger page.<a name="line.58"></a>
-<span class="sourceLineNo">059</span> navlinks={<a name="line.59"></a>
-<span class="sourceLineNo">060</span> "back: servlet:/",<a name="line.60"></a>
-<span class="sourceLineNo">061</span> "json: servlet:/?method=OPTIONS&Accept=text/json&plainText=true"<a name="line.61"></a>
-<span class="sourceLineNo">062</span> },<a name="line.62"></a>
-<span class="sourceLineNo">063</span> // Never show aside contents of page inherited from class.<a name="line.63"></a>
-<span class="sourceLineNo">064</span> aside="NONE"<a name="line.64"></a>
-<span class="sourceLineNo">065</span> ),<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span> // POJO swaps to apply to all serializers/parsers on this method.<a name="line.67"></a>
-<span class="sourceLineNo">068</span> pojoSwaps={<a name="line.68"></a>
-<span class="sourceLineNo">069</span> // Use the SwaggerUI swap when rendering Swagger beans.<a name="line.69"></a>
-<span class="sourceLineNo">070</span> // This is a per-media-type swap that only applies to text/html requests.<a name="line.70"></a>
-<span class="sourceLineNo">071</span> SwaggerUI.class<a name="line.71"></a>
-<span class="sourceLineNo">072</span> },<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span> // Properties to apply to all serializers/parsers and REST-specific API objects on this method.<a name="line.74"></a>
-<span class="sourceLineNo">075</span> properties={<a name="line.75"></a>
-<span class="sourceLineNo">076</span> // Add descriptions to the following types when not specified:<a name="line.76"></a>
-<span class="sourceLineNo">077</span> @Property(name=JSONSCHEMA_addDescriptionsTo, value="bean,collection,array,map,enum"),<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span> // Add x-example to the following types:<a name="line.79"></a>
-<span class="sourceLineNo">080</span> @Property(name=JSONSCHEMA_addExamplesTo, value="bean,collection,array,map"),<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span> // Don't generate schema information on the Swagger bean itself or HTML beans.<a name="line.82"></a>
-<span class="sourceLineNo">083</span> @Property(name=JSONSCHEMA_ignoreTypes, value="Swagger,org.apache.juneau.dto.html5.*")<a name="line.83"></a>
-<span class="sourceLineNo">084</span> },<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span> // Shortcut for boolean properties.<a name="line.86"></a>
-<span class="sourceLineNo">087</span> flags={<a name="line.87"></a>
-<span class="sourceLineNo">088</span> // Use $ref references for bean definitions to reduce duplication in Swagger.<a name="line.88"></a>
-<span class="sourceLineNo">089</span> JSONSCHEMA_useBeanDefs,<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span> // When parsing generated beans, ignore unknown properties that may only exist as getters and not setters.<a name="line.91"></a>
-<span class="sourceLineNo">092</span> BEAN_ignoreUnknownBeanProperties<a name="line.92"></a>
-<span class="sourceLineNo">093</span> }<a name="line.93"></a>
-<span class="sourceLineNo">094</span> )<a name="line.94"></a>
-<span class="sourceLineNo">095</span> public Swagger getOptions(RestRequest req) {<a name="line.95"></a>
-<span class="sourceLineNo">096</span> // Localized Swagger for this resource is available through the RestRequest object.<a name="line.96"></a>
-<span class="sourceLineNo">097</span> return req.getSwagger();<a name="line.97"></a>
-<span class="sourceLineNo">098</span> }<a name="line.98"></a>
-<span class="sourceLineNo">099</span>}<a name="line.99"></a>
+<span class="sourceLineNo">018</span>import javax.servlet.http.*;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import org.apache.juneau.dto.swagger.*;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.juneau.dto.swagger.ui.*;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.juneau.rest.annotation.*;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>/**<a name="line.24"></a>
+<span class="sourceLineNo">025</span> * Identical to {@link BasicRestServlet} but doesn't extend from {@link HttpServlet}<a name="line.25"></a>
+<span class="sourceLineNo">026</span> *<a name="line.26"></a>
+<span class="sourceLineNo">027</span> * <h5 class='section'>See Also:</h5><a name="line.27"></a>
+<span class="sourceLineNo">028</span> * <ul><a name="line.28"></a>
+<span class="sourceLineNo">029</span> * <li class='link'>{@doc juneau-rest-server.Instantiation.BasicRest}<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * </ul><a name="line.30"></a>
+<span class="sourceLineNo">031</span> */<a name="line.31"></a>
+<span class="sourceLineNo">032</span>@RestResource(<a name="line.32"></a>
+<span class="sourceLineNo">033</span><a name="line.33"></a>
+<span class="sourceLineNo">034</span> // Allow OPTIONS requests to be simulated using ?method=OPTIONS query parameter.<a name="line.34"></a>
+<span class="sourceLineNo">035</span> allowedMethodParams="OPTIONS",<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span> // HTML-page specific settings.<a name="line.37"></a>
+<span class="sourceLineNo">038</span> htmldoc=@HtmlDoc(<a name="line.38"></a>
+<span class="sourceLineNo">039</span> // Basic page navigation links.<a name="line.39"></a>
+<span class="sourceLineNo">040</span> navlinks={<a name="line.40"></a>
+<span class="sourceLineNo">041</span> "up: request:/..",<a name="line.41"></a>
+<span class="sourceLineNo">042</span> "options: servlet:/?method=OPTIONS"<a name="line.42"></a>
+<span class="sourceLineNo">043</span> }<a name="line.43"></a>
+<span class="sourceLineNo">044</span> )<a name="line.44"></a>
+<span class="sourceLineNo">045</span>)<a name="line.45"></a>
+<span class="sourceLineNo">046</span>public abstract class BasicRest implements BasicRestConfig {<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span> /**<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * [OPTIONS /*] - Show resource options.<a name="line.49"></a>
+<span class="sourceLineNo">050</span> *<a name="line.50"></a>
+<span class="sourceLineNo">051</span> * @param req The HTTP request.<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * @return A bean containing the contents for the OPTIONS page.<a name="line.52"></a>
+<span class="sourceLineNo">053</span> */<a name="line.53"></a>
+<span class="sourceLineNo">054</span> @RestMethod(name=OPTIONS, path="/*",<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span> summary="Swagger documentation",<a name="line.56"></a>
+<span class="sourceLineNo">057</span> description="Swagger documentation for this resource.",<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span> htmldoc=@HtmlDoc(<a name="line.59"></a>
+<span class="sourceLineNo">060</span> // Override the nav links for the swagger page.<a name="line.60"></a>
+<span class="sourceLineNo">061</span> navlinks={<a name="line.61"></a>
+<span class="sourceLineNo">062</span> "back: servlet:/",<a name="line.62"></a>
+<span class="sourceLineNo">063</span> "json: servlet:/?method=OPTIONS&Accept=text/json&plainText=true"<a name="line.63"></a>
+<span class="sourceLineNo">064</span> },<a name="line.64"></a>
+<span class="sourceLineNo">065</span> // Never show aside contents of page inherited from class.<a name="line.65"></a>
+<span class="sourceLineNo">066</span> aside="NONE"<a name="line.66"></a>
+<span class="sourceLineNo">067</span> ),<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span> // POJO swaps to apply to all serializers/parsers on this method.<a name="line.69"></a>
+<span class="sourceLineNo">070</span> pojoSwaps={<a name="line.70"></a>
+<span class="sourceLineNo">071</span> // Use the SwaggerUI swap when rendering Swagger beans.<a name="line.71"></a>
+<span class="sourceLineNo">072</span> // This is a per-media-type swap that only applies to text/html requests.<a name="line.72"></a>
+<span class="sourceLineNo">073</span> SwaggerUI.class<a name="line.73"></a>
+<span class="sourceLineNo">074</span> },<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span> // Properties to apply to all serializers/parsers and REST-specific API objects on this method.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> properties={<a name="line.77"></a>
+<span class="sourceLineNo">078</span> // Add descriptions to the following types when not specified:<a name="line.78"></a>
+<span class="sourceLineNo">079</span> @Property(name=JSONSCHEMA_addDescriptionsTo, value="bean,collection,array,map,enum"),<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span> // Add x-example to the following types:<a name="line.81"></a>
+<span class="sourceLineNo">082</span> @Property(name=JSONSCHEMA_addExamplesTo, value="bean,collection,array,map"),<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span> // Don't generate schema information on the Swagger bean itself or HTML beans.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> @Property(name=JSONSCHEMA_ignoreTypes, value="Swagger,org.apache.juneau.dto.html5.*")<a name="line.85"></a>
+<span class="sourceLineNo">086</span> },<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span> // Shortcut for boolean properties.<a name="line.88"></a>
+<span class="sourceLineNo">089</span> flags={<a name="line.89"></a>
+<span class="sourceLineNo">090</span> // Use $ref references for bean definitions to reduce duplication in Swagger.<a name="line.90"></a>
+<span class="sourceLineNo">091</span> JSONSCHEMA_useBeanDefs,<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span> // When parsing generated beans, ignore unknown properties that may only exist as getters and not setters.<a name="line.93"></a>
+<span class="sourceLineNo">094</span> BEAN_ignoreUnknownBeanProperties<a name="line.94"></a>
+<span class="sourceLineNo">095</span> }<a name="line.95"></a>
+<span class="sourceLineNo">096</span> )<a name="line.96"></a>
+<span class="sourceLineNo">097</span> public Swagger getOptions(RestRequest req) {<a name="line.97"></a>
+<span class="sourceLineNo">098</span> // Localized Swagger for this resource is available through the RestRequest object.<a name="line.98"></a>
+<span class="sourceLineNo">099</span> return req.getSwagger();<a name="line.99"></a>
+<span class="sourceLineNo">100</span> }<a name="line.100"></a>
+<span class="sourceLineNo">101</span>}<a name="line.101"></a>
diff --git a/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRestGroup.html b/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRestGroup.html
index a560269..aa086dd 100644
--- a/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRestGroup.html
+++ b/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRestGroup.html
@@ -22,40 +22,35 @@
<span class="sourceLineNo">014</span><a name="line.14"></a>
<span class="sourceLineNo">015</span>import static org.apache.juneau.http.HttpMethodName.*;<a name="line.15"></a>
<span class="sourceLineNo">016</span><a name="line.16"></a>
-<span class="sourceLineNo">017</span>import org.apache.juneau.rest.annotation.*;<a name="line.17"></a>
-<span class="sourceLineNo">018</span>import org.apache.juneau.rest.helper.*;<a name="line.18"></a>
-<span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>/**<a name="line.20"></a>
-<span class="sourceLineNo">021</span> * Specialized subclass of {@link BasicRestServlet} for showing "group" pages.<a name="line.21"></a>
-<span class="sourceLineNo">022</span> *<a name="line.22"></a>
-<span class="sourceLineNo">023</span> * <p><a name="line.23"></a>
-<span class="sourceLineNo">024</span> * Group pages consist of simple lists of child resource URLs and their labels.<a name="line.24"></a>
-<span class="sourceLineNo">025</span> * They're meant to be used as jumping-off points for child resources.<a name="line.25"></a>
-<span class="sourceLineNo">026</span> *<a name="line.26"></a>
-<span class="sourceLineNo">027</span> * <p><a name="line.27"></a>
-<span class="sourceLineNo">028</span> * Child resources are specified using the {@link RestResource#children() @RestResource(children)} annotation.<a name="line.28"></a>
-<span class="sourceLineNo">029</span> *<a name="line.29"></a>
-<span class="sourceLineNo">030</span> * <h5 class='section'>See Also:</h5><a name="line.30"></a>
-<span class="sourceLineNo">031</span> * <ul><a name="line.31"></a>
-<span class="sourceLineNo">032</span> * <li class='link'>{@doc juneau-rest-server.Instantiation.RouterPages}<a name="line.32"></a>
-<span class="sourceLineNo">033</span> * </ul><a name="line.33"></a>
-<span class="sourceLineNo">034</span> */<a name="line.34"></a>
-<span class="sourceLineNo">035</span>@RestResource<a name="line.35"></a>
-<span class="sourceLineNo">036</span>public abstract class BasicRestGroup extends BasicRest {<a name="line.36"></a>
-<span class="sourceLineNo">037</span><a name="line.37"></a>
-<span class="sourceLineNo">038</span> /**<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * [GET /] - Get child resources.<a name="line.39"></a>
-<span class="sourceLineNo">040</span> *<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * @param req The HTTP request.<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * @return The bean containing links to the child resources.<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * @throws Exception<a name="line.43"></a>
-<span class="sourceLineNo">044</span> */<a name="line.44"></a>
-<span class="sourceLineNo">045</span> @RestMethod(name=GET, path="/", summary="Navigation page")<a name="line.45"></a>
-<span class="sourceLineNo">046</span> public ChildResourceDescriptions getChildren(RestRequest req) throws Exception {<a name="line.46"></a>
-<span class="sourceLineNo">047</span> return new ChildResourceDescriptions(req);<a name="line.47"></a>
-<span class="sourceLineNo">048</span> }<a name="line.48"></a>
-<span class="sourceLineNo">049</span>}<a name="line.49"></a>
-<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">017</span>import javax.servlet.http.*;<a name="line.17"></a>
+<span class="sourceLineNo">018</span><a name="line.18"></a>
+<span class="sourceLineNo">019</span>import org.apache.juneau.rest.annotation.*;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>import org.apache.juneau.rest.helper.*;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>/**<a name="line.22"></a>
+<span class="sourceLineNo">023</span> * Identical to {@link BasicRestServletGroup} but doesn't extend from {@link HttpServlet}<a name="line.23"></a>
+<span class="sourceLineNo">024</span> *<a name="line.24"></a>
+<span class="sourceLineNo">025</span> * <h5 class='section'>See Also:</h5><a name="line.25"></a>
+<span class="sourceLineNo">026</span> * <ul><a name="line.26"></a>
+<span class="sourceLineNo">027</span> * <li class='link'>{@doc juneau-rest-server.Instantiation.BasicRestGroup}<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * </ul><a name="line.28"></a>
+<span class="sourceLineNo">029</span> */<a name="line.29"></a>
+<span class="sourceLineNo">030</span>@RestResource<a name="line.30"></a>
+<span class="sourceLineNo">031</span>public abstract class BasicRestGroup extends BasicRest {<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span> /**<a name="line.33"></a>
+<span class="sourceLineNo">034</span> * [GET /] - Get child resources.<a name="line.34"></a>
+<span class="sourceLineNo">035</span> *<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * @param req The HTTP request.<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * @return The bean containing links to the child resources.<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * @throws Exception<a name="line.38"></a>
+<span class="sourceLineNo">039</span> */<a name="line.39"></a>
+<span class="sourceLineNo">040</span> @RestMethod(name=GET, path="/", summary="Navigation page")<a name="line.40"></a>
+<span class="sourceLineNo">041</span> public ChildResourceDescriptions getChildren(RestRequest req) throws Exception {<a name="line.41"></a>
+<span class="sourceLineNo">042</span> return new ChildResourceDescriptions(req);<a name="line.42"></a>
+<span class="sourceLineNo">043</span> }<a name="line.43"></a>
+<span class="sourceLineNo">044</span>}<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
diff --git a/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRestJena.html b/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRestJena.html
index 9e74e3c..ff07e46 100644
--- a/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRestJena.html
+++ b/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRestJena.html
@@ -20,31 +20,33 @@
<span class="sourceLineNo">012</span>// ***************************************************************************************************************************<a name="line.12"></a>
<span class="sourceLineNo">013</span>package org.apache.juneau.rest;<a name="line.13"></a>
<span class="sourceLineNo">014</span><a name="line.14"></a>
-<span class="sourceLineNo">015</span>import org.apache.juneau.jena.*;<a name="line.15"></a>
-<span class="sourceLineNo">016</span>import org.apache.juneau.rest.annotation.*;<a name="line.16"></a>
-<span class="sourceLineNo">017</span><a name="line.17"></a>
-<span class="sourceLineNo">018</span>/**<a name="line.18"></a>
-<span class="sourceLineNo">019</span> * Resource servlet with additional RDF support.<a name="line.19"></a>
-<span class="sourceLineNo">020</span> */<a name="line.20"></a>
-<span class="sourceLineNo">021</span>@SuppressWarnings("serial")<a name="line.21"></a>
-<span class="sourceLineNo">022</span>@RestResource(<a name="line.22"></a>
-<span class="sourceLineNo">023</span> serializers={<a name="line.23"></a>
-<span class="sourceLineNo">024</span> Inherit.class,<a name="line.24"></a>
-<span class="sourceLineNo">025</span> RdfXmlSerializer.class,<a name="line.25"></a>
-<span class="sourceLineNo">026</span> RdfXmlAbbrevSerializer.class,<a name="line.26"></a>
-<span class="sourceLineNo">027</span> TurtleSerializer.class,<a name="line.27"></a>
-<span class="sourceLineNo">028</span> NTripleSerializer.class,<a name="line.28"></a>
-<span class="sourceLineNo">029</span> N3Serializer.class<a name="line.29"></a>
-<span class="sourceLineNo">030</span> },<a name="line.30"></a>
-<span class="sourceLineNo">031</span> parsers={<a name="line.31"></a>
-<span class="sourceLineNo">032</span> Inherit.class,<a name="line.32"></a>
-<span class="sourceLineNo">033</span> RdfXmlParser.class,<a name="line.33"></a>
-<span class="sourceLineNo">034</span> TurtleParser.class,<a name="line.34"></a>
-<span class="sourceLineNo">035</span> NTripleParser.class,<a name="line.35"></a>
-<span class="sourceLineNo">036</span> N3Parser.class<a name="line.36"></a>
-<span class="sourceLineNo">037</span> }<a name="line.37"></a>
-<span class="sourceLineNo">038</span>)<a name="line.38"></a>
-<span class="sourceLineNo">039</span>public abstract class BasicRestJena extends BasicRestServlet {}<a name="line.39"></a>
+<span class="sourceLineNo">015</span>import javax.servlet.http.HttpServlet;<a name="line.15"></a>
+<span class="sourceLineNo">016</span><a name="line.16"></a>
+<span class="sourceLineNo">017</span>import org.apache.juneau.jena.*;<a name="line.17"></a>
+<span class="sourceLineNo">018</span>import org.apache.juneau.rest.annotation.*;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>/**<a name="line.20"></a>
+<span class="sourceLineNo">021</span> * Identical to {@link BasicRestServletJena} but doesn't extend from {@link HttpServlet}<a name="line.21"></a>
+<span class="sourceLineNo">022</span> */<a name="line.22"></a>
+<span class="sourceLineNo">023</span>@SuppressWarnings("serial")<a name="line.23"></a>
+<span class="sourceLineNo">024</span>@RestResource(<a name="line.24"></a>
+<span class="sourceLineNo">025</span> serializers={<a name="line.25"></a>
+<span class="sourceLineNo">026</span> Inherit.class,<a name="line.26"></a>
+<span class="sourceLineNo">027</span> RdfXmlSerializer.class,<a name="line.27"></a>
+<span class="sourceLineNo">028</span> RdfXmlAbbrevSerializer.class,<a name="line.28"></a>
+<span class="sourceLineNo">029</span> TurtleSerializer.class,<a name="line.29"></a>
+<span class="sourceLineNo">030</span> NTripleSerializer.class,<a name="line.30"></a>
+<span class="sourceLineNo">031</span> N3Serializer.class<a name="line.31"></a>
+<span class="sourceLineNo">032</span> },<a name="line.32"></a>
+<span class="sourceLineNo">033</span> parsers={<a name="line.33"></a>
+<span class="sourceLineNo">034</span> Inherit.class,<a name="line.34"></a>
+<span class="sourceLineNo">035</span> RdfXmlParser.class,<a name="line.35"></a>
+<span class="sourceLineNo">036</span> TurtleParser.class,<a name="line.36"></a>
+<span class="sourceLineNo">037</span> NTripleParser.class,<a name="line.37"></a>
+<span class="sourceLineNo">038</span> N3Parser.class<a name="line.38"></a>
+<span class="sourceLineNo">039</span> }<a name="line.39"></a>
+<span class="sourceLineNo">040</span>)<a name="line.40"></a>
+<span class="sourceLineNo">041</span>public abstract class BasicRestJena extends BasicRestServlet {}<a name="line.41"></a>
diff --git a/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRestJenaGroup.html b/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRestJenaGroup.html
index c61d50d..5ec8bdb 100644
--- a/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRestJenaGroup.html
+++ b/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRestJenaGroup.html
@@ -20,31 +20,33 @@
<span class="sourceLineNo">012</span>// ***************************************************************************************************************************<a name="line.12"></a>
<span class="sourceLineNo">013</span>package org.apache.juneau.rest;<a name="line.13"></a>
<span class="sourceLineNo">014</span><a name="line.14"></a>
-<span class="sourceLineNo">015</span>import org.apache.juneau.jena.*;<a name="line.15"></a>
-<span class="sourceLineNo">016</span>import org.apache.juneau.rest.annotation.*;<a name="line.16"></a>
-<span class="sourceLineNo">017</span><a name="line.17"></a>
-<span class="sourceLineNo">018</span>/**<a name="line.18"></a>
-<span class="sourceLineNo">019</span> * Resource group with additional RDF support.<a name="line.19"></a>
-<span class="sourceLineNo">020</span> */<a name="line.20"></a>
-<span class="sourceLineNo">021</span>@SuppressWarnings("serial")<a name="line.21"></a>
-<span class="sourceLineNo">022</span>@RestResource(<a name="line.22"></a>
-<span class="sourceLineNo">023</span> serializers={<a name="line.23"></a>
-<span class="sourceLineNo">024</span> Inherit.class,<a name="line.24"></a>
-<span class="sourceLineNo">025</span> RdfXmlSerializer.class,<a name="line.25"></a>
-<span class="sourceLineNo">026</span> RdfXmlAbbrevSerializer.class,<a name="line.26"></a>
-<span class="sourceLineNo">027</span> TurtleSerializer.class,<a name="line.27"></a>
-<span class="sourceLineNo">028</span> NTripleSerializer.class,<a name="line.28"></a>
-<span class="sourceLineNo">029</span> N3Serializer.class<a name="line.29"></a>
-<span class="sourceLineNo">030</span> },<a name="line.30"></a>
-<span class="sourceLineNo">031</span> parsers={<a name="line.31"></a>
-<span class="sourceLineNo">032</span> Inherit.class,<a name="line.32"></a>
-<span class="sourceLineNo">033</span> RdfXmlParser.class,<a name="line.33"></a>
-<span class="sourceLineNo">034</span> TurtleParser.class,<a name="line.34"></a>
-<span class="sourceLineNo">035</span> NTripleParser.class,<a name="line.35"></a>
-<span class="sourceLineNo">036</span> N3Parser.class<a name="line.36"></a>
-<span class="sourceLineNo">037</span> }<a name="line.37"></a>
-<span class="sourceLineNo">038</span>)<a name="line.38"></a>
-<span class="sourceLineNo">039</span>public abstract class BasicRestJenaGroup extends BasicRestServletGroup {}<a name="line.39"></a>
+<span class="sourceLineNo">015</span>import javax.servlet.http.HttpServlet;<a name="line.15"></a>
+<span class="sourceLineNo">016</span><a name="line.16"></a>
+<span class="sourceLineNo">017</span>import org.apache.juneau.jena.*;<a name="line.17"></a>
+<span class="sourceLineNo">018</span>import org.apache.juneau.rest.annotation.*;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>/**<a name="line.20"></a>
+<span class="sourceLineNo">021</span> * Identical to {@link BasicRestServletJenaGroup} but doesn't extend from {@link HttpServlet}<a name="line.21"></a>
+<span class="sourceLineNo">022</span> */<a name="line.22"></a>
+<span class="sourceLineNo">023</span>@SuppressWarnings("serial")<a name="line.23"></a>
+<span class="sourceLineNo">024</span>@RestResource(<a name="line.24"></a>
+<span class="sourceLineNo">025</span> serializers={<a name="line.25"></a>
+<span class="sourceLineNo">026</span> Inherit.class,<a name="line.26"></a>
+<span class="sourceLineNo">027</span> RdfXmlSerializer.class,<a name="line.27"></a>
+<span class="sourceLineNo">028</span> RdfXmlAbbrevSerializer.class,<a name="line.28"></a>
+<span class="sourceLineNo">029</span> TurtleSerializer.class,<a name="line.29"></a>
+<span class="sourceLineNo">030</span> NTripleSerializer.class,<a name="line.30"></a>
+<span class="sourceLineNo">031</span> N3Serializer.class<a name="line.31"></a>
+<span class="sourceLineNo">032</span> },<a name="line.32"></a>
+<span class="sourceLineNo">033</span> parsers={<a name="line.33"></a>
+<span class="sourceLineNo">034</span> Inherit.class,<a name="line.34"></a>
+<span class="sourceLineNo">035</span> RdfXmlParser.class,<a name="line.35"></a>
+<span class="sourceLineNo">036</span> TurtleParser.class,<a name="line.36"></a>
+<span class="sourceLineNo">037</span> NTripleParser.class,<a name="line.37"></a>
+<span class="sourceLineNo">038</span> N3Parser.class<a name="line.38"></a>
+<span class="sourceLineNo">039</span> }<a name="line.39"></a>
+<span class="sourceLineNo">040</span>)<a name="line.40"></a>
+<span class="sourceLineNo">041</span>public abstract class BasicRestJenaGroup extends BasicRestServletGroup {}<a name="line.41"></a>
diff --git a/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRestServletGroup.html b/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRestServletGroup.html
index e38aeb5..b099ae8 100644
--- a/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRestServletGroup.html
+++ b/content/site/apidocs-8.0.1/src-html/org/apache/juneau/rest/BasicRestServletGroup.html
@@ -37,7 +37,7 @@
<span class="sourceLineNo">029</span> *<a name="line.29"></a>
<span class="sourceLineNo">030</span> * <h5 class='section'>See Also:</h5><a name="line.30"></a>
<span class="sourceLineNo">031</span> * <ul><a name="line.31"></a>
-<span class="sourceLineNo">032</span> * <li class='link'>{@doc juneau-rest-server.Instantiation.RouterPages}<a name="line.32"></a>
+<span class="sourceLineNo">032</span> * <li class='link'>{@doc juneau-rest-server.Instantiation.BasicRestServletGroup}<a name="line.32"></a>
<span class="sourceLineNo">033</span> * </ul><a name="line.33"></a>
<span class="sourceLineNo">034</span> */<a name="line.34"></a>
<span class="sourceLineNo">035</span>@RestResource<a name="line.35"></a>